Download OpenAPI specification:Download
Public REST API for the NeoSpace platform (inference, chat, and platform management).
List audit logs across all spaces. space_id is an optional filter from the query string.
| limit | integer Limit |
| after | string After |
| action | Array of strings Action |
| resource_type | Array of strings Resource type |
| resource_id | Array of strings Resource ID |
| space_id | Array of strings Space ID (optional filter) |
| status_code | Array of integers Status code |
| start_time | string Start time (RFC3339 or YYYY-MM-DD) |
| end_time | string End time (RFC3339 or YYYY-MM-DD) |
curl -X GET "https://tenant.api.neospace.ai/v1/admin/audits" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "action": "example",
- "api_key": "REDACTED",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "is_api_key": false,
- "metadata": { },
- "resource_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "resource_type": "example",
- "space_id": "spa_1a2b3c4d5e6f708192a3b4c5",
- "status_code": 1,
- "timestamp": "2026-01-15T10:30:00Z",
- "user_email": "someone@example.com",
- "user_id": "usr_1a2b3c4d5e6f708192a3b4c5",
- "user_name": "churn-propensity-v3"
}
], - "has_more": false
}Distinct values available for each audit filter, across every space.
curl -X GET "https://tenant.api.neospace.ai/v1/admin/audits/facets" \ -H "x-api-key: $API_KEY"
{- "actions": [
- "example"
], - "resource_types": [
- "example"
]
}Get any audit log entry regardless of space.
| id required | string Audit ID |
curl -X GET "https://tenant.api.neospace.ai/v1/admin/audits/{id}" \ -H "x-api-key: $API_KEY"
{- "action": "example",
- "api_key": "REDACTED",
- "id": "aud_1a2b3c4d5e6f708192a3b4c5",
- "is_api_key": false,
- "metadata": { },
- "resource_id": "aud_1a2b3c4d5e6f708192a3b4c5",
- "resource_type": "example",
- "space_id": "spa_1a2b3c4d5e6f708192a3b4c5",
- "status_code": 1,
- "timestamp": "2026-01-15T10:30:00Z",
- "user_email": "someone@example.com",
- "user_id": "usr_1a2b3c4d5e6f708192a3b4c5",
- "user_name": "churn-propensity-v3"
}Current value of every series the platform publishes, in Prometheus exposition format. This is the pull surface for an external collector — an OpenTelemetry Collector's prometheus receiver, vmagent, or Prometheus itself — and takes no parameters: the metric families are fixed (node_*, task_*, app_*, scalinggroup_*). Unlike /v1/metrics/query it needs no PromQL.
| Authorization required | string Default: Bearer <Add access token here> Insert your access token |
curl -X GET "https://tenant.api.neospace.ai/v1/metrics" \ -H "x-api-key: $API_KEY"
Label names known to the metrics backend, optionally restricted by a series selector.
| match | string Series selector (singular, no brackets) |
curl -X GET "https://tenant.api.neospace.ai/v1/metrics/labels" \ -H "x-api-key: $API_KEY"
{- "data": [
- "example"
], - "isPartial": false,
- "status": "PENDING",
- "warnings": [
- "example"
]
}Values of a single label, optionally restricted by a series selector.
| label required | string Label name |
| match | string Series selector (singular, no brackets) |
curl -X GET "https://tenant.api.neospace.ai/v1/metrics/labels/{label}/values" \ -H "x-api-key: $API_KEY"
{- "data": [
- "example"
], - "isPartial": false,
- "status": "PENDING",
- "warnings": [
- "example"
]
}Prometheus instant query against the platform's metrics backend: evaluates a PromQL expression at a
single instant and returns one sample per matching series. GET /v1/metrics/query_range takes the same
expressions and returns a time series per match instead. The query parameter lists the metric
families, series and labels available.
Examples
avg(node_gpu_utilization) — average GPU utilization across all nodes.100 * node_gpu_memory_used_gb / clamp_min(node_gpu_memory_total_gb, 1) — VRAM in use per GPU, in %.sum by (node) (node_gpu_power_watts) — power draw per node, in W.node_gpu_health > 0 — GPUs currently in warn or fail.sum by (node, iface) (rate(node_net_rx_bytes[5m])) — receive throughput per interface, in bytes/s.topk(5, avg by (job) (task_gpu_utilization)) — the five jobs using the most GPU.increase(task_oom_kill_total{job="my-job"}[1h]) — OOM kills per task of a job in the last hour.sum(app_vllm:num_requests_waiting{job=~"my-group-[0-9]+"}) — requests queued across a scaling
group's replicas.scalinggroup_desired_replicas - scalinggroup_ready_replicas — replicas each scaling group is still
waiting on.Good to know
*_total, the network, NVLink and data-volume byte counts, task_cpu_usage_usec) only
grow: wrap them in rate() or increase().rate() a window of at least 1m.[0-9] instead of \d and [.] instead of \..| query required | string PromQL expression over the four metric families the platform publishes — the same set
The platform's own workloads publish, among others:
|
| time | string Evaluation instant, in integer unix seconds; defaults to now. |
curl -X GET "https://tenant.api.neospace.ai/v1/metrics/query?query=QUERY" \ -H "x-api-key: $API_KEY"
{- "data": {
- "result": [
- { }
], - "resultType": "example"
}, - "isPartial": false,
- "status": "PENDING",
- "warnings": [
- "example"
]
}Prometheus range query against the platform's metrics backend: evaluates a PromQL expression over a window and returns one time series per match. start/end/step are optional and default to the last hour at a 30s step.
It takes the same expressions as GET /v1/metrics/query: the query parameter lists the metric
families, series and labels available, and that operation has examples and the caveats both share.
| end | string Range end, in integer unix seconds; defaults to now. |
| query required | string PromQL expression over the four metric families the platform publishes — the same set
The platform's own workloads publish, among others:
|
| start | string Range start, in integer unix seconds; defaults to one hour before |
| step | string Resolution, as a duration ( |
curl -X GET "https://tenant.api.neospace.ai/v1/metrics/query_range?query=QUERY" \ -H "x-api-key: $API_KEY"
{- "data": {
- "result": [
- { }
], - "resultType": "example"
}, - "isPartial": false,
- "status": "PENDING",
- "warnings": [
- "example"
]
}Lists seats on whichever axis owns them. While a provider is SCIM-governed the IdP owns which seats exist, so the rows are directory groups carrying seat_id (nil when the group has no permission binding yet), after is a numeric offset, and unmapped_seats reports local rows the directory does not know. Otherwise the rows are seats and after is a seat id. scim_governed says which.
| limit | integer Default: 10 limit |
| after | string Cursor: a seat id, or a numeric offset while SCIM-governed |
curl -X GET "https://tenant.api.neospace.ai/v1/seats" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "external_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "grant": { },
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "member_count": 8,
- "name": "churn-propensity-v3",
- "permissions": [
- { }
], - "seat_id": "sea_1a2b3c4d5e6f708192a3b4c5",
- "spaces": [
- "example"
], - "updated_at": "2026-01-15T10:30:00Z",
- "updated_by": "example"
}
], - "has_more": false,
- "scim_governed": false,
- "unmapped_seats": [
- {
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "external_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "grant": { },
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "member_count": 8,
- "name": "churn-propensity-v3",
- "permissions": [
- { }
], - "seat_id": "sea_1a2b3c4d5e6f708192a3b4c5",
- "spaces": [
- "example"
], - "updated_at": "2026-01-15T10:30:00Z",
- "updated_by": "example"
}
]
}Create a new seat
Seat creation request
object Grant is the authorization, with the two axes stated separately. Optional at creation: the UI creates a bare seat and configures the grant afterwards via the seat editor. | |
| group_id | string |
| name | string Name asks the platform to create the group and own its name. GroupID binds to a group the identity provider already provisioned. Exactly one is given: which one decides who owns the group, so they cannot be merged. |
| permissions | Array of strings (permissions.Permission) Items Enum: "audits:get" "audits:list" "api-keys:create" "api-keys:delete" "api-keys:get" "api-keys:list" "api-keys:update" "architectures:list" "benchmarks:create" "benchmarks:delete" "benchmarks:get" "benchmarks:list" "benchmarks:update" "checkpoints:list" "checkpoints:update" "clusters:create" "clusters:delete" "clusters:get-stats" "clusters:list" "connectors:create" "connectors:files:compare" "connectors:delete" "connectors:files" "connectors:get" "connectors:list" "data-models:create" "data-models:delete" "data-models:get" "data-models:list" "data-models:update" "data-enhancements:create" "data-enhancements:delete" "data-enhancements:get" "data-enhancements:list" "data-enhancements:update" "data-profiles:create" "data-profiles:archive" "data-profiles:delete" "data-profiles:get" "data-profiles:stats" "data-profiles:list" "data-profiles:update" "drift-policies:create" "drift-policies:delete" "drift-policies:get" "drift-policies:list" "drift-policies:update" "favorites:create" "favorites:delete" "folders:create" "folders:delete" "folders:get" "folders:list" "folders:move" "folders:update" "data-preprocesses:create" "data-preprocesses:archive" "data-preprocesses:delete" "data-preprocesses:get" "data-preprocesses:columns" "data-preprocesses:list" "data-preprocesses:update" "data-extractions:create" "data-extractions:delete" "data-extractions:get" "data-extractions:list" "data-extractions:update" "model-designs:create" "model-designs:get" "model-designs:list" "model-designs:update" "model-designs:publish" "model-designs:archive" "model-designs:delete" "evaluations:create" "inference-servers:create" "inference-servers:delete" "inference-servers:get" "inference-servers:list" "inference-servers:update" "served-models:list" "served-models:create" "model-endpoints:create" "model-endpoints:get" "model-endpoints:list" "model-endpoints:delete" "leaderboards:list" "neocore:read" "neocore:write" "metrics:read" "spaces:create" "spaces:delete" "spaces:get" "spaces:list" "spaces:get-members" "spaces:invite" "spaces:assign-cluster" "spaces:update" "trainings:create" "trainings:cancel" "trainings:delete" "trainings:get" "trainings:get-metrics" "trainings:get-logs" "trainings:list" "trainings:update" "seats:create" "seats:delete" "seats:get" "seats:list" "seats:update" "admin:users:list" "admin:users:update" "admin:users:delete" "admin:oidc:manage" "admin:audits:list" "admin:audits:get" "admin:metrics:read" "admin:mfa-policy:get" "admin:mfa-policy:update" "notifications:list" "notifications:update" "nodes:list" "nodes:create" "nodes:delete" "nodes:update" "nodes:move" "nodes:token:generate" "external-secrets:create" "external-secrets:delete" "external-secrets:get" "external-secrets:list" "external-secrets:resync" "*" Deprecated: use Grant. |
| spaces | Array of strings Spaces and Permissions are the deprecated flat pair, kept for clients that have not moved to Grant. Sending both shapes in one request is a 400 — there is no sane way to merge two statements of the same thing. Deprecated: use Grant. |
{- "grant": {
- "admin": true,
- "global_permissions": [
- "audits:get"
], - "space": {
- "admin": true,
- "ids": [
- "string"
], - "permissions": [
- "audits:get"
]
}
}, - "group_id": "string",
- "name": "string",
- "permissions": [
- "audits:get"
], - "spaces": [
- "string"
]
}{- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "grant": {
- "admin": false,
- "global_permissions": [
- "audits:get"
], - "space": {
- "admin": false,
- "ids": [
- "obj_1a2b3c4d5e6f708192a3b4c5",
- "obj_1a2b3c4d5e6f708192a3b4d6"
], - "permissions": [
- { }
]
}
}, - "id": "sea_1a2b3c4d5e6f708192a3b4c5",
- "name": "Data scientist",
- "permissions": [
- "audits:get"
], - "spaces": [
- "example"
], - "updated_at": "2026-01-15T10:30:00Z",
- "updated_by": "example"
}curl -X GET "https://tenant.api.neospace.ai/v1/seats/{id}" \ -H "x-api-key: $API_KEY"
{- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "grant": {
- "admin": false,
- "global_permissions": [
- "audits:get"
], - "space": {
- "admin": false,
- "ids": [
- "obj_1a2b3c4d5e6f708192a3b4c5",
- "obj_1a2b3c4d5e6f708192a3b4d6"
], - "permissions": [
- { }
]
}
}, - "id": "sea_1a2b3c4d5e6f708192a3b4c5",
- "name": "Data scientist",
- "permissions": [
- "audits:get"
], - "spaces": [
- "example"
], - "updated_at": "2026-01-15T10:30:00Z",
- "updated_by": "example"
}Update a seat by ID
| id required | string Seat ID |
Seat update request
object Grant replaces the seat's authorization wholesale when present, and leaves it untouched when absent. It is deliberately not merged field by field: the grant is one coherent statement, and merging halves of it against stored values is what made a coherent edit look incoherent — dropping the last space-scoped permission was judged against the Spaces it was replacing. | |
| name | string |
| permissions | Array of strings (permissions.Permission) Items Enum: "audits:get" "audits:list" "api-keys:create" "api-keys:delete" "api-keys:get" "api-keys:list" "api-keys:update" "architectures:list" "benchmarks:create" "benchmarks:delete" "benchmarks:get" "benchmarks:list" "benchmarks:update" "checkpoints:list" "checkpoints:update" "clusters:create" "clusters:delete" "clusters:get-stats" "clusters:list" "connectors:create" "connectors:files:compare" "connectors:delete" "connectors:files" "connectors:get" "connectors:list" "data-models:create" "data-models:delete" "data-models:get" "data-models:list" "data-models:update" "data-enhancements:create" "data-enhancements:delete" "data-enhancements:get" "data-enhancements:list" "data-enhancements:update" "data-profiles:create" "data-profiles:archive" "data-profiles:delete" "data-profiles:get" "data-profiles:stats" "data-profiles:list" "data-profiles:update" "drift-policies:create" "drift-policies:delete" "drift-policies:get" "drift-policies:list" "drift-policies:update" "favorites:create" "favorites:delete" "folders:create" "folders:delete" "folders:get" "folders:list" "folders:move" "folders:update" "data-preprocesses:create" "data-preprocesses:archive" "data-preprocesses:delete" "data-preprocesses:get" "data-preprocesses:columns" "data-preprocesses:list" "data-preprocesses:update" "data-extractions:create" "data-extractions:delete" "data-extractions:get" "data-extractions:list" "data-extractions:update" "model-designs:create" "model-designs:get" "model-designs:list" "model-designs:update" "model-designs:publish" "model-designs:archive" "model-designs:delete" "evaluations:create" "inference-servers:create" "inference-servers:delete" "inference-servers:get" "inference-servers:list" "inference-servers:update" "served-models:list" "served-models:create" "model-endpoints:create" "model-endpoints:get" "model-endpoints:list" "model-endpoints:delete" "leaderboards:list" "neocore:read" "neocore:write" "metrics:read" "spaces:create" "spaces:delete" "spaces:get" "spaces:list" "spaces:get-members" "spaces:invite" "spaces:assign-cluster" "spaces:update" "trainings:create" "trainings:cancel" "trainings:delete" "trainings:get" "trainings:get-metrics" "trainings:get-logs" "trainings:list" "trainings:update" "seats:create" "seats:delete" "seats:get" "seats:list" "seats:update" "admin:users:list" "admin:users:update" "admin:users:delete" "admin:oidc:manage" "admin:audits:list" "admin:audits:get" "admin:metrics:read" "admin:mfa-policy:get" "admin:mfa-policy:update" "notifications:list" "notifications:update" "nodes:list" "nodes:create" "nodes:delete" "nodes:update" "nodes:move" "nodes:token:generate" "external-secrets:create" "external-secrets:delete" "external-secrets:get" "external-secrets:list" "external-secrets:resync" "*" Deprecated: use Grant. Merged against the stored grant, as before. |
| spaces | Array of strings Deprecated: use Grant. Merged against the stored grant, as before. |
{- "grant": {
- "admin": true,
- "global_permissions": [
- "audits:get"
], - "space": {
- "admin": true,
- "ids": [
- "string"
], - "permissions": [
- "audits:get"
]
}
}, - "name": "string",
- "permissions": [
- "audits:get"
], - "spaces": [
- "string"
]
}{- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "grant": {
- "admin": false,
- "global_permissions": [
- "audits:get"
], - "space": {
- "admin": false,
- "ids": [
- "obj_1a2b3c4d5e6f708192a3b4c5",
- "obj_1a2b3c4d5e6f708192a3b4d6"
], - "permissions": [
- { }
]
}
}, - "id": "sea_1a2b3c4d5e6f708192a3b4c5",
- "name": "Data scientist",
- "permissions": [
- "audits:get"
], - "spaces": [
- "example"
], - "updated_at": "2026-01-15T10:30:00Z",
- "updated_by": "example"
}Retrieve all spaces
| limit | integer Default: 10 Limit |
| after | string Default: "\"\"" After |
| name | string Filter by space name |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "cluster_id": "clu_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": { },
- "description": "Scores the active customer base every morning.",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "updated_at": "2026-01-15T10:30:00Z",
- "updated_by": { }
}
], - "has_more": false
}Create a new space
Space creation request
| description required | string |
| name required | string |
| seat_id | string |
{- "description": "string",
- "name": "string",
- "seat_id": "string"
}{- "cluster_id": "clu_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "email": "someone@example.com",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "description": "Scores the active customer base every morning.",
- "id": "spa_1a2b3c4d5e6f708192a3b4c5",
- "name": "Risk",
- "updated_at": "2026-01-15T10:30:00Z",
- "updated_by": "example"
}curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}" \ -H "x-api-key: $API_KEY"
{- "id": "obj_1a2b3c4d5e6f708192a3b4c5"
}curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}" \ -H "x-api-key: $API_KEY"
{- "cluster_id": "clu_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "email": "someone@example.com",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "description": "Scores the active customer base every morning.",
- "id": "spa_1a2b3c4d5e6f708192a3b4c5",
- "name": "Risk",
- "updated_at": "2026-01-15T10:30:00Z",
- "updated_by": "example"
}Update a space by ID
| spaceId required | string Space ID |
Space update request
| description | string |
| name | string |
{- "description": "string",
- "name": "string"
}{- "cluster_id": "clu_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "email": "someone@example.com",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "description": "Scores the active customer base every morning.",
- "id": "spa_1a2b3c4d5e6f708192a3b4c5",
- "name": "Risk",
- "updated_at": "2026-01-15T10:30:00Z",
- "updated_by": "example"
}List audits
| limit | integer Limit |
| after | string After |
| action | string Action |
| resource_type | string Resource type |
| resource_id | string Resource ID |
| user_id | string User ID |
| user_email | string User email |
| user_name | string User name |
| space_id | string Space ID |
| status_code | integer Status code |
| start_time | string Start time (RFC3339 format, e.g. 2024-01-15T10:00:00Z or date only 2024-01-15) |
| end_time | string End time (RFC3339 format, e.g. 2024-01-15T18:00:00Z or date only 2024-01-15) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/audits" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "action": "example",
- "api_key": "REDACTED",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "is_api_key": false,
- "metadata": { },
- "resource_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "resource_type": "example",
- "space_id": "spa_1a2b3c4d5e6f708192a3b4c5",
- "status_code": 1,
- "timestamp": "2026-01-15T10:30:00Z",
- "user_email": "someone@example.com",
- "user_id": "usr_1a2b3c4d5e6f708192a3b4c5",
- "user_name": "churn-propensity-v3"
}
], - "has_more": false
}The distinct action and resource_type values present in this space's audit log, so the activity-log filters are driven by the data rather than a hard-coded list.
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/audits/facets" \ -H "x-api-key: $API_KEY"
{- "actions": [
- "example"
], - "resource_types": [
- "example"
]
}Get audit by ID with all details including metadata
| id required | string Audit ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/audits/{id}" \ -H "x-api-key: $API_KEY"
{- "action": "example",
- "api_key": "REDACTED",
- "id": "aud_1a2b3c4d5e6f708192a3b4c5",
- "is_api_key": false,
- "metadata": { },
- "resource_id": "aud_1a2b3c4d5e6f708192a3b4c5",
- "resource_type": "example",
- "space_id": "spa_1a2b3c4d5e6f708192a3b4c5",
- "status_code": 1,
- "timestamp": "2026-01-15T10:30:00Z",
- "user_email": "someone@example.com",
- "user_id": "usr_1a2b3c4d5e6f708192a3b4c5",
- "user_name": "churn-propensity-v3"
}| limit | integer Default: 10 Page size |
| after | string Cursor from the previous page |
| status | string Comma-separated run statuses to keep |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/batch-inference-runs" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "cache_dir": "/datasets/transactions",
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "event_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "finished_at": "2026-01-15T10:30:00Z",
- "flags": { },
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "inference_version": "1.0.0",
- "output_destination": { },
- "output_dir": "/datasets/transactions",
- "output_summary": { },
- "pool": { },
- "progress": { },
- "publish": { },
- "recipe_yaml": "example",
- "shards": 1,
- "space": "example",
- "started_at": "2026-01-15T10:30:00Z",
- "status": "PENDING",
- "status_reason": "Example message",
- "time_range": { },
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z"
}
], - "has_more": false
}Body (checkpoint_id required)
object AnchorSource scores each client at the positions named by a dataset/file instead of at a
single date (cortex | |
| checkpoint_id | string CheckpointID scores with a checkpoint directly — no inference server, nothing deployed. Ignored when the route already carries a server id. |
| event_dataset_ids | Array of strings EventDatasetIDs are the registered datasets feeding the model input views. It may be empty when every view is instead fed by a local dataset below; full per-view coverage (registered OR local) is enforced in the service, so there is no min=1 binding here. |
object EventDatasetShifts optionally overrides the per-dataset temporal shift, keyed by
the dataset id (registered) or the local dataset_key. Absent keys inherit the
shift the dataset was trained with; a present key wins, and an explicit empty
string clears it (score with no offset). Same string encoding as the training
shift ("1h" or " | |
Array of objects (request.CreateBatchInferenceLocalDataset) EventDatasetsLocal are event datasets fed by absolute path or neocore DataVolume rather than a registered dataset id. Each covers the model input view named by its dataset_key, so a run can be driven entirely from local paths; a run with none stays byte-identical. Appended to the id-resolved event datasets. | |
object (request.CreateBatchInferenceFlagsBody) | |
| inference_version | string <= 128 characters InferenceVersion pins the TAG of the cortex-infer image this run uses (e.g. "v0.0.9"): the carrier init container injects that image's engines/ into the ranks, and the publish step runs its binary. Empty = the architecture's tag. It does NOT change the model image — the ranks run the cortex image the checkpoint was trained with, chosen by the checkpoint and never by an operator here. |
object Output optionally sets where this run's writer publishes predictions. ConnectorID set → an output connector (aws-s3 / aws-s3-instance-profile / oracle_s3 / oracle_instance_principal / local) at Path; empty ConnectorID + non-empty Path → a raw shared-filesystem path; both empty → the auto-derived run output dir (current behavior). Mirrors the deploy-time output-destination shape. | |
object Parallelism fans the run out into N independent data shards (bucket-shard i/N), each a driver + its own output writer, mirroring the hand-run sharded batch. Nil or shards<=1 runs the single-driver path (byte-identical to before). | |
object (request.CreateBatchInferencePool) | |
| recipe_yaml | string RecipeYaml, when set, is a full user-edited cortex-batch-infer recipe document used as the run's recipe instead of the field-derived one — the advanced "YAML" mode. The field-derived recipe knobs are ignored (the YAML wins for non-managed keys), but the datasets/pool/output are still resolved the normal way to drive the job wiring (managed fields + volumes). The platform re-injects its managed fields over it at submit so the user can't break the wiring. Malformed YAML → 400. Empty = the field-derived recipe (byte-identical to the stepper path). On a server-scoped run, a top-level |
required | object (request.CreateBatchInferenceTimeRange) |
{- "anchor_source": {
- "dataset_ids": [
- "string"
], - "datasets_local": [
- {
- "connector_id": "string",
- "dataset_key": "string",
- "datavolume_name": "string",
- "dir": "string",
- "subpath": "string"
}
], - "extend_to_cover": true,
- "ts_col": "string"
}, - "checkpoint_id": "string",
- "event_dataset_ids": [
- "string"
], - "event_dataset_shifts": {
- "property1": "string",
- "property2": "string"
}, - "event_datasets_local": [
- {
- "connector_id": "string",
- "dataset_key": "string",
- "datavolume_name": "string",
- "dir": "string",
- "subpath": "string"
}
], - "flags": {
- "eos_inference_mode": "string",
- "include_all_probs": true,
- "infer_every_event": true,
- "infer_target_date": "string",
- "logits_only": true,
- "omit_predictions_json": true,
- "save_logits": true,
- "use_context": true
}, - "inference_version": "string",
- "output": {
- "connector_id": "string",
- "path": "string"
}, - "parallelism": {
- "concurrency": 1,
- "group_workers": 1,
- "shard_workers": 1,
- "shards": 1
}, - "pool": {
- "file_source": {
- "as_of_last_event": true,
- "connector_id": "string",
- "path": "string"
}, - "filter_dataset_ids": [
- "string"
], - "filter_datasets_local": [
- {
- "connector_id": "string",
- "dataset_key": "string",
- "datavolume_name": "string",
- "dir": "string",
- "subpath": "string"
}
], - "reference_dataset_ids": [
- "string"
], - "reference_datasets_local": [
- {
- "connector_id": "string",
- "dataset_key": "string",
- "datavolume_name": "string",
- "dir": "string",
- "subpath": "string"
}
]
}, - "recipe_yaml": "string",
- "time_range": {
- "end": "string",
- "start": "string"
}
}{- "cache_dir": "/datasets/transactions",
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "event_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "finished_at": "2026-01-15T10:30:00Z",
- "flags": {
- "eos_inference_mode": "example",
- "include_all_probs": false,
- "infer_every_event": false,
- "infer_target_date": "example",
- "logits_only": false,
- "omit_predictions_json": false,
- "save_logits": false,
- "use_context": false
}, - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "inference_version": "1.0.0",
- "output_destination": {
- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "path": "/datasets/transactions"
}, - "output_dir": "/datasets/transactions",
- "output_summary": {
- "duration_sec": 1,
- "n_files": 1,
- "n_rows": 1,
- "output_dir": "/datasets/transactions",
- "written_by": "example"
}, - "pool": {
- "as_of": "example",
- "enabled": true,
- "file_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "file_path": "/datasets/transactions",
- "file_ts_col": "example",
- "reference_count": 8,
- "reference_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "scored": 1,
- "size": 1,
- "source": "example"
}, - "progress": {
- "batches_processed": 1,
- "cache_buckets_total": 1,
- "cache_shards_done": 1,
- "cache_shards_total": 1,
- "cache_state": "PENDING",
- "chunks_done": 1,
- "chunks_per_second": 0.5,
- "chunks_total": 1,
- "elapsed_seconds": 0.5,
- "eta_seconds": 0.5,
- "events_done": 1,
- "events_per_second": 0.5,
- "events_per_second_instant": 0.5,
- "events_per_second_scoring": 0.5,
- "events_total": 1,
- "files_processed": 1,
- "files_total": 1,
- "latency_max_ms": 0.5,
- "latency_mean_ms": 0.5,
- "mem_peak_mb": 0.5,
- "mem_rss_mb": 0.5,
- "mem_vms_mb": 0.5,
- "message": "Example message",
- "percent": 0.5,
- "phase": "example",
- "phase_history": [
- { }
], - "rows_per_second": 0.5,
- "rows_processed": 1,
- "updated_at": "2026-01-15T10:30:00Z",
- "users_done": 1,
- "users_inflight": 1,
- "users_per_second": 0.5,
- "users_per_second_instant": 0.5,
- "users_per_second_scoring": 0.5,
- "users_total": 1,
- "writer_acked_total": 1,
- "writer_addr": "example",
- "writer_errors_total": 1,
- "writer_rows_buffered_total": 1,
- "writer_rows_flushed_total": 1,
- "writer_submitted_total": 1
}, - "publish": {
- "job_name": "churn-propensity-v3",
- "reason": "Example message",
- "status": "PENDING",
- "submitted_at": "2026-01-15T10:30:00Z",
- "updated_at": "2026-01-15T10:30:00Z"
}, - "recipe_yaml": "example",
- "shards": 1,
- "space": "example",
- "started_at": "2026-01-15T10:30:00Z",
- "status": "PENDING",
- "status_reason": "Example message",
- "time_range": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z"
}curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/batch-inference-runs/{id}" \ -H "x-api-key: $API_KEY"
{- "cache_dir": "/datasets/transactions",
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "event_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "finished_at": "2026-01-15T10:30:00Z",
- "flags": {
- "eos_inference_mode": "example",
- "include_all_probs": false,
- "infer_every_event": false,
- "infer_target_date": "example",
- "logits_only": false,
- "omit_predictions_json": false,
- "save_logits": false,
- "use_context": false
}, - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "inference_version": "1.0.0",
- "output_destination": {
- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "path": "/datasets/transactions"
}, - "output_dir": "/datasets/transactions",
- "output_summary": {
- "duration_sec": 1,
- "n_files": 1,
- "n_rows": 1,
- "output_dir": "/datasets/transactions",
- "written_by": "example"
}, - "pool": {
- "as_of": "example",
- "enabled": true,
- "file_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "file_path": "/datasets/transactions",
- "file_ts_col": "example",
- "reference_count": 8,
- "reference_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "scored": 1,
- "size": 1,
- "source": "example"
}, - "progress": {
- "batches_processed": 1,
- "cache_buckets_total": 1,
- "cache_shards_done": 1,
- "cache_shards_total": 1,
- "cache_state": "PENDING",
- "chunks_done": 1,
- "chunks_per_second": 0.5,
- "chunks_total": 1,
- "elapsed_seconds": 0.5,
- "eta_seconds": 0.5,
- "events_done": 1,
- "events_per_second": 0.5,
- "events_per_second_instant": 0.5,
- "events_per_second_scoring": 0.5,
- "events_total": 1,
- "files_processed": 1,
- "files_total": 1,
- "latency_max_ms": 0.5,
- "latency_mean_ms": 0.5,
- "mem_peak_mb": 0.5,
- "mem_rss_mb": 0.5,
- "mem_vms_mb": 0.5,
- "message": "Example message",
- "percent": 0.5,
- "phase": "example",
- "phase_history": [
- { }
], - "rows_per_second": 0.5,
- "rows_processed": 1,
- "updated_at": "2026-01-15T10:30:00Z",
- "users_done": 1,
- "users_inflight": 1,
- "users_per_second": 0.5,
- "users_per_second_instant": 0.5,
- "users_per_second_scoring": 0.5,
- "users_total": 1,
- "writer_acked_total": 1,
- "writer_addr": "example",
- "writer_errors_total": 1,
- "writer_rows_buffered_total": 1,
- "writer_rows_flushed_total": 1,
- "writer_submitted_total": 1
}, - "publish": {
- "job_name": "churn-propensity-v3",
- "reason": "Example message",
- "status": "PENDING",
- "submitted_at": "2026-01-15T10:30:00Z",
- "updated_at": "2026-01-15T10:30:00Z"
}, - "recipe_yaml": "example",
- "shards": 1,
- "space": "example",
- "started_at": "2026-01-15T10:30:00Z",
- "status": "PENDING",
- "status_reason": "Example message",
- "time_range": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z"
}Stop a queued or running batch run. Output already written is kept.
| id required | string Batch inference run ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/batch-inference-runs/{id}/cancel" \ -H "x-api-key: $API_KEY"
{- "cache_dir": "/datasets/transactions",
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "event_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "finished_at": "2026-01-15T10:30:00Z",
- "flags": {
- "eos_inference_mode": "example",
- "include_all_probs": false,
- "infer_every_event": false,
- "infer_target_date": "example",
- "logits_only": false,
- "omit_predictions_json": false,
- "save_logits": false,
- "use_context": false
}, - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "inference_version": "1.0.0",
- "output_destination": {
- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "path": "/datasets/transactions"
}, - "output_dir": "/datasets/transactions",
- "output_summary": {
- "duration_sec": 1,
- "n_files": 1,
- "n_rows": 1,
- "output_dir": "/datasets/transactions",
- "written_by": "example"
}, - "pool": {
- "as_of": "example",
- "enabled": true,
- "file_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "file_path": "/datasets/transactions",
- "file_ts_col": "example",
- "reference_count": 8,
- "reference_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "scored": 1,
- "size": 1,
- "source": "example"
}, - "progress": {
- "batches_processed": 1,
- "cache_buckets_total": 1,
- "cache_shards_done": 1,
- "cache_shards_total": 1,
- "cache_state": "PENDING",
- "chunks_done": 1,
- "chunks_per_second": 0.5,
- "chunks_total": 1,
- "elapsed_seconds": 0.5,
- "eta_seconds": 0.5,
- "events_done": 1,
- "events_per_second": 0.5,
- "events_per_second_instant": 0.5,
- "events_per_second_scoring": 0.5,
- "events_total": 1,
- "files_processed": 1,
- "files_total": 1,
- "latency_max_ms": 0.5,
- "latency_mean_ms": 0.5,
- "mem_peak_mb": 0.5,
- "mem_rss_mb": 0.5,
- "mem_vms_mb": 0.5,
- "message": "Example message",
- "percent": 0.5,
- "phase": "example",
- "phase_history": [
- { }
], - "rows_per_second": 0.5,
- "rows_processed": 1,
- "updated_at": "2026-01-15T10:30:00Z",
- "users_done": 1,
- "users_inflight": 1,
- "users_per_second": 0.5,
- "users_per_second_instant": 0.5,
- "users_per_second_scoring": 0.5,
- "users_total": 1,
- "writer_acked_total": 1,
- "writer_addr": "example",
- "writer_errors_total": 1,
- "writer_rows_buffered_total": 1,
- "writer_rows_flushed_total": 1,
- "writer_submitted_total": 1
}, - "publish": {
- "job_name": "churn-propensity-v3",
- "reason": "Example message",
- "status": "PENDING",
- "submitted_at": "2026-01-15T10:30:00Z",
- "updated_at": "2026-01-15T10:30:00Z"
}, - "recipe_yaml": "example",
- "shards": 1,
- "space": "example",
- "started_at": "2026-01-15T10:30:00Z",
- "status": "PENDING",
- "status_reason": "Example message",
- "time_range": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z"
}Throughput, shard progress and resource use for a run over a rolling window.
| id required | string Batch inference run ID |
| window | string Default: "10m" Metrics window as a Go duration (e.g. 10m, 1h) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/batch-inference-runs/{id}/metrics" \ -H "x-api-key: $API_KEY"
{- "batch_p50_ms": [
- {
- "timestamp": "2026-01-15T10:30:00Z",
- "value": 0.5
}
], - "batch_p95_ms": [
- {
- "timestamp": "2026-01-15T10:30:00Z",
- "value": 0.5
}
], - "chunks_per_second": [
- {
- "timestamp": "2026-01-15T10:30:00Z",
- "value": 0.5
}
], - "inflight": [
- {
- "timestamp": "2026-01-15T10:30:00Z",
- "value": 0.5
}
], - "memory_rss_mb": [
- {
- "timestamp": "2026-01-15T10:30:00Z",
- "value": 0.5
}
], - "throughput": [
- {
- "timestamp": "2026-01-15T10:30:00Z",
- "value": 0.5
}
], - "users_per_second": [
- {
- "timestamp": "2026-01-15T10:30:00Z",
- "value": 0.5
}
], - "window": "example",
- "writer_errors": [
- {
- "timestamp": "2026-01-15T10:30:00Z",
- "value": 0.5
}
], - "writer_rows": [
- {
- "timestamp": "2026-01-15T10:30:00Z",
- "value": 0.5
}
]
}Status, failure reason, nodes, live progress and writer status for each shard of a data-parallel run — on failure, which shard broke and why.
| id required | string Batch inference run ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/batch-inference-runs/{id}/shards" \ -H "x-api-key: $API_KEY"
{- "shards": [
- {
- "code": "example",
- "driver_job": "example",
- "exit_code": 1,
- "index": 1,
- "log_tail": "example",
- "nodes": [
- "example"
], - "oom_killed": false,
- "progress": { },
- "reason": "Example message",
- "status": "PENDING",
- "writer_job": "example",
- "writer_status": "PENDING"
}
]
}| id required | string Checkpoint ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/checkpoints/{id}/batch-model" \ -H "x-api-key: $API_KEY"
{- "info": {
- "backbone_dim": 1,
- "checkpoint": "example",
- "engine_params": 1,
- "input_keys": [
- "REDACTED"
], - "kind": "example",
- "target_keys": [
- "REDACTED"
], - "total_params": 1
}, - "input_views": [
- {
- "cat_cols": [
- "example"
], - "client_id_col": "example",
- "event_ts_col": "example",
- "key": "REDACTED",
- "label": "example",
- "n_cat": 1,
- "n_num": 1,
- "n_str": 1,
- "n_ts": 1,
- "num_cols": [
- "example"
], - "real_id_cols": [
- "example"
], - "role": "example",
- "str_cols": [
- "example"
], - "ts_cols": [
- "example"
], - "use_real_id_as_feature": false,
- "vocab_samples": [
- [
- "example"
]
], - "vocab_sizes": [
- 1
]
}
], - "target_views": [
- {
- "cat_cols": [
- "example"
], - "client_id_col": "example",
- "event_ts_col": "example",
- "key": "REDACTED",
- "label": "example",
- "n_cat": 1,
- "n_num": 1,
- "n_str": 1,
- "n_ts": 1,
- "num_cols": [
- "example"
], - "real_id_cols": [
- "example"
], - "role": "example",
- "str_cols": [
- "example"
], - "ts_cols": [
- "example"
], - "use_real_id_as_feature": false,
- "vocab_samples": [
- [
- "example"
]
], - "vocab_sizes": [
- 1
]
}
]
}| id required | string Inference server ID |
| limit | integer Default: 10 Page size |
| after | string Cursor for pagination |
| status | string Comma-separated status filter |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/batch-runs" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "cache_dir": "/datasets/transactions",
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "event_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "finished_at": "2026-01-15T10:30:00Z",
- "flags": { },
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "inference_version": "1.0.0",
- "output_destination": { },
- "output_dir": "/datasets/transactions",
- "output_summary": { },
- "pool": { },
- "progress": { },
- "publish": { },
- "recipe_yaml": "example",
- "shards": 1,
- "space": "example",
- "started_at": "2026-01-15T10:30:00Z",
- "status": "PENDING",
- "status_reason": "Example message",
- "time_range": { },
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z"
}
], - "has_more": false
}Score a population offline against the model this server serves.
| id required | string Inference server ID |
Batch run configuration
object AnchorSource scores each client at the positions named by a dataset/file instead of at a
single date (cortex | |
| checkpoint_id | string CheckpointID scores with a checkpoint directly — no inference server, nothing deployed. Ignored when the route already carries a server id. |
| event_dataset_ids | Array of strings EventDatasetIDs are the registered datasets feeding the model input views. It may be empty when every view is instead fed by a local dataset below; full per-view coverage (registered OR local) is enforced in the service, so there is no min=1 binding here. |
object EventDatasetShifts optionally overrides the per-dataset temporal shift, keyed by
the dataset id (registered) or the local dataset_key. Absent keys inherit the
shift the dataset was trained with; a present key wins, and an explicit empty
string clears it (score with no offset). Same string encoding as the training
shift ("1h" or " | |
Array of objects (request.CreateBatchInferenceLocalDataset) EventDatasetsLocal are event datasets fed by absolute path or neocore DataVolume rather than a registered dataset id. Each covers the model input view named by its dataset_key, so a run can be driven entirely from local paths; a run with none stays byte-identical. Appended to the id-resolved event datasets. | |
object (request.CreateBatchInferenceFlagsBody) | |
| inference_version | string <= 128 characters InferenceVersion pins the TAG of the cortex-infer image this run uses (e.g. "v0.0.9"): the carrier init container injects that image's engines/ into the ranks, and the publish step runs its binary. Empty = the architecture's tag. It does NOT change the model image — the ranks run the cortex image the checkpoint was trained with, chosen by the checkpoint and never by an operator here. |
object Output optionally sets where this run's writer publishes predictions. ConnectorID set → an output connector (aws-s3 / aws-s3-instance-profile / oracle_s3 / oracle_instance_principal / local) at Path; empty ConnectorID + non-empty Path → a raw shared-filesystem path; both empty → the auto-derived run output dir (current behavior). Mirrors the deploy-time output-destination shape. | |
object Parallelism fans the run out into N independent data shards (bucket-shard i/N), each a driver + its own output writer, mirroring the hand-run sharded batch. Nil or shards<=1 runs the single-driver path (byte-identical to before). | |
object (request.CreateBatchInferencePool) | |
| recipe_yaml | string RecipeYaml, when set, is a full user-edited cortex-batch-infer recipe document used as the run's recipe instead of the field-derived one — the advanced "YAML" mode. The field-derived recipe knobs are ignored (the YAML wins for non-managed keys), but the datasets/pool/output are still resolved the normal way to drive the job wiring (managed fields + volumes). The platform re-injects its managed fields over it at submit so the user can't break the wiring. Malformed YAML → 400. Empty = the field-derived recipe (byte-identical to the stepper path). On a server-scoped run, a top-level |
required | object (request.CreateBatchInferenceTimeRange) |
{- "anchor_source": {
- "dataset_ids": [
- "string"
], - "datasets_local": [
- {
- "connector_id": "string",
- "dataset_key": "string",
- "datavolume_name": "string",
- "dir": "string",
- "subpath": "string"
}
], - "extend_to_cover": true,
- "ts_col": "string"
}, - "checkpoint_id": "string",
- "event_dataset_ids": [
- "string"
], - "event_dataset_shifts": {
- "property1": "string",
- "property2": "string"
}, - "event_datasets_local": [
- {
- "connector_id": "string",
- "dataset_key": "string",
- "datavolume_name": "string",
- "dir": "string",
- "subpath": "string"
}
], - "flags": {
- "eos_inference_mode": "string",
- "include_all_probs": true,
- "infer_every_event": true,
- "infer_target_date": "string",
- "logits_only": true,
- "omit_predictions_json": true,
- "save_logits": true,
- "use_context": true
}, - "inference_version": "string",
- "output": {
- "connector_id": "string",
- "path": "string"
}, - "parallelism": {
- "concurrency": 1,
- "group_workers": 1,
- "shard_workers": 1,
- "shards": 1
}, - "pool": {
- "file_source": {
- "as_of_last_event": true,
- "connector_id": "string",
- "path": "string"
}, - "filter_dataset_ids": [
- "string"
], - "filter_datasets_local": [
- {
- "connector_id": "string",
- "dataset_key": "string",
- "datavolume_name": "string",
- "dir": "string",
- "subpath": "string"
}
], - "reference_dataset_ids": [
- "string"
], - "reference_datasets_local": [
- {
- "connector_id": "string",
- "dataset_key": "string",
- "datavolume_name": "string",
- "dir": "string",
- "subpath": "string"
}
]
}, - "recipe_yaml": "string",
- "time_range": {
- "end": "string",
- "start": "string"
}
}{- "cache_dir": "/datasets/transactions",
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "event_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "finished_at": "2026-01-15T10:30:00Z",
- "flags": {
- "eos_inference_mode": "example",
- "include_all_probs": false,
- "infer_every_event": false,
- "infer_target_date": "example",
- "logits_only": false,
- "omit_predictions_json": false,
- "save_logits": false,
- "use_context": false
}, - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "inference_version": "1.0.0",
- "output_destination": {
- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "path": "/datasets/transactions"
}, - "output_dir": "/datasets/transactions",
- "output_summary": {
- "duration_sec": 1,
- "n_files": 1,
- "n_rows": 1,
- "output_dir": "/datasets/transactions",
- "written_by": "example"
}, - "pool": {
- "as_of": "example",
- "enabled": true,
- "file_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "file_path": "/datasets/transactions",
- "file_ts_col": "example",
- "reference_count": 8,
- "reference_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "scored": 1,
- "size": 1,
- "source": "example"
}, - "progress": {
- "batches_processed": 1,
- "cache_buckets_total": 1,
- "cache_shards_done": 1,
- "cache_shards_total": 1,
- "cache_state": "PENDING",
- "chunks_done": 1,
- "chunks_per_second": 0.5,
- "chunks_total": 1,
- "elapsed_seconds": 0.5,
- "eta_seconds": 0.5,
- "events_done": 1,
- "events_per_second": 0.5,
- "events_per_second_instant": 0.5,
- "events_per_second_scoring": 0.5,
- "events_total": 1,
- "files_processed": 1,
- "files_total": 1,
- "latency_max_ms": 0.5,
- "latency_mean_ms": 0.5,
- "mem_peak_mb": 0.5,
- "mem_rss_mb": 0.5,
- "mem_vms_mb": 0.5,
- "message": "Example message",
- "percent": 0.5,
- "phase": "example",
- "phase_history": [
- { }
], - "rows_per_second": 0.5,
- "rows_processed": 1,
- "updated_at": "2026-01-15T10:30:00Z",
- "users_done": 1,
- "users_inflight": 1,
- "users_per_second": 0.5,
- "users_per_second_instant": 0.5,
- "users_per_second_scoring": 0.5,
- "users_total": 1,
- "writer_acked_total": 1,
- "writer_addr": "example",
- "writer_errors_total": 1,
- "writer_rows_buffered_total": 1,
- "writer_rows_flushed_total": 1,
- "writer_submitted_total": 1
}, - "publish": {
- "job_name": "churn-propensity-v3",
- "reason": "Example message",
- "status": "PENDING",
- "submitted_at": "2026-01-15T10:30:00Z",
- "updated_at": "2026-01-15T10:30:00Z"
}, - "recipe_yaml": "example",
- "shards": 1,
- "space": "example",
- "started_at": "2026-01-15T10:30:00Z",
- "status": "PENDING",
- "status_reason": "Example message",
- "time_range": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z"
}List checkpoints by ID
| limit | integer Default: 10 Limit |
| after | string Default: "\"\"" After |
| query | string Case-insensitive substring match on checkpoint name |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/checkpoints" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "epoch": 1,
- "id": "che_1a2b3c4d5e6f708192a3b4c5",
- "metrics": { },
- "name": "churn-propensity-v3-step-4000",
- "path": "/datasets/transactions",
- "step": 1,
- "target_metrics": [
- { }
], - "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "training_kind": "PRETRAIN",
- "training_name": "churn-propensity-v3"
}
], - "has_more": false
}Get a single checkpoint by id
| id required | string Checkpoint ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/checkpoints/{id}" \ -H "x-api-key: $API_KEY"
{- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "epoch": 1,
- "id": "che_1a2b3c4d5e6f708192a3b4c5",
- "metrics": { },
- "name": "churn-propensity-v3-step-4000",
- "path": "/datasets/transactions",
- "step": 1,
- "target_metrics": [
- {
- "dataset": "example",
- "dataset_name": "transactions-daily",
- "name": "churn-propensity-v3",
- "type": "example",
- "values": { }
}
], - "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "training_kind": "PRETRAIN",
- "training_name": "churn-propensity-v3"
}Update the display name of a checkpoint
| id required | string Checkpoint ID |
Body
| name required | string [ 1 .. 128 ] characters |
{- "name": "string"
}{- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "epoch": 1,
- "id": "che_1a2b3c4d5e6f708192a3b4c5",
- "metrics": { },
- "name": "churn-propensity-v3-step-4000",
- "path": "/datasets/transactions",
- "step": 1,
- "target_metrics": [
- {
- "dataset": "example",
- "dataset_name": "transactions-daily",
- "name": "churn-propensity-v3",
- "type": "example",
- "values": { }
}
], - "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "training_kind": "PRETRAIN",
- "training_name": "churn-propensity-v3"
}Resolve the images + tunables an inference server built from this checkpoint would deploy with (checkpoint → training → architecture).
| id required | string Checkpoint ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/checkpoints/{id}/inference-config" \ -H "x-api-key: $API_KEY"
{- "architecture": "example",
- "image_go": "registry.example.com/image:tag",
- "max_seqlen": 4,
- "memory_margin": 0.5,
- "node_fraction": 0.5,
- "token_budget": 1
}Retrieve a list of connectors with pagination
| limit | integer Default: 10 limit |
| after | string after |
| name | string case-insensitive regular expression matched against the connector name |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/connectors" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "external_secret_id": "sec_1a2b3c4d5e6f708192a3b4c5",
- "extraction_id": "act_1a2b3c4d5e6f708192a3b4c5",
- "id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "name": "warehouse-transactions",
- "namespace": "Risk",
- "paths": [
- "/datasets/transactions"
], - "prefix": "example",
- "provider": "aws-s3",
- "region": "example",
- "volume_name": "shared-datasets",
- "volume_root": "example"
}
], - "has_more": false
}Create a new connector
Connector creation request
| external_secret_id | string |
| index_interval_seconds | integer >= 0 IndexIntervalSeconds: how often the catalog re-scans this connector for new/changed data; forwarded to the neocore datasource spec. Nil/0 disables automatic re-indexing. The UI defaults to 300 (5 min). |
object (request.LocalConfig) | |
| name required | string |
object (request.OracleDefaultConfigReq) | |
object (request.OracleInstancePrincipalConfig) | |
object (request.OracleS3Config) | |
object (request.S3Config) | |
object (request.S3InstanceProfileConfig) | |
| type required | string Enum: "aws-s3" "aws-s3-instance-profile" "oracle_s3" "oracle_instance_principal" "oracle" "local" |
{- "external_secret_id": "string",
- "index_interval_seconds": 0,
- "local": {
- "paths": [
- "string"
], - "placement": {
- "mount": "string",
- "node": "string",
- "node_scope": "shared",
- "sub_path": "string"
}
}, - "name": "string",
- "oracle": {
- "bucket": "string",
- "fingerprint": "string",
- "namespace": "string",
- "passphrase": "string",
- "prefix": "string",
- "private_key": "string",
- "region": "string",
- "tenancy_ocid": "string",
- "user_ocid": "string"
}, - "oracle_instance_principal": {
- "bucket": "string",
- "namespace": "string",
- "prefix": "string",
- "region": "string"
}, - "oracle_s3": {
- "access_key_id": "string",
- "bucket": "string",
- "endpoint": "string",
- "prefix": "string",
- "region": "string",
- "secret_access_key": "string"
}, - "s3": {
- "access_key_id": "string",
- "bucket": "string",
- "prefix": "string",
- "region": "string",
- "secret_access_key": "string"
}, - "s3_instance_profile": {
- "bucket": "string",
- "prefix": "string",
- "region": "string"
}, - "type": "aws-s3"
}{- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "external_secret_id": "sec_1a2b3c4d5e6f708192a3b4c5",
- "extraction_id": "act_1a2b3c4d5e6f708192a3b4c5",
- "id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "name": "warehouse-transactions",
- "namespace": "Risk",
- "paths": [
- "/datasets/transactions"
], - "prefix": "example",
- "provider": "aws-s3",
- "region": "example",
- "volume_name": "shared-datasets",
- "volume_root": "example"
}Compare connector files by ID
Compare connector files request
required | Array of objects (request.CompareConnector) | ||||
Array
| |||||
{- "compare": [
- {
- "files": [
- "string"
], - "id": "string"
}
]
}{- "schema_groups": [
- {
- "files": [
- { }
], - "size": 1,
- "total_features": 1,
- "total_files": 1
}
]
}Delete a connector by ID
| id required | string Connector ID |
curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/connectors/{id}" \ -H "x-api-key: $API_KEY"
{- "id": "obj_1a2b3c4d5e6f708192a3b4c5"
}Retrieve a connector by ID
| id required | string Connector ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/connectors/{id}" \ -H "x-api-key: $API_KEY"
{- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "external_secret_id": "sec_1a2b3c4d5e6f708192a3b4c5",
- "extraction_id": "act_1a2b3c4d5e6f708192a3b4c5",
- "id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "name": "warehouse-transactions",
- "namespace": "Risk",
- "paths": [
- "/datasets/transactions"
], - "prefix": "example",
- "provider": "aws-s3",
- "region": "example",
- "volume_name": "shared-datasets",
- "volume_root": "example"
}List files for a connector by ID (currently supports S3 connectors)
| id required | string Connector ID |
| prefix | string File prefix filter |
| limit | integer Maximum number of files to return |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/connectors/{id}/files" \ -H "x-api-key: $API_KEY"
[- [
- {
- "dir": false,
- "files": "example",
- "modified_at": "2026-01-15T10:30:00Z",
- "path": "/datasets/transactions",
- "size": 1
}
]
]Returns the live status (latest/active runs, schema count) for a connector by proxying neocore.
| id required | string Connector ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/connectors/{id}/status" \ -H "x-api-key: $API_KEY"
{- "active_index_run": {
- "duration_ms": 1,
- "error_message": "Example message",
- "file_count": 8,
- "finished_at": "2026-01-15T10:30:00Z",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "index_hash": "example",
- "node_name": "churn-propensity-v3",
- "parquet_count": 8,
- "progress": 1,
- "schema_count": 8,
- "started_at": "2026-01-15T10:30:00Z",
- "state": "Pending",
- "total": 1,
- "total_size_bytes": 1,
- "triggered_by": "example"
}, - "active_parquet_scan": {
- "duration_ms": 1,
- "engine": "example",
- "error_message": "Example message",
- "fail_count": 8,
- "finished_at": "2026-01-15T10:30:00Z",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "index_hash_ref": "example",
- "job_name": "churn-propensity-v3",
- "progress": 1,
- "scan_hash": "example",
- "schema_count": 8,
- "started_at": "2026-01-15T10:30:00Z",
- "state": "PENDING",
- "total": 1,
- "triggered_by": "example"
}, - "index_status": "PENDING",
- "is_indexing": false,
- "is_profiling": false,
- "latest_index_run": {
- "duration_ms": 1,
- "error_message": "Example message",
- "file_count": 8,
- "finished_at": "2026-01-15T10:30:00Z",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "index_hash": "example",
- "node_name": "churn-propensity-v3",
- "parquet_count": 8,
- "progress": 1,
- "schema_count": 8,
- "started_at": "2026-01-15T10:30:00Z",
- "state": "Pending",
- "total": 1,
- "total_size_bytes": 1,
- "triggered_by": "example"
}, - "latest_parquet_scan": {
- "duration_ms": 1,
- "engine": "example",
- "error_message": "Example message",
- "fail_count": 8,
- "finished_at": "2026-01-15T10:30:00Z",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "index_hash_ref": "example",
- "job_name": "churn-propensity-v3",
- "progress": 1,
- "scan_hash": "example",
- "schema_count": 8,
- "started_at": "2026-01-15T10:30:00Z",
- "state": "PENDING",
- "total": 1,
- "triggered_by": "example"
}, - "profile_status": "PENDING",
- "schema_count": 8
}Paginated list of data enhancement workspaces in the current space
| limit | integer Default: 10 Page size |
| after | string Cursor |
| name | string Filter by name (substring) |
| status | string Filter by status |
| Space required | string Space ID (spa_*) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-enhancements" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "description": "Scores the active customer base every morning.",
- "facts_count": 8,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "last_updated": "example",
- "name": "churn-propensity-v3",
- "predictions_count": 8,
- "raw_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "status": "DRAFT",
- "transformations_count": 8
}
], - "has_more": false
}Create a new data enhancement workspace scoped to the Space header (source datasets, status, audit). Requires JWT or API key and data-enhancements:create.
| Space required | string Space ID (spa_*) |
Create request
| description | string |
| name required | string |
| raw_dataset_ids | Array of strings |
| status | string Enum: "DRAFT" "PROCESSING" "READY" "FAILED" |
{- "description": "string",
- "name": "string",
- "raw_dataset_ids": [
- "string"
], - "status": "DRAFT"
}{- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "description": "Scores the active customer base every morning.",
- "facts_count": 8,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "last_updated": "example",
- "name": "churn-propensity-v3",
- "predictions_count": 8,
- "raw_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "status": "DRAFT",
- "transformations_count": 8
}Delete a data enhancement workspace by ID in the current space
| id required | string Data enhancement ID (enh_*) |
| Space required | string Space ID (spa_*) |
curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-enhancements/{id}" \ -H "x-api-key: $API_KEY"
{- "id": "obj_1a2b3c4d5e6f708192a3b4c5"
}Get a data enhancement workspace by ID in the current space
| id required | string Data enhancement ID (enh_*) |
| Space required | string Space ID (spa_*) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-enhancements/{id}" \ -H "x-api-key: $API_KEY"
{- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "description": "Scores the active customer base every morning.",
- "facts_count": 8,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "last_updated": "example",
- "name": "churn-propensity-v3",
- "predictions_count": 8,
- "raw_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "status": "DRAFT",
- "transformations_count": 8
}Partial update of a data enhancement workspace in the current space
| id required | string Data enhancement ID (enh_*) |
| Space required | string Space ID (spa_*) |
Update body
| description | string |
| name | string |
| raw_dataset_ids | Array of strings |
| status | string Enum: "DRAFT" "PROCESSING" "READY" "FAILED" |
{- "description": "string",
- "name": "string",
- "raw_dataset_ids": [
- "string"
], - "status": "DRAFT"
}{- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "description": "Scores the active customer base every morning.",
- "facts_count": 8,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "last_updated": "example",
- "name": "churn-propensity-v3",
- "predictions_count": 8,
- "raw_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "status": "DRAFT",
- "transformations_count": 8
}Returns the data extractions in the current space. Deleted
| limit | integer Default: 10 limit |
| after | string after |
| status | string comma-separated statuses |
| include_deleted | boolean include soft-deleted extractions |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-extractions" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "deleted": false,
- "deleted_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "output_dir": "/datasets/transactions",
- "source": { },
- "status": "PENDING",
- "status_reason": "Example message",
- "updated_at": "2026-01-15T10:30:00Z"
}
], - "has_more": false
}Submit a new extraction job. Returns the extraction in PENDING status.
Data extraction creation request
| description | string |
| name required | string |
required | object (request.ExtractionSource) |
{- "description": "string",
- "name": "string",
- "source": {
- "jdbc": {
- "fetchsize": 0,
- "preset": "string",
- "table": "string",
- "url": "string"
}, - "type": "jdbc",
- "unload": {
- "copybook": "string",
- "data": "string"
}
}
}{- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "deleted": false,
- "deleted_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "output_dir": "/datasets/transactions",
- "source": {
- "type": "jdbc",
- "unload": {
- "copybook": "example",
- "data": "example"
}
}, - "status": "PENDING",
- "status_reason": "Example message",
- "updated_at": "2026-01-15T10:30:00Z"
}Soft-delete a data extraction. The underlying neocore job is
| id required | string Data extraction ID |
curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-extractions/{id}" \ -H "x-api-key: $API_KEY"
{- "error": "example"
}Retrieve a data extraction by ID.
| id required | string Data extraction ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-extractions/{id}" \ -H "x-api-key: $API_KEY"
{- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "deleted": false,
- "deleted_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "output_dir": "/datasets/transactions",
- "source": {
- "type": "jdbc",
- "unload": {
- "copybook": "example",
- "data": "example"
}
}, - "status": "PENDING",
- "status_reason": "Example message",
- "updated_at": "2026-01-15T10:30:00Z"
}Update name and/or description. Source config is immutable.
| id required | string Data extraction ID |
Update body
| description | string |
| name | string |
{- "description": "string",
- "name": "string"
}{- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "deleted": false,
- "deleted_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "output_dir": "/datasets/transactions",
- "source": {
- "type": "jdbc",
- "unload": {
- "copybook": "example",
- "data": "example"
}
}, - "status": "PENDING",
- "status_reason": "Example message",
- "updated_at": "2026-01-15T10:30:00Z"
}Retrieve a list of data models with pagination
| limit | integer Default: 10 limit |
| after | string after |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-models" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "kind": "PRETRAIN",
- "name": "churn-propensity-v3",
- "updated_at": "2026-01-15T10:30:00Z"
}
], - "has_more": false
}Create a new data model
Data model creation request
| description | string |
| kind required | string Enum: "PRETRAIN" "POST_TRAINING" |
| name required | string |
{- "description": "string",
- "kind": "PRETRAIN",
- "name": "string"
}{- "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "kind": "PRETRAIN",
- "name": "churn-propensity-v3",
- "updated_at": "2026-01-15T10:30:00Z"
}curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-models/{id}" \ -H "x-api-key: $API_KEY"
{- "id": "obj_1a2b3c4d5e6f708192a3b4c5"
}curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-models/{id}" \ -H "x-api-key: $API_KEY"
{- "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "kind": "PRETRAIN",
- "name": "churn-propensity-v3",
- "updated_at": "2026-01-15T10:30:00Z"
}Update a data model by ID
| id required | string Data model ID |
Data model update request
| description | string |
| name | string |
{- "description": "string",
- "name": "string"
}{- "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "kind": "PRETRAIN",
- "name": "churn-propensity-v3",
- "updated_at": "2026-01-15T10:30:00Z"
}| id | string comma-separated preprocess ids (dpp_...); set limit to the id count to get them all in one page |
| profile_id | string filter by parent profile |
| status | string comma-separated statuses (include ARCHIVED to pull archived rows) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-preprocesses" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "created_at": "2026-01-15T10:30:00Z",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "feature_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "max_event_ts": "example",
- "min_event_ts": "example",
- "n_cols": 1,
- "n_rows": 1,
- "name": "churn-propensity-v3",
- "number_of_nodes": 2,
- "outdated": false,
- "processed_output": "example",
- "profile_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "profile_latest_version": 1,
- "profile_lineage_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "profile_name": "transactions-profile",
- "profile_version": 1,
- "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "target_columns": [
- "event_ts",
- "customer_id"
], - "target_metric_columns": [
- "event_ts",
- "customer_id"
], - "timestamp_column": "2026-01-15T10:30:00Z",
- "updated_at": "2026-01-15T10:30:00Z"
}
], - "has_more": false
}Create a preprocess from a parent profile. Send EITHER
Preprocess creation
| excluded_columns | Array of strings |
| feature_columns required | Array of strings non-empty FeatureColumns are the primary-key columns that uniquely identify each row
— required (at least one). TimestampColumn is the row's event-time column —
required and non-empty ( |
| included_columns | Array of strings |
| lineage_id required | string LineageID is the parent profile's lineage id. The backend always builds the preprocess from the latest version of that lineage (and rejects a stale, non-latest version id). Send the lineage_id from the profile. |
| name required | string |
object Options is the optional advanced-settings block. Any field left nil falls back to the server-side default in mapper.DefaultPreprocessDatasetConfig. | |
| target_columns | Array of strings |
| timestamp_column required | string non-empty |
{- "excluded_columns": [
- "string"
], - "feature_columns": [
- "string"
], - "included_columns": [
- "string"
], - "lineage_id": "string",
- "name": "string",
- "options": {
- "invalid_ts_rows_limit": 0,
- "node_fraction": 0,
- "number_of_nodes": 0,
- "save_invalid_ts_rows": true
}, - "target_columns": [
- "string"
], - "timestamp_column": "string"
}{- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "created_at": "2026-01-15T10:30:00Z",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "feature_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "max_event_ts": "example",
- "min_event_ts": "example",
- "n_cols": 1,
- "n_rows": 1,
- "name": "churn-propensity-v3",
- "number_of_nodes": 2,
- "outdated": false,
- "processed_output": "example",
- "profile_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "profile_latest_version": 1,
- "profile_lineage_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "profile_name": "transactions-profile",
- "profile_version": 1,
- "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "target_columns": [
- "event_ts",
- "customer_id"
], - "target_metric_columns": [
- "event_ts",
- "customer_id"
], - "timestamp_column": "2026-01-15T10:30:00Z",
- "updated_at": "2026-01-15T10:30:00Z"
}Hard-delete a data preprocess. Only FAILED preprocesses can be
| id required | string Data preprocess ID |
curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-preprocesses/{id}" \ -H "x-api-key: $API_KEY"
{- "error": "example"
}curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-preprocesses/{id}" \ -H "x-api-key: $API_KEY"
{- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "created_at": "2026-01-15T10:30:00Z",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "feature_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "max_event_ts": "example",
- "min_event_ts": "example",
- "n_cols": 1,
- "n_rows": 1,
- "name": "churn-propensity-v3",
- "number_of_nodes": 2,
- "outdated": false,
- "processed_output": "example",
- "profile_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "profile_latest_version": 1,
- "profile_lineage_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "profile_name": "transactions-profile",
- "profile_version": 1,
- "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "target_columns": [
- "event_ts",
- "customer_id"
], - "target_metric_columns": [
- "event_ts",
- "customer_id"
], - "timestamp_column": "2026-01-15T10:30:00Z",
- "updated_at": "2026-01-15T10:30:00Z"
}| id required | string Data preprocess ID |
Update body
| name | string |
{- "name": "string"
}{- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "created_at": "2026-01-15T10:30:00Z",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "feature_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "max_event_ts": "example",
- "min_event_ts": "example",
- "n_cols": 1,
- "n_rows": 1,
- "name": "churn-propensity-v3",
- "number_of_nodes": 2,
- "outdated": false,
- "processed_output": "example",
- "profile_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "profile_latest_version": 1,
- "profile_lineage_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "profile_name": "transactions-profile",
- "profile_version": 1,
- "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "target_columns": [
- "event_ts",
- "customer_id"
], - "target_metric_columns": [
- "event_ts",
- "customer_id"
], - "timestamp_column": "2026-01-15T10:30:00Z",
- "updated_at": "2026-01-15T10:30:00Z"
}Mark a PROCESSED preprocess to auto-merge into a target profile version when that version is promoted drift-free.
| id required | string Data preprocess ID |
Target profile version
| target_profile_id required | string |
{- "target_profile_id": "string"
}{- "error": "example"
}curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-preprocesses/{id}/archive" \ -H "x-api-key: $API_KEY"
{- "error": "example"
}Returns the persisted column snapshot — the columns the user
| id required | string Data preprocess ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-preprocesses/{id}/columns" \ -H "x-api-key: $API_KEY"
{- "data": [
- {
- "categories": [
- "example"
], - "classes_counts": { },
- "data_quality": { },
- "distinct_count": "example",
- "distinct_count_exact": false,
- "issues": [
- "example"
], - "kind": "example",
- "max": { },
- "mean": 0.5,
- "min": { },
- "n_classes": "example",
- "name": "churn-propensity-v3",
- "nan_count": "example",
- "null_count": "example",
- "num_values": "example",
- "percentiles": { },
- "stddev": 0.5
}
]
}Clones a PROCESSED preprocess and its parent profile into
| id required | string Data preprocess ID |
Target space
| target_space required | string |
{- "target_space": "string"
}{- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "created_at": "2026-01-15T10:30:00Z",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "feature_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "max_event_ts": "example",
- "min_event_ts": "example",
- "n_cols": 1,
- "n_rows": 1,
- "name": "churn-propensity-v3",
- "number_of_nodes": 2,
- "outdated": false,
- "processed_output": "example",
- "profile_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "profile_latest_version": 1,
- "profile_lineage_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "profile_name": "transactions-profile",
- "profile_version": 1,
- "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "target_columns": [
- "event_ts",
- "customer_id"
], - "target_metric_columns": [
- "event_ts",
- "customer_id"
], - "timestamp_column": "2026-01-15T10:30:00Z",
- "updated_at": "2026-01-15T10:30:00Z"
}(Re-)run a preprocess as an incremental append-merge against a target profile version (default: latest of its lineage). Manual counterpart to auto-merge — use to recover from a failed merge or to merge on demand.
| id required | string Data preprocess ID |
Target profile version (optional)
| number_of_nodes | integer NumberOfNodes optionally overrides the multi-node scaling for this run. nil reuses the value persisted on the preprocess (the last one used); a non-nil value both drives this run and becomes the new "last used". Validated >= 1 in the handler, mirroring PreprocessOptions.Validate. |
| target_profile_id | string |
{- "number_of_nodes": 0,
- "target_profile_id": "string"
}{- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "created_at": "2026-01-15T10:30:00Z",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "feature_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "max_event_ts": "example",
- "min_event_ts": "example",
- "n_cols": 1,
- "n_rows": 1,
- "name": "churn-propensity-v3",
- "number_of_nodes": 2,
- "outdated": false,
- "processed_output": "example",
- "profile_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "profile_latest_version": 1,
- "profile_lineage_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "profile_name": "transactions-profile",
- "profile_version": 1,
- "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "target_columns": [
- "event_ts",
- "customer_id"
], - "target_metric_columns": [
- "event_ts",
- "customer_id"
], - "timestamp_column": "2026-01-15T10:30:00Z",
- "updated_at": "2026-01-15T10:30:00Z"
}Clear the auto-merge target on a preprocess.
| id required | string Data preprocess ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-preprocesses/{id}/unapprove" \ -H "x-api-key: $API_KEY"
{- "error": "example"
}Restore an archived data preprocess to its active state.
| id required | string Data preprocess ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-preprocesses/{id}/unarchive" \ -H "x-api-key: $API_KEY"
{- "error": "example"
}Returns the data profiles in the current space. Archived
| limit | integer Default: 10 limit |
| after | string after |
| status | string comma-separated statuses (include ARCHIVED to pull archived rows) |
| structure | string comma-separated structures |
| pending_drift | boolean only lineages with a DRIFT_BLOCKED version awaiting review (not reachable via status: a blocked version is never the lineage head) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "cast_columns": [
- { }
], - "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "drift_approved_at": "2026-01-15T10:30:00Z",
- "drift_detected_at": "2026-01-15T10:30:00Z",
- "drift_mergeable": false,
- "drift_metrics": { },
- "drift_reason_code": "Example message",
- "drift_rejected_at": "2026-01-15T10:30:00Z",
- "favorite": false,
- "files": [
- { }
], - "folder_id": "fld_1a2b3c4d5e6f708192a3b4c5",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "is_latest": false,
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "materializations_count": 8,
- "name": "churn-propensity-v3",
- "quality_summary": { },
- "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "updated_at": "2026-01-15T10:30:00Z",
- "version": 1
}
], - "has_more": false
}Submit a new profiling job. Returns the profile in PENDING status.
Data profile creation request
| description | string |
object Metrics optionally overrides the scan's drift policy (injected as the
top-level | |
required | Array of objects (request.DataProfileFile) non-empty |
| name required | string |
object Options is the optional advanced-settings block. Any field left nil falls back to the server-side default in mapper.DefaultProfileScanBaseConfig. | |
| structure required | string (model.DataProfileStructure) Enum: "EVENT_BASED" "FEATURE_BASED" "FILTER_BASED" |
{- "description": "string",
- "drift_metrics": {
- "categorical_psi": {
- "bands": {
- "critical": 0,
- "minor": 0,
- "moderate": 0,
- "significant": 0
}, - "block": true,
- "block_at": "string",
- "compute": true
}, - "null_ratio_jump": {
- "block": true,
- "block_above": 0,
- "compute": true
}, - "numeric_psi": {
- "bands": {
- "critical": 0,
- "minor": 0,
- "moderate": 0,
- "significant": 0
}, - "block": true,
- "block_at": "string",
- "compute": true
}
}, - "files": [
- {
- "id": "string",
- "paths": [
- "string"
]
}
], - "name": "string",
- "options": {
- "categorical_threshold": 0,
- "node_fraction": 0,
- "number_of_nodes": 0,
- "sample_fraction": 0,
- "sample_max_rows": 0,
- "sentinel_threshold": 0,
- "textual_threshold": 0
}, - "structure": "EVENT_BASED"
}{- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "cast_columns": [
- {
- "column": "event_ts",
- "target_type": "numeric"
}
], - "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "drift_approved_at": "2026-01-15T10:30:00Z",
- "drift_detected_at": "2026-01-15T10:30:00Z",
- "drift_mergeable": false,
- "drift_metrics": {
- "categorical_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}, - "null_ratio_jump": {
- "block": false,
- "block_above": 0.5,
- "compute": true
}, - "numeric_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}
}, - "drift_reason_code": "Example message",
- "drift_rejected_at": "2026-01-15T10:30:00Z",
- "favorite": false,
- "files": [
- {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "paths": [
- "/datasets/transactions"
]
}
], - "folder_id": "fld_1a2b3c4d5e6f708192a3b4c5",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "is_latest": false,
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "materializations_count": 8,
- "name": "churn-propensity-v3",
- "quality_summary": {
- "cols_with_nulls": 1,
- "computed_at": "2026-01-15T10:30:00Z",
- "constant_cols": 1,
- "empty_cols": 1,
- "kind_counts": { },
- "ncols": 1,
- "overall_null_pct": 0.5,
- "rows_count": 8,
- "sample_rows_count": 8,
- "total_categorical_classes": 1,
- "total_nulls": 1,
- "total_zeros": 1,
- "zero_rate": 0.5
}, - "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "updated_at": "2026-01-15T10:30:00Z",
- "version": 1
}Hard-delete a data profile. Only FAILED profiles can be deleted —
| id required | string Data profile ID |
curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}" \ -H "x-api-key: $API_KEY"
{- "error": "example"
}Retrieve a data profile by ID.
| id required | string Data profile ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}" \ -H "x-api-key: $API_KEY"
{- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "cast_columns": [
- {
- "column": "event_ts",
- "target_type": "numeric"
}
], - "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "drift_approved_at": "2026-01-15T10:30:00Z",
- "drift_detected_at": "2026-01-15T10:30:00Z",
- "drift_mergeable": false,
- "drift_metrics": {
- "categorical_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}, - "null_ratio_jump": {
- "block": false,
- "block_above": 0.5,
- "compute": true
}, - "numeric_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}
}, - "drift_reason_code": "Example message",
- "drift_rejected_at": "2026-01-15T10:30:00Z",
- "favorite": false,
- "files": [
- {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "paths": [
- "/datasets/transactions"
]
}
], - "folder_id": "fld_1a2b3c4d5e6f708192a3b4c5",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "is_latest": false,
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "materializations_count": 8,
- "name": "churn-propensity-v3",
- "quality_summary": {
- "cols_with_nulls": 1,
- "computed_at": "2026-01-15T10:30:00Z",
- "constant_cols": 1,
- "empty_cols": 1,
- "kind_counts": { },
- "ncols": 1,
- "overall_null_pct": 0.5,
- "rows_count": 8,
- "sample_rows_count": 8,
- "total_categorical_classes": 1,
- "total_nulls": 1,
- "total_zeros": 1,
- "zero_rate": 0.5
}, - "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "updated_at": "2026-01-15T10:30:00Z",
- "version": 1
}Update name and/or description. Files and structure are immutable.
| id required | string Data profile ID |
Update body
| description | string |
| name | string |
| structure | string (model.DataProfileStructure) Enum: "EVENT_BASED" "FEATURE_BASED" "FILTER_BASED" |
{- "description": "string",
- "name": "string",
- "structure": "EVENT_BASED"
}{- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "cast_columns": [
- {
- "column": "event_ts",
- "target_type": "numeric"
}
], - "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "drift_approved_at": "2026-01-15T10:30:00Z",
- "drift_detected_at": "2026-01-15T10:30:00Z",
- "drift_mergeable": false,
- "drift_metrics": {
- "categorical_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}, - "null_ratio_jump": {
- "block": false,
- "block_above": 0.5,
- "compute": true
}, - "numeric_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}
}, - "drift_reason_code": "Example message",
- "drift_rejected_at": "2026-01-15T10:30:00Z",
- "favorite": false,
- "files": [
- {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "paths": [
- "/datasets/transactions"
]
}
], - "folder_id": "fld_1a2b3c4d5e6f708192a3b4c5",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "is_latest": false,
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "materializations_count": 8,
- "name": "churn-propensity-v3",
- "quality_summary": {
- "cols_with_nulls": 1,
- "computed_at": "2026-01-15T10:30:00Z",
- "constant_cols": 1,
- "empty_cols": 1,
- "kind_counts": { },
- "ncols": 1,
- "overall_null_pct": 0.5,
- "rows_count": 8,
- "sample_rows_count": 8,
- "total_categorical_classes": 1,
- "total_nulls": 1,
- "total_zeros": 1,
- "zero_rate": 0.5
}, - "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "updated_at": "2026-01-15T10:30:00Z",
- "version": 1
}Accept the drift detected on a DRIFT_BLOCKED version. Submits the engine merge_info action to consume the staged batch and bump the version; the version returns to PENDING while the merge runs, and is promoted (drift-free) by the webhook on completion.
| id required | string Drift-blocked profile version ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/approve-drift" \ -H "x-api-key: $API_KEY"
{- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "cast_columns": [
- {
- "column": "event_ts",
- "target_type": "numeric"
}
], - "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "drift_approved_at": "2026-01-15T10:30:00Z",
- "drift_detected_at": "2026-01-15T10:30:00Z",
- "drift_mergeable": false,
- "drift_metrics": {
- "categorical_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}, - "null_ratio_jump": {
- "block": false,
- "block_above": 0.5,
- "compute": true
}, - "numeric_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}
}, - "drift_reason_code": "Example message",
- "drift_rejected_at": "2026-01-15T10:30:00Z",
- "favorite": false,
- "files": [
- {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "paths": [
- "/datasets/transactions"
]
}
], - "folder_id": "fld_1a2b3c4d5e6f708192a3b4c5",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "is_latest": false,
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "materializations_count": 8,
- "name": "churn-propensity-v3",
- "quality_summary": {
- "cols_with_nulls": 1,
- "computed_at": "2026-01-15T10:30:00Z",
- "constant_cols": 1,
- "empty_cols": 1,
- "kind_counts": { },
- "ncols": 1,
- "overall_null_pct": 0.5,
- "rows_count": 8,
- "sample_rows_count": 8,
- "total_categorical_classes": 1,
- "total_nulls": 1,
- "total_zeros": 1,
- "zero_rate": 0.5
}, - "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "updated_at": "2026-01-15T10:30:00Z",
- "version": 1
}Soft-archive a data profile. Profiles are never hard-deleted —
| id required | string Data profile ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/archive" \ -H "x-api-key: $API_KEY"
{- "error": "example"
}Recast one or more columns of a profile lineage to a new type, producing a new incremental version. Source-type/transition validation is delegated to the engine; an illegal cast surfaces as a FAILED version.
| id required | string Data profile lineage ID |
Columns to recast
Array of objects (request.ApprovePreprocessTarget) ApprovePreprocesses optionally pre-approves already-PROCESSED datasets (built from this profile) to auto-merge into the new cast version once it is promoted — same mechanism as AppendDataProfileVersion, each carrying its own node count. Non-PROCESSED ids are ignored by the repository's status guard. | |
required | Array of objects (request.CastColumnSpec) non-empty |
object Options tunes the cast (re-scan) job — same knobs as AppendVersion, e.g. number_of_nodes to scale the recast across a multi-node Spark cluster. nil falls back to the server-side defaults. |
{- "approve_preprocesses": [
- {
- "id": "string",
- "number_of_nodes": 0
}
], - "columns": [
- {
- "column": "string",
- "target_type": "numeric"
}
], - "options": {
- "categorical_threshold": 0,
- "node_fraction": 0,
- "number_of_nodes": 0,
- "sample_fraction": 0,
- "sample_max_rows": 0,
- "sentinel_threshold": 0,
- "textual_threshold": 0
}
}{- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "cast_columns": [
- {
- "column": "event_ts",
- "target_type": "numeric"
}
], - "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "drift_approved_at": "2026-01-15T10:30:00Z",
- "drift_detected_at": "2026-01-15T10:30:00Z",
- "drift_mergeable": false,
- "drift_metrics": {
- "categorical_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}, - "null_ratio_jump": {
- "block": false,
- "block_above": 0.5,
- "compute": true
}, - "numeric_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}
}, - "drift_reason_code": "Example message",
- "drift_rejected_at": "2026-01-15T10:30:00Z",
- "favorite": false,
- "files": [
- {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "paths": [
- "/datasets/transactions"
]
}
], - "folder_id": "fld_1a2b3c4d5e6f708192a3b4c5",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "is_latest": false,
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "materializations_count": 8,
- "name": "churn-propensity-v3",
- "quality_summary": {
- "cols_with_nulls": 1,
- "computed_at": "2026-01-15T10:30:00Z",
- "constant_cols": 1,
- "empty_cols": 1,
- "kind_counts": { },
- "ncols": 1,
- "overall_null_pct": 0.5,
- "rows_count": 8,
- "sample_rows_count": 8,
- "total_categorical_classes": 1,
- "total_nulls": 1,
- "total_zeros": 1,
- "zero_rate": 0.5
}, - "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "updated_at": "2026-01-15T10:30:00Z",
- "version": 1
}One page of a single column's value distribution (value, count,
| id required | string Data profile lineage ID |
| column required | string Column name (URL-encoded) |
| version | integer Profile version (default: latest) |
| search | string Case-insensitive substring filter on the value |
| limit | integer Page size (default 100, max 1000) |
| offset | integer Page offset |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/columns?column=COLUMN" \ -H "x-api-key: $API_KEY"
{- "data": {
- "categories": [
- "example"
], - "classes_counts": { },
- "data_quality": { },
- "distinct_count": "example",
- "distinct_count_exact": false,
- "issues": [
- "example"
], - "kind": "example",
- "max": { },
- "mean": 0.5,
- "min": { },
- "n_classes": "example",
- "name": "churn-propensity-v3",
- "nan_count": "example",
- "null_count": "example",
- "num_values": "example",
- "percentiles": { },
- "stddev": 0.5
}, - "has_more": false,
- "rows_count": 8,
- "total": 1,
- "values": [
- {
- "count": "example",
- "probability": 0.5,
- "value": "example"
}
]
}Full drift_result.json a drift-blocking scan produced for a DRIFT_BLOCKED (or DRIFT_REJECTED) version — verdict, per-column findings with inline detail, and the metric roll-up. Lets the frontend review the drift before approving or rejecting. Read live from neocore.
| id required | string Drift-blocked version ID |
| batch_id | string Staged batch id (defaults to the version's) |
| search | string Substring filter on a finding's column |
| regex | string Regex filter on a finding's column (takes precedence over search) |
| varType | Array of strings Filter findings by column kind (numeric/categorical) |
| limit | integer Page size (default 20) |
| offset | integer Page offset |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/drift" \ -H "x-api-key: $API_KEY"
{- "findings": [
- { }
], - "has_more": false,
- "metrics": [
- { }
], - "run": {
- "batch_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "incoming": {
- "n_rows": 1,
- "paths": [
- "/datasets/transactions"
]
}, - "reference": {
- "bin_edges_info_version": 1,
- "dir": "/datasets/transactions",
- "reference_info_version": 1
}, - "run_id": "bif_1a2b3c4d5e6f708192a3b4c5"
}, - "total": 1,
- "verdict": {
- "block_reason": "Example message",
- "n_findings": 1,
- "recommended_action": "example",
- "score": 0.5,
- "score_threshold": 0.5,
- "severity": "example",
- "status": "PENDING",
- "summary": "example"
}
}Per-version dataset-quality summary trend (ascending by version) for a lineage, cursor-paginated. Pass the last row's id as after for the next page.
| id required | string Data profile lineage ID |
| limit | integer Page size (default 20, max 100) |
| after | string Cursor: id of the previous page's last version (exclusive) |
| order | string Sort direction: 'asc' or 'desc' (default 'asc') |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/quality-history" \ -H "x-api-key: $API_KEY"
{- "data": [
- {
- "created_at": "2026-01-15T10:30:00Z",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "summary": { },
- "version": 1
}
], - "has_more": false
}Reject the drift detected on a DRIFT_BLOCKED version. The staged batch is abandoned (never merged), the lineage head is untouched, and the version is marked DRIFT_REJECTED with the supplied reason. Being terminal, it frees the lineage for a new append (after the source is fixed).
| id required | string Drift-blocked profile version ID |
Rejection reason
| reason required | string |
{- "reason": "string"
}{- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "cast_columns": [
- {
- "column": "event_ts",
- "target_type": "numeric"
}
], - "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "drift_approved_at": "2026-01-15T10:30:00Z",
- "drift_detected_at": "2026-01-15T10:30:00Z",
- "drift_mergeable": false,
- "drift_metrics": {
- "categorical_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}, - "null_ratio_jump": {
- "block": false,
- "block_above": 0.5,
- "compute": true
}, - "numeric_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}
}, - "drift_reason_code": "Example message",
- "drift_rejected_at": "2026-01-15T10:30:00Z",
- "favorite": false,
- "files": [
- {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "paths": [
- "/datasets/transactions"
]
}
], - "folder_id": "fld_1a2b3c4d5e6f708192a3b4c5",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "is_latest": false,
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "materializations_count": 8,
- "name": "churn-propensity-v3",
- "quality_summary": {
- "cols_with_nulls": 1,
- "computed_at": "2026-01-15T10:30:00Z",
- "constant_cols": 1,
- "empty_cols": 1,
- "kind_counts": { },
- "ncols": 1,
- "overall_null_pct": 0.5,
- "rows_count": 8,
- "sample_rows_count": 8,
- "total_categorical_classes": 1,
- "total_nulls": 1,
- "total_zeros": 1,
- "zero_rate": 0.5
}, - "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "updated_at": "2026-01-15T10:30:00Z",
- "version": 1
}Live column statistics from neocore. Used for the
| id required | string Data profile lineage ID |
| version | integer Profile version (default: latest) |
| search | string Substring filter |
| regex | string Regex filter (takes precedence over search) |
| limit | integer Page size |
| offset | integer Page offset |
| sort | string Default: "name" Enum: "name" "null_count" Ranking key applied before pagination |
| order | string Default: "asc" Enum: "asc" "desc" Ranking direction |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/stats" \ -H "x-api-key: $API_KEY"
{- "after": "1a2b3c4d5e6f708192a3b4c5",
- "data": [
- {
- "categories": [
- "example"
], - "classes_counts": { },
- "data_quality": { },
- "distinct_count": "example",
- "distinct_count_exact": false,
- "issues": [
- "example"
], - "kind": "example",
- "max": { },
- "mean": 0.5,
- "min": { },
- "n_classes": "example",
- "name": "churn-propensity-v3",
- "nan_count": "example",
- "null_count": "example",
- "num_values": "example",
- "percentiles": { },
- "stddev": 0.5
}
], - "has_more": false,
- "rows_count": 8,
- "sampled_rows_count": 8,
- "total": 1
}The drill-down cell: the period's screen stats, histogram/class counts and drift row (entry, verbatim from the engine) plus the rulers they were measured over (hist for numeric, classes for categorical). Cells exist at the lineage's NATIVE granularity only — period must be a native-axis label; no period format is enforced, a period that was never measured is simply a 404.
| id required | string Data profile lineage ID |
| column required | string Column name |
| period required | string Period (e.g. 1991-01-07) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/temporal-quality/cell?column=COLUMN&period=PERIOD" \ -H "x-api-key: $API_KEY"
{- "classes": { },
- "column": "event_ts",
- "entry": { },
- "granularity": "example",
- "hist": { },
- "kind": "example",
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "period": "example",
- "run_id": "bif_1a2b3c4d5e6f708192a3b4c5",
- "state_version": 1
}The full series document for one column: all six metric arrays (psi/jsd/tvd and their _prev twins) parallel to the column's periods axis, plus verdict and flags. granularity selects which axis (default: finest available); start/end window it. The column is a query parameter because column names are free-form (a name may contain "/").
| id required | string Data profile lineage ID |
| column required | string Column name |
| granularity | string day|week|month (default: finest available) |
| start | string Window start period (inclusive) |
| end | string Window end period (inclusive) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/temporal-quality/column?column=COLUMN" \ -H "x-api-key: $API_KEY"
{- "approximate": false,
- "approximate_reason": "Example message",
- "column": "event_ts",
- "flagged_by": {
- "moment": [
- "example"
], - "psi": [
- "example"
]
}, - "flagged_periods": [
- "example"
], - "granularity": "example",
- "jsd": [
- 0.5
], - "jsd_prev": [
- 0.5
], - "kind": "example",
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "periods": [
- "example"
], - "psi": [
- 0.5
], - "psi_prev": [
- 0.5
], - "run_id": "bif_1a2b3c4d5e6f708192a3b4c5",
- "state_version": 1,
- "tvd": [
- 0.5
], - "tvd_prev": [
- 0.5
], - "verdict": "example"
}The column detail panel's feed: per-bucket volume/count/null arrays at the selected granularity plus the window's summary cards, with the class composition (categorical) or histogram (numeric) per bucket. Coarse buckets are exact read-time aggregations of the native per-period stats; drift metrics stay on /column and /heatmap (real per-granularity scores from the engine, never aggregated). start/end are inclusive bucket labels at the selected granularity.
| id required | string Data profile lineage ID |
| column required | string Column name |
| granularity | string day|week|month (default: finest available) |
| start | string Window start bucket (inclusive, YYYY-MM-DD) |
| end | string Window end bucket (inclusive, YYYY-MM-DD) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/temporal-quality/column-profile?column=COLUMN" \ -H "x-api-key: $API_KEY"
{- "classes_series": {
- "counts": { },
- "top_classes": [
- "example"
]
}, - "column": "event_ts",
- "count": [
- 8
], - "granularity": "example",
- "hist": {
- "bins": [
- [
- 1
]
], - "edges": [
- 0.5
]
}, - "kind": "example",
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "null_count": [
- 8
], - "periods": [
- "example"
], - "run_id": "bif_1a2b3c4d5e6f708192a3b4c5",
- "state_version": 1,
- "totals": {
- "distinct": 1,
- "entropy": 0.5,
- "max": 0.5,
- "mean": 0.5,
- "min": 0.5,
- "n_classes": 1,
- "null_count": 8,
- "null_rate": 0.5,
- "rows": 1,
- "stddev": 0.5,
- "zero_count": 8,
- "zero_rate": 0.5
}, - "volume": [
- 1
]
}The lineage's periods axis, volume and header plus each column's PSI series and flagged periods — the heatmap feed. granularity selects which axis (available_granularities lists the lineage's options; default = finest available). start/end (inclusive period strings) window the axis and every parallel array; n_periods/n_columns keep echoing the full-axis header. 404 until the first completed run pushes its view.
| id required | string Data profile lineage ID |
| granularity | string day|week|month (default: finest available) |
| start | string Window start period (inclusive, e.g. 1991-01-07) |
| end | string Window end period (inclusive) |
| columns_limit | integer Column page size, worst drift first (default 50, max 500; 0 = the axis only) |
| columns_offset | integer Column page offset |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/temporal-quality/heatmap" \ -H "x-api-key: $API_KEY"
{- "available_granularities": [
- "example"
], - "columns": [
- {
- "approximate": false,
- "approximate_reason": "Example message",
- "column": "event_ts",
- "kind": "example",
- "psi": [
- 0.5
], - "psi_prev": [
- 0.5
], - "state_version": 1,
- "verdict": "example"
}
], - "columns_has_more": false,
- "drift": { },
- "event_ts_col": "example",
- "granularity": "example",
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "n_columns": 1,
- "n_periods": 1,
- "periods": [
- "example"
], - "run_id": "bif_1a2b3c4d5e6f708192a3b4c5",
- "sampling": { },
- "scan_mode": "example",
- "state_version": 1,
- "volume": [
- 1
]
}The lineage's run history, newest first, cursor-paginated.
| id required | string Data profile lineage ID |
| after | string Cursor: id of the previous page's last run |
| limit | integer Page size (default 20, max 100) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/temporal-quality/runs" \ -H "x-api-key: $API_KEY"
{- "data": [
- {
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "data_profile_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "end_date": "example",
- "event_ts_col": "example",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "rebuild": false,
- "sample_max_rows": 4,
- "scan_mode": "example",
- "start_date": "2026-01-01T00:00:00Z",
- "status": "PENDING",
- "status_reason": "Example message",
- "update_ref_period": { },
- "updated_at": "2026-01-15T10:30:00Z"
}
], - "has_more": false
}Submit a temporal quality job over the lineage head's files. The body is optional: an empty body folds whatever data is new into the accumulated state with the lineage's locked config. event_ts_col (+ scan_mode) is required when cold-starting (first run or rebuild); start_date/end_date bound the event-time window this run analyzes; update_ref_period sent alone re-scores drift from the saved state against a new reference (no data read), and sent with a cold start it seeds the fresh state's reference. Unknown body keys are rejected with a 400.
| id required | string Data profile lineage ID |
Run options: cold-start config (event_ts_col, scan_mode, sample_max_rows, rebuild), this run's event-time window (start_date, end_date) and/or the drift reference (update_ref_period)
| end_date | string |
| event_ts_col | string EventTSColumn names the event-time axis. Required on the FIRST run of a lineage only — a rule that needs the lineage's history, so the service (not a binding tag) enforces it; later runs reuse the stored column. |
| rebuild | boolean Rebuild discards the accumulated state and cold-starts the lineage with THIS request's EventTSColumn/ScanMode — the only way to change them. The engine drops the persisted drift reference with the state: send UpdateRefPeriod on the rebuild to keep a moved reference. |
| sample_max_rows | integer SampleMaxRows is the approximate row count a sample run reads (the engine derives the sampling fraction from it). Required — and only allowed — when ScanMode is "sample". Locked together with ScanMode. |
| scan_mode | string ScanMode is "full" or "sample". Like EventTSColumn it is lineage-locked engine-side: decided on the first run (empty = "full"), reused on later runs, changeable only via Rebuild. |
| start_date | string StartDate/EndDate bound the event-time window THIS run analyzes ("YYYY-MM-DD", inclusive at both ends; either side may be absent = unbounded). Unlike the fields above they are per-run intent: never lineage-locked, never inherited from a previous run — an empty side means unbounded, not "reuse the last run's window". The engine's batch ledger rejects a window overlapping data already folded from the same files. |
object UpdateRefPeriod moves the drift reference: the engine scores every period outside this range against the periods inside it, republishes every document, and persists the range in its state so later data runs keep scoring against it (until the next move). Two shapes:
|
{- "end_date": "string",
- "event_ts_col": "string",
- "rebuild": true,
- "sample_max_rows": 0,
- "scan_mode": "string",
- "start_date": "string",
- "update_ref_period": {
- "end": "string",
- "start": "string"
}
}{- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "data_profile_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "end_date": "example",
- "event_ts_col": "example",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "rebuild": false,
- "sample_max_rows": 4,
- "scan_mode": "example",
- "start_date": "2026-01-01T00:00:00Z",
- "status": "PENDING",
- "status_reason": "Example message",
- "update_ref_period": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "updated_at": "2026-01-15T10:30:00Z"
}| id required | string Data profile lineage ID |
| runId required | string Temporal quality run ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/temporal-quality/runs/{runId}" \ -H "x-api-key: $API_KEY"
{- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "data_profile_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "end_date": "example",
- "event_ts_col": "example",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "rebuild": false,
- "sample_max_rows": 4,
- "scan_mode": "example",
- "start_date": "2026-01-01T00:00:00Z",
- "status": "PENDING",
- "status_reason": "Example message",
- "update_ref_period": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "updated_at": "2026-01-15T10:30:00Z"
}Restore an archived data profile to its active state.
| id required | string Data profile ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/unarchive" \ -H "x-api-key: $API_KEY"
{- "error": "example"
}Page of a logical profile's versions in chronological order (newest first by creation time), addressed by lineage ID (the lineage_id from any profile response). Includes non-READY attempts (FAILED / DRIFT_REJECTED / etc.) interleaved in time order. Cursor pagination by id: pass the last row's id as after.
| id required | string Data profile lineage ID |
| limit | integer Page size (default 20, max 100) |
| after | string Cursor: id of the previous page's last version (exclusive) |
| order | string Sort direction: 'asc' or 'desc' (default 'desc') |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/versions" \ -H "x-api-key: $API_KEY"
{- "data": [
- {
- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "cast_columns": [
- { }
], - "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "drift_approved_at": "2026-01-15T10:30:00Z",
- "drift_detected_at": "2026-01-15T10:30:00Z",
- "drift_mergeable": false,
- "drift_metrics": { },
- "drift_reason_code": "Example message",
- "drift_rejected_at": "2026-01-15T10:30:00Z",
- "favorite": false,
- "files": [
- { }
], - "folder_id": "fld_1a2b3c4d5e6f708192a3b4c5",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "is_latest": false,
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "materializations_count": 8,
- "name": "churn-propensity-v3",
- "quality_summary": { },
- "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "updated_at": "2026-01-15T10:30:00Z",
- "version": 1
}
], - "has_more": false
}Append new connector paths to an existing profile lineage, producing a new incremental version. Optionally pre-approve PROCESSED preprocesses to auto-merge into it.
| id required | string Data profile lineage ID |
New paths (+ optional approvals)
Array of objects (request.ApprovePreprocessTarget) | |
object (request.ProfileOptions) |
{- "approve_preprocesses": [
- {
- "id": "string",
- "number_of_nodes": 0
}
], - "options": {
- "categorical_threshold": 0,
- "node_fraction": 0,
- "number_of_nodes": 0,
- "sample_fraction": 0,
- "sample_max_rows": 0,
- "sentinel_threshold": 0,
- "textual_threshold": 0
}
}{- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "cast_columns": [
- {
- "column": "event_ts",
- "target_type": "numeric"
}
], - "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "drift_approved_at": "2026-01-15T10:30:00Z",
- "drift_detected_at": "2026-01-15T10:30:00Z",
- "drift_mergeable": false,
- "drift_metrics": {
- "categorical_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}, - "null_ratio_jump": {
- "block": false,
- "block_above": 0.5,
- "compute": true
}, - "numeric_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}
}, - "drift_reason_code": "Example message",
- "drift_rejected_at": "2026-01-15T10:30:00Z",
- "favorite": false,
- "files": [
- {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "paths": [
- "/datasets/transactions"
]
}
], - "folder_id": "fld_1a2b3c4d5e6f708192a3b4c5",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "is_latest": false,
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "materializations_count": 8,
- "name": "churn-propensity-v3",
- "quality_summary": {
- "cols_with_nulls": 1,
- "computed_at": "2026-01-15T10:30:00Z",
- "constant_cols": 1,
- "empty_cols": 1,
- "kind_counts": { },
- "ncols": 1,
- "overall_null_pct": 0.5,
- "rows_count": 8,
- "sample_rows_count": 8,
- "total_categorical_classes": 1,
- "total_nulls": 1,
- "total_zeros": 1,
- "zero_rate": 0.5
}, - "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "updated_at": "2026-01-15T10:30:00Z",
- "version": 1
}A single version of a logical profile, addressed by lineage ID + version number.
| id required | string Data profile lineage ID |
| version required | integer Version number |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/data-profiles/{id}/versions/{version}" \ -H "x-api-key: $API_KEY"
{- "archived": false,
- "archived_at": "2026-01-15T10:30:00Z",
- "cast_columns": [
- {
- "column": "event_ts",
- "target_type": "numeric"
}
], - "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "drift_approved_at": "2026-01-15T10:30:00Z",
- "drift_detected_at": "2026-01-15T10:30:00Z",
- "drift_mergeable": false,
- "drift_metrics": {
- "categorical_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}, - "null_ratio_jump": {
- "block": false,
- "block_above": 0.5,
- "compute": true
}, - "numeric_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}
}, - "drift_reason_code": "Example message",
- "drift_rejected_at": "2026-01-15T10:30:00Z",
- "favorite": false,
- "files": [
- {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "paths": [
- "/datasets/transactions"
]
}
], - "folder_id": "fld_1a2b3c4d5e6f708192a3b4c5",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "is_latest": false,
- "lineage_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "materializations_count": 8,
- "name": "churn-propensity-v3",
- "quality_summary": {
- "cols_with_nulls": 1,
- "computed_at": "2026-01-15T10:30:00Z",
- "constant_cols": 1,
- "empty_cols": 1,
- "kind_counts": { },
- "ncols": 1,
- "overall_null_pct": 0.5,
- "rows_count": 8,
- "sample_rows_count": 8,
- "total_categorical_classes": 1,
- "total_nulls": 1,
- "total_zeros": 1,
- "zero_rate": 0.5
}, - "status": "PENDING",
- "status_reason": "Example message",
- "structure": "EVENT_BASED",
- "updated_at": "2026-01-15T10:30:00Z",
- "version": 1
}The catalog an operator picks sources from: key, hive partition prefix, whether a preprocessed form exists, and the tolerated staleness. Served from the API rather than duplicated in the front-end so the screen and the pipeline have one place to agree.
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/dna-bases" \ -H "x-api-key: $API_KEY"
{- "items": [
- {
- "group": "transacional",
- "key": "REDACTED",
- "max_lag_days": 4,
- "note": "example",
- "partition_prefix": "example",
- "preprocessable": false,
- "required": false,
- "title": "example"
}
]
}Runs newest first, with the status refreshed from the cluster for the ones still in flight. Progress figures come from the last detail read — the listing costs one cluster call regardless of how many runs are on the page.
| space_id | string Narrow to one space |
| status | string Comma-separated statuses |
| limit | integer Maximum rows |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/dna-runs" \ -H "x-api-key: $API_KEY"
{- "items": [
- {
- "chunk_size": 1,
- "cluster": "example",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "data_ref": "example",
- "deadline": "example",
- "endpoint_id": "mep_1a2b3c4d5e6f708192a3b4c5",
- "finished_at": "2026-01-15T10:30:00Z",
- "history_months": 1,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "jobs": [
- { }
], - "name": "churn-propensity-v3",
- "output_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "output_path": "/datasets/transactions",
- "output_region": "example",
- "output_secret_id": "sec_1a2b3c4d5e6f708192a3b4c5",
- "output_version": "1.0.0",
- "progress": { },
- "queue": { },
- "queue_in": { },
- "served_model_name": "churn-propensity",
- "shard_details": [
- { }
], - "shards": 1,
- "sources": [
- { }
], - "space": "example",
- "stages": [
- { }
], - "started_at": "2026-01-15T10:30:00Z",
- "status": "Pending",
- "status_reason": "Example message",
- "streaming": false,
- "work_root": "example"
}
]
}Submits the three roles of the chain (input, N inference shards, analysis) as separate neocore jobs. The sources are re-resolved server-side before anything is submitted, so a pre-flight that has gone stale is refused rather than run.
Run configuration
| chunk_size required | integer >= 1 |
| data_ref | string VAZIA = derivada da |
| deadline | string Deadline is advisory — it is recorded so the shard count has a stated reason. Format YYYY-MM-DD. Meaningless on a streaming run (there is no end to be late for), so it is refused together with it. |
| endpoint_id | string O servidor de modelo vem por UMA das duas formas, nunca pelas duas --
EndpointID: a plataforma resolve endereço e nome do modelo, e é a única
forma em que "rodar de novo" re-resolve o endereço quando a frota muda de
lugar. Por isso nenhum dos dois é |
| endpoint_url | string EndpointURL aponta um vLLM que não é endpoint desta plataforma. Aceita
CSV, como o |
| history_months required | integer [ 1 .. 120 ] |
| name required | string <= 63 characters Sem |
| output_connector_id | string OutputConnectorID names an S3 (or instance-profile) data integration to write the result to, DIRECTLY — no staging copy. It may be the same integration as the queue's or a different one. |
| output_path | string OutputPath is where the analysis role writes the consolidated parquet. Empty keeps it under the run's own work root. With OutputConnectorID it is the prefix inside that connector's bucket. |
| output_version required | string <= 63 characters |
required | object (request.DNAQueueInput) |
| served_model_name | string ServedModelName é obrigatório JUNTO de EndpointURL: |
| shards required | integer [ 1 .. 64 ] |
required | Array of objects (request.DNASourceInput) non-empty |
| streaming | boolean Streaming makes the run ETERNAL: the input role keeps watching the queue instead of doing a single pass, and the inference shards stop exiting when they drain the shelf. It is a CHOICE, not a default — a run that cannot end has no percent, no ETA and no deadline, so the screen shows a different set of numbers (rate and shelf depth) and the only way out is canceling it. |
{- "chunk_size": 1,
- "data_ref": "string",
- "deadline": "string",
- "endpoint_id": "string",
- "endpoint_url": "string",
- "history_months": 1,
- "name": "string",
- "output_connector_id": "string",
- "output_path": "string",
- "output_version": "string",
- "queue": {
- "connector_id": "string",
- "kind": "preprocessed",
- "path": "string",
- "ref": "string"
}, - "served_model_name": "string",
- "shards": 1,
- "sources": [
- {
- "base": "string",
- "connector_id": "string",
- "kind": "preprocessed",
- "path": "string",
- "ref": "string"
}
], - "streaming": true
}{- "chunk_size": 1,
- "cluster": "example",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "data_ref": "example",
- "deadline": "example",
- "endpoint_id": "mep_1a2b3c4d5e6f708192a3b4c5",
- "finished_at": "2026-01-15T10:30:00Z",
- "history_months": 1,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "jobs": [
- {
- "name": "churn-propensity-v3",
- "role": "example",
- "shard": 1
}
], - "name": "churn-propensity-v3",
- "output_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "output_path": "/datasets/transactions",
- "output_region": "example",
- "output_secret_id": "sec_1a2b3c4d5e6f708192a3b4c5",
- "output_version": "1.0.0",
- "progress": {
- "chunk_inference_avg_seconds": 0.5,
- "chunks_failed": 1,
- "chunks_inferred": 1,
- "chunks_ready": 1,
- "chunks_total": 1,
- "clients_in_flight": 1,
- "clients_ok": 1,
- "clients_per_second": 0.5,
- "clients_total": 1,
- "concurrency": 0.5,
- "data_ref": "example",
- "empty": 1,
- "errors": 1,
- "eta_seconds": 1,
- "input": {
- "alerts": 1,
- "chunk_avg_seconds": 0.5,
- "chunks_with_problems": 1,
- "coverage": { },
- "last_chunk_seconds": 0.5,
- "pool_idle_fraction": 0.5,
- "stage_seconds": { }
}, - "input_tokens_avg": 0.5,
- "latency": {
- "avg_seconds": 0.5,
- "max_seconds": 0.5,
- "p50_seconds": 0.5,
- "p95_seconds": 0.5
}, - "message": "Example message",
- "moments_per_client": 0.5,
- "percent": 0.5,
- "phase": "syncing",
- "processes": 1,
- "quality": {
- "horizon": { },
- "intensity": { },
- "second_layer_per_client": 0.5
}, - "retries": {
- "empty_output": 1,
- "failovers": 1,
- "http": 1,
- "missing_members": 1
}, - "reused": 1,
- "sent_to_s3": 1,
- "shelf": 1,
- "tokens": {
- "cached_total": 1,
- "input_per_second": 0.5,
- "input_total": 1,
- "output_avg": 0.5,
- "output_per_second": 0.5,
- "output_total": 1,
- "reasoning_total": 1
}, - "truncated": 1,
- "upload": {
- "bytes": 1,
- "failures": 1,
- "pending": 1
}
}, - "queue": {
- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "dir": "/datasets/transactions",
- "kind": "preprocessed",
- "origin": "example",
- "path": "/datasets/transactions",
- "ref": "example",
- "region": "example",
- "secret_id": "sec_1a2b3c4d5e6f708192a3b4c5"
}, - "queue_in": {
- "downloaded": 1,
- "new_orders": 1,
- "reread": 1,
- "urgent": 1
}, - "served_model_name": "churn-propensity",
- "shard_details": [
- {
- "clients_ok": 1,
- "clients_per_second": 0.5,
- "failure_reason": "Example message",
- "index": 1,
- "job_name": "churn-propensity-v3",
- "phase": "syncing",
- "status": "Pending"
}
], - "shards": 1,
- "sources": [
- {
- "base": "example",
- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "dir": "/datasets/transactions",
- "kind": "preprocessed",
- "partition_prefix": "example",
- "path": "/datasets/transactions",
- "ref": "example"
}
], - "space": "example",
- "stages": [
- {
- "chunk": "example",
- "chunk_since": "example",
- "job_names": [
- "churn-propensity-v3"
], - "job_state": "Pending",
- "message": "Example message",
- "process_since": "example",
- "role": "example",
- "seen_at": "2026-01-15T10:30:00Z",
- "step": "example"
}
], - "started_at": "2026-01-15T10:30:00Z",
- "status": "Pending",
- "status_reason": "Example message",
- "streaming": false,
- "work_root": "example"
}Resolves every source and the queue before any job exists, and separates BLOCKERS (which stop the submit) from WARNINGS (the operator's call). It exists because this pipeline's failures are silent: a base with no partition for the day returns a months-old snapshot, an empty queue processes zero clients without an error.
Configuration to resolve
| data_ref required | string |
| endpoint_id | string Opcional: o pré-flight resolve FONTE e FILA, não o modelo. Uma execução apontada para uma URL manual simplesmente não o manda. |
| history_months | integer |
required | object Sem |
required | Array of objects (request.DNASourceInput) non-empty |
{- "data_ref": "string",
- "endpoint_id": "string",
- "history_months": 0,
- "queue": {
- "connector_id": "string",
- "kind": "preprocessed",
- "path": "string",
- "ref": "string"
}, - "sources": [
- {
- "base": "string",
- "connector_id": "string",
- "kind": "preprocessed",
- "path": "string",
- "ref": "string"
}
]
}{- "blockers": [
- "example"
], - "queue": {
- "dir": "/datasets/transactions",
- "newest_request_at": "2026-01-15T10:30:00Z",
- "oldest_request_at": "2026-01-15T10:30:00Z",
- "origin": "example",
- "requests_total": 1,
- "resolved_at_run": false
}, - "sources": [
- {
- "base": "example",
- "dir": "/datasets/transactions",
- "first_event": "example",
- "kind": "preprocessed",
- "lag_days": 1,
- "last_event": "example",
- "missing": false,
- "partition_prefix": "example",
- "path": "/datasets/transactions",
- "ref": "example",
- "resolved_at_run": false,
- "rows": 1,
- "stale": false
}
], - "warnings": [
- "example"
]
}One run in depth: aggregate progress and per-shard state, read live from the jobs' own reports and persisted as they are observed — the final metrics live in the jobs' outputs, and the cluster eventually deletes the jobs.
| runId required | string Run ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/dna-runs/{runId}" \ -H "x-api-key: $API_KEY"
{- "chunk_size": 1,
- "cluster": "example",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "data_ref": "example",
- "deadline": "example",
- "endpoint_id": "mep_1a2b3c4d5e6f708192a3b4c5",
- "finished_at": "2026-01-15T10:30:00Z",
- "history_months": 1,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "jobs": [
- {
- "name": "churn-propensity-v3",
- "role": "example",
- "shard": 1
}
], - "name": "churn-propensity-v3",
- "output_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "output_path": "/datasets/transactions",
- "output_region": "example",
- "output_secret_id": "sec_1a2b3c4d5e6f708192a3b4c5",
- "output_version": "1.0.0",
- "progress": {
- "chunk_inference_avg_seconds": 0.5,
- "chunks_failed": 1,
- "chunks_inferred": 1,
- "chunks_ready": 1,
- "chunks_total": 1,
- "clients_in_flight": 1,
- "clients_ok": 1,
- "clients_per_second": 0.5,
- "clients_total": 1,
- "concurrency": 0.5,
- "data_ref": "example",
- "empty": 1,
- "errors": 1,
- "eta_seconds": 1,
- "input": {
- "alerts": 1,
- "chunk_avg_seconds": 0.5,
- "chunks_with_problems": 1,
- "coverage": { },
- "last_chunk_seconds": 0.5,
- "pool_idle_fraction": 0.5,
- "stage_seconds": { }
}, - "input_tokens_avg": 0.5,
- "latency": {
- "avg_seconds": 0.5,
- "max_seconds": 0.5,
- "p50_seconds": 0.5,
- "p95_seconds": 0.5
}, - "message": "Example message",
- "moments_per_client": 0.5,
- "percent": 0.5,
- "phase": "syncing",
- "processes": 1,
- "quality": {
- "horizon": { },
- "intensity": { },
- "second_layer_per_client": 0.5
}, - "retries": {
- "empty_output": 1,
- "failovers": 1,
- "http": 1,
- "missing_members": 1
}, - "reused": 1,
- "sent_to_s3": 1,
- "shelf": 1,
- "tokens": {
- "cached_total": 1,
- "input_per_second": 0.5,
- "input_total": 1,
- "output_avg": 0.5,
- "output_per_second": 0.5,
- "output_total": 1,
- "reasoning_total": 1
}, - "truncated": 1,
- "upload": {
- "bytes": 1,
- "failures": 1,
- "pending": 1
}
}, - "queue": {
- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "dir": "/datasets/transactions",
- "kind": "preprocessed",
- "origin": "example",
- "path": "/datasets/transactions",
- "ref": "example",
- "region": "example",
- "secret_id": "sec_1a2b3c4d5e6f708192a3b4c5"
}, - "queue_in": {
- "downloaded": 1,
- "new_orders": 1,
- "reread": 1,
- "urgent": 1
}, - "served_model_name": "churn-propensity",
- "shard_details": [
- {
- "clients_ok": 1,
- "clients_per_second": 0.5,
- "failure_reason": "Example message",
- "index": 1,
- "job_name": "churn-propensity-v3",
- "phase": "syncing",
- "status": "Pending"
}
], - "shards": 1,
- "sources": [
- {
- "base": "example",
- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "dir": "/datasets/transactions",
- "kind": "preprocessed",
- "partition_prefix": "example",
- "path": "/datasets/transactions",
- "ref": "example"
}
], - "space": "example",
- "stages": [
- {
- "chunk": "example",
- "chunk_since": "example",
- "job_names": [
- "churn-propensity-v3"
], - "job_state": "Pending",
- "message": "Example message",
- "process_since": "example",
- "role": "example",
- "seen_at": "2026-01-15T10:30:00Z",
- "step": "example"
}
], - "started_at": "2026-01-15T10:30:00Z",
- "status": "Pending",
- "status_reason": "Example message",
- "streaming": false,
- "work_root": "example"
}Cancels the run's jobs. What was already written STAYS — the output is per chunk, so a later run resumes from where this one stopped.
| runId required | string Run ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/dna-runs/{runId}/cancel" \ -H "x-api-key: $API_KEY"
{- "chunk_size": 1,
- "cluster": "example",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "data_ref": "example",
- "deadline": "example",
- "endpoint_id": "mep_1a2b3c4d5e6f708192a3b4c5",
- "finished_at": "2026-01-15T10:30:00Z",
- "history_months": 1,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "jobs": [
- {
- "name": "churn-propensity-v3",
- "role": "example",
- "shard": 1
}
], - "name": "churn-propensity-v3",
- "output_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "output_path": "/datasets/transactions",
- "output_region": "example",
- "output_secret_id": "sec_1a2b3c4d5e6f708192a3b4c5",
- "output_version": "1.0.0",
- "progress": {
- "chunk_inference_avg_seconds": 0.5,
- "chunks_failed": 1,
- "chunks_inferred": 1,
- "chunks_ready": 1,
- "chunks_total": 1,
- "clients_in_flight": 1,
- "clients_ok": 1,
- "clients_per_second": 0.5,
- "clients_total": 1,
- "concurrency": 0.5,
- "data_ref": "example",
- "empty": 1,
- "errors": 1,
- "eta_seconds": 1,
- "input": {
- "alerts": 1,
- "chunk_avg_seconds": 0.5,
- "chunks_with_problems": 1,
- "coverage": { },
- "last_chunk_seconds": 0.5,
- "pool_idle_fraction": 0.5,
- "stage_seconds": { }
}, - "input_tokens_avg": 0.5,
- "latency": {
- "avg_seconds": 0.5,
- "max_seconds": 0.5,
- "p50_seconds": 0.5,
- "p95_seconds": 0.5
}, - "message": "Example message",
- "moments_per_client": 0.5,
- "percent": 0.5,
- "phase": "syncing",
- "processes": 1,
- "quality": {
- "horizon": { },
- "intensity": { },
- "second_layer_per_client": 0.5
}, - "retries": {
- "empty_output": 1,
- "failovers": 1,
- "http": 1,
- "missing_members": 1
}, - "reused": 1,
- "sent_to_s3": 1,
- "shelf": 1,
- "tokens": {
- "cached_total": 1,
- "input_per_second": 0.5,
- "input_total": 1,
- "output_avg": 0.5,
- "output_per_second": 0.5,
- "output_total": 1,
- "reasoning_total": 1
}, - "truncated": 1,
- "upload": {
- "bytes": 1,
- "failures": 1,
- "pending": 1
}
}, - "queue": {
- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "dir": "/datasets/transactions",
- "kind": "preprocessed",
- "origin": "example",
- "path": "/datasets/transactions",
- "ref": "example",
- "region": "example",
- "secret_id": "sec_1a2b3c4d5e6f708192a3b4c5"
}, - "queue_in": {
- "downloaded": 1,
- "new_orders": 1,
- "reread": 1,
- "urgent": 1
}, - "served_model_name": "churn-propensity",
- "shard_details": [
- {
- "clients_ok": 1,
- "clients_per_second": 0.5,
- "failure_reason": "Example message",
- "index": 1,
- "job_name": "churn-propensity-v3",
- "phase": "syncing",
- "status": "Pending"
}
], - "shards": 1,
- "sources": [
- {
- "base": "example",
- "connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "dir": "/datasets/transactions",
- "kind": "preprocessed",
- "partition_prefix": "example",
- "path": "/datasets/transactions",
- "ref": "example"
}
], - "space": "example",
- "stages": [
- {
- "chunk": "example",
- "chunk_since": "example",
- "job_names": [
- "churn-propensity-v3"
], - "job_state": "Pending",
- "message": "Example message",
- "process_since": "example",
- "role": "example",
- "seen_at": "2026-01-15T10:30:00Z",
- "step": "example"
}
], - "started_at": "2026-01-15T10:30:00Z",
- "status": "Pending",
- "status_reason": "Example message",
- "streaming": false,
- "work_root": "example"
}Retrieve drift policies in the current space with pagination
| limit | integer Default: 10 limit |
| after | string after |
| name | string name filter |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/drift-policies" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "policy": { },
- "updated_at": "2026-01-15T10:30:00Z"
}
], - "has_more": false
}Create a new drift policy in the current space
Drift policy creation request
| description | string |
| name required | string |
object (model.DriftMetrics) |
{- "description": "string",
- "name": "string",
- "policy": {
- "categorical_psi": {
- "bands": {
- "critical": 0,
- "minor": 0,
- "moderate": 0,
- "significant": 0
}, - "block": true,
- "block_at": "string",
- "compute": true
}, - "null_ratio_jump": {
- "block": true,
- "block_above": 0,
- "compute": true
}, - "numeric_psi": {
- "bands": {
- "critical": 0,
- "minor": 0,
- "moderate": 0,
- "significant": 0
}, - "block": true,
- "block_at": "string",
- "compute": true
}
}
}{- "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "policy": {
- "categorical_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}, - "null_ratio_jump": {
- "block": false,
- "block_above": 0.5,
- "compute": true
}, - "numeric_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}
}, - "updated_at": "2026-01-15T10:30:00Z"
}Delete a drift policy by ID
| id required | string Drift policy ID |
curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/drift-policies/{id}" \ -H "x-api-key: $API_KEY"
{- "id": "obj_1a2b3c4d5e6f708192a3b4c5"
}Retrieve a drift policy by ID
| id required | string Drift policy ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/drift-policies/{id}" \ -H "x-api-key: $API_KEY"
{- "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "policy": {
- "categorical_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}, - "null_ratio_jump": {
- "block": false,
- "block_above": 0.5,
- "compute": true
}, - "numeric_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}
}, - "updated_at": "2026-01-15T10:30:00Z"
}Update a drift policy by ID
| id required | string Drift policy ID |
Drift policy update request
| description | string |
| name | string |
object (model.DriftMetrics) |
{- "description": "string",
- "name": "string",
- "policy": {
- "categorical_psi": {
- "bands": {
- "critical": 0,
- "minor": 0,
- "moderate": 0,
- "significant": 0
}, - "block": true,
- "block_at": "string",
- "compute": true
}, - "null_ratio_jump": {
- "block": true,
- "block_above": 0,
- "compute": true
}, - "numeric_psi": {
- "bands": {
- "critical": 0,
- "minor": 0,
- "moderate": 0,
- "significant": 0
}, - "block": true,
- "block_at": "string",
- "compute": true
}
}
}{- "created_at": "2026-01-15T10:30:00Z",
- "description": "Scores the active customer base every morning.",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "policy": {
- "categorical_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}, - "null_ratio_jump": {
- "block": false,
- "block_above": 0.5,
- "compute": true
}, - "numeric_psi": {
- "bands": { },
- "block": false,
- "block_at": "2026-01-15T10:30:00Z",
- "compute": true
}
}, - "updated_at": "2026-01-15T10:30:00Z"
}Create a new evaluation
Evaluation creation request
| benchmark_id required | string |
| checkpoint_id required | string |
| gpu_count required | integer |
{- "benchmark_id": "string",
- "checkpoint_id": "string",
- "gpu_count": 0
}{- "benchmark_id": "ben_1a2b3c4d5e6f708192a3b4c5",
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "gpu_count": 8,
- "id": "eva_1a2b3c4d5e6f708192a3b4c5",
- "result": { },
- "updated_at": "2026-01-15T10:30:00Z",
- "updated_by": "example"
}curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "architecture": "example",
- "auto_batch_config": { },
- "checkpoint": 1,
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "compile": false,
- "compile_mode": "example",
- "connectors": { },
- "context_config": { },
- "cortex_image": "registry.example.com/image:tag",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": { },
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "datavolume_name": "shared-datasets",
- "datavolume_subpath": "transactions/2026-01",
- "desired_endpoint_port": 1,
- "embedding_quant": { },
- "endpoint": { },
- "engine_scaling": { },
- "engine_yaml": { },
- "epoch": 1,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_type": "example",
- "inference_version": "1.0.0",
- "instances": 1,
- "job_state_reasons": { },
- "job_states": { },
- "last_deployed_at": "2026-01-15T10:30:00Z",
- "mode": "example",
- "model_dir": "/datasets/transactions",
- "model_path": "/datasets/transactions",
- "model_source": "example",
- "monitoring_settings": { },
- "scaling": { },
- "schedule": { },
- "scheduled_batch": { },
- "space": "example",
- "status": "PENDING",
- "status_reason": "Example message",
- "tag": "example",
- "topology": "example",
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z",
- "weight_load": "example"
}
], - "has_more": false
}Body
| architecture | string <= 128 characters Architecture names which platform architecture the model was trained under, for a path/datavolume deploy that has NO checkpoint lineage. It supplies the inference config (rust image + tunables) AND the cortex image the GPU engines run in (always multi-version — the training cortex, never cortex-infer-gpu) — the provenance a lineage-free deploy otherwise lacks. Empty → the platform's current default architecture (the most recent cortex). Ignored for a checkpoint source (which resolves the architecture from the checkpoint's training lineage). |
object AutoBatchConfig is the batch-mode automation intent (input source + schedule
| |
| checkpoint_id | string |
| compile | boolean Compile is the torch.compile override for every engine role (embedding, backbone, fused). Omitted compiles; an explicit false runs the engines eager. Engine-only — it never reaches the context store. |
| compile_mode | string Enum: "regional" "max-autotune" CompileMode is the torch.compile mode the FUSED engine uses when Compile is on: "regional" (the default) or "max-autotune". "whole" is intentionally not offered (documented broken). The embedding and backbone engines always compile regionally. |
object Connectors carries the server's optional input data integrations. It is no longer required — the output destination moved to the batch run — so a deploy that sends none (or only inputs) is accepted. | |
| cortex_image | string <= 512 characters CortexImage optionally overrides the GPU/training cortex image the engines run in (the multi-version main container) — a full image ref typed by hand for a path/datavolume deploy. Empty → the architecture's image. Ignored for a checkpoint source (which resolves the image from its training lineage). |
| data_model_id | string The lineage IDs are required only for the default checkpoint source; the lineage-free sources (path, datavolume) omit them. gin's required_unless takes a single value, so the "checkpoint source requires lineage" rule is enforced in the service Create instead (same rejection, better message) — the binding leaves them optional. |
| datavolume_name | string DataVolumeName is the neocore DataVolume to serve the model from, required when model_source is "datavolume". DataVolumeSubpath is the optional dir under its mount the model lives in (empty = the mount root). |
| datavolume_subpath | string |
object EmbeddingQuant is the optional TurboQuant embedding-quantization knob. Absent → no quantization (emitted configs are byte-identical to before). Only online deploys carry it (folded into the model fingerprint across the engines + context store + server). Scheme/Bits/Seed/Rounds default server-side when omitted; Enabled defaults false. | |
object Endpoint optionally fixes the online server's client-facing external port at deploy (online only): a specific port or a range to draw one from. Absent → neocore auto-allocates. Persisted as the server's desired port and pinned when the online HTTP server is brought up. | |
object EngineScaling is the optional autoscaling config for the GPU engine tier (embedding + backbone). Absent → fixed single-replica engine jobs. | |
object EngineYaml carries optional per-role user-edited engine config documents — the advanced "edit engine YAML" deploy mode — keyed by engine role: "embedding"/"backbone" for a split server, "fused" for a fused server. For each role present, the engine job mounts the user's document with the platform-managed engine fields (model dir, mode, embed_dtype, transport wiring, embedding_quant) deep-merged OVER it, so the operator can't break serving. Roles not present (or an empty string / absent map) fall back to the field-derived config — byte-identical to a deploy made before this knob existed. Malformed YAML → 400. Unknown role keys → 400. | |
| inference_type required | string Enum: "batch" "online" |
| inference_version | string <= 128 characters InferenceVersion overrides the cortex-infer image tag (tag only, e.g. "v0.0.8"); empty = the architecture's tag (latest). Validated tag-only in the service. |
| instances | integer |
| mode | string Enum: "online" "batch" "hybrid" Mode is the deploy intent: "online" (serves /infer), "hybrid" (serves /infer AND accepts batch runs through its engines, which default to the engine's batch mode — the portal's "Batch" deploy) or "batch" (accepts batch runs, no endpoint). It must agree with inference_type (online and hybrid are online types), and omitted derives from it. |
| model_path | string ModelPath is the operator-supplied absolute model dir, required when model_source is "path". Must be under a shared volume (/shared or /mnt/fss). |
| model_source | string Enum: "checkpoint" "path" "datavolume" ModelSource selects where the served model dir comes from: "checkpoint" (the default; empty is treated as checkpoint) resolves the data-model / training / checkpoint lineage, "path" serves ModelPath directly (no lineage), or "datavolume" serves a dir under a neocore DataVolume's mount (no lineage). |
object Scaling is the optional autoscaling config for an online endpoint. Absent → a fixed fleet sized by Instances. | |
object (model.InferenceServerSchedule) | |
object ScheduledBatch is the stepper config a batch-mode server reuses on each scheduled fire (rolling window). The schedule lives in Schedule. | |
| space required | string |
| tag | string |
| topology | string Enum: "split" "fused" Topology selects the online engine layout: "split" (default; empty = split) runs the embedding + backbone pair, "fused" runs one fused engine. Fused is online only — the service rejects it for a batch-only server. |
| training_id | string |
| weight_load | string Enum: "standard" "legacy" WeightLoad selects the engine checkpoint-head load path: "standard" (default) or "legacy" (pre-refactor checkpoints, older head layout). Absent → standard. Engine-only: it reaches both GPU engine roles on every deploy type and never the context store. |
{- "architecture": "string",
- "auto_batch_config": {
- "enabled": true,
- "input_source": {
- "bucket": "string",
- "integration_id": "string",
- "integration_name": "string",
- "path": "string"
}, - "no_new_files_behavior": "string",
- "schedule": {
- "active_between": {
- "end": "string",
- "start": "string"
}, - "recurrence": {
- "by_week_day": [
- "string"
], - "frequency": "string",
- "interval": 0,
- "time_of_day": "string"
}, - "termination": {
- "count": 0,
- "mode": "string",
- "until": "string"
}, - "timezone": "string"
}
}, - "checkpoint_id": "string",
- "compile": true,
- "compile_mode": "regional",
- "connectors": {
- "inputs": [
- {
- "connector_id": "string",
- "hive_partition": "string",
- "path": "string"
}
]
}, - "cortex_image": "string",
- "data_model_id": "string",
- "datavolume_name": "string",
- "datavolume_subpath": "string",
- "embedding_quant": {
- "bits": 0,
- "enabled": true,
- "rounds": 0,
- "scheme": "string",
- "seed": 0
}, - "endpoint": {
- "port": 1,
- "range": {
- "max": 1,
- "min": 1
}
}, - "engine_scaling": {
- "backbone": {
- "max": 0,
- "min": 0
}, - "embedding": {
- "max": 0,
- "min": 0
}, - "fused": {
- "max": 0,
- "min": 0
}, - "max": 0,
- "min": 0
}, - "engine_yaml": {
- "property1": "string",
- "property2": "string"
}, - "inference_type": "batch",
- "inference_version": "string",
- "instances": 0,
- "mode": "online",
- "model_path": "string",
- "model_source": "checkpoint",
- "scaling": {
- "cooldown_seconds": 0,
- "max": 0,
- "min": 0,
- "target_concurrency": 0
}, - "schedule": {
- "active_between": {
- "end": "string",
- "start": "string"
}, - "recurrence": {
- "by_week_day": [
- "string"
], - "frequency": "string",
- "interval": 0,
- "time_of_day": "string"
}, - "termination": {
- "count": 0,
- "mode": "string",
- "until": "string"
}, - "timezone": "string"
}, - "scheduled_batch": {
- "event_dataset_ids": [
- "string"
], - "flags": {
- "eos_inference_mode": "every_token",
- "include_all_probs": true,
- "infer_every_event": true,
- "infer_target_date": "string",
- "logits_only": true,
- "omit_predictions_json": true,
- "save_logits": true,
- "use_context": true
}, - "pool": {
- "file_connector_id": "string",
- "file_path": "string",
- "reference_dataset_ids": [
- "string"
]
}, - "window": {
- "count": 0,
- "end": "string",
- "mode": "string",
- "start": "string",
- "unit": "string"
}
}, - "space": "string",
- "tag": "string",
- "topology": "split",
- "training_id": "string",
- "weight_load": "standard"
}{- "architecture": "example",
- "auto_batch_config": {
- "enabled": true,
- "input_source": {
- "bucket": "example",
- "integration_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "integration_name": "churn-propensity-v3",
- "path": "/datasets/transactions"
}, - "no_new_files_behavior": "example",
- "schedule": {
- "active_between": { },
- "recurrence": { },
- "termination": { },
- "timezone": "UTC"
}
}, - "checkpoint": 1,
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "compile": false,
- "compile_mode": "example",
- "connectors": {
- "inputs": [
- { }
]
}, - "context_config": {
- "enabled": true,
- "lookback_window": "example",
- "max_len": 4,
- "min_context": 1,
- "mismatch_strategy": "example"
}, - "cortex_image": "registry.example.com/image:tag",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "email": "someone@example.com",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "datavolume_name": "shared-datasets",
- "datavolume_subpath": "transactions/2026-01",
- "desired_endpoint_port": 1,
- "embedding_quant": {
- "bits": 1,
- "enabled": true,
- "rounds": 1,
- "scheme": "example",
- "seed": 1
}, - "endpoint": {
- "external_host": "example",
- "listen_port": 1,
- "protocol": "example"
}, - "engine_scaling": {
- "backbone": {
- "max": 4,
- "min": 1
}, - "embedding": {
- "max": 4,
- "min": 1
}, - "fused": {
- "max": 4,
- "min": 1
}, - "max": 4,
- "min": 1
}, - "engine_yaml": { },
- "epoch": 1,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_type": "example",
- "inference_version": "1.0.0",
- "instances": 1,
- "job_state_reasons": { },
- "job_states": { },
- "last_deployed_at": "2026-01-15T10:30:00Z",
- "mode": "example",
- "model_dir": "/datasets/transactions",
- "model_path": "/datasets/transactions",
- "model_source": "example",
- "monitoring_settings": {
- "decision_thresholds": [
- { }
], - "model_drift": {
- "critical_ks_d": 0.5,
- "warn_ks_d": 0.5
}
}, - "scaling": {
- "cooldown_seconds": 1,
- "max": 4,
- "min": 1,
- "target_concurrency": 1
}, - "schedule": {
- "active_between": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "recurrence": {
- "by_week_day": [
- "example"
], - "frequency": "example",
- "interval": 1,
- "time_of_day": "example"
}, - "termination": {
- "count": 8,
- "mode": "example",
- "until": "example"
}, - "timezone": "UTC"
}, - "scheduled_batch": {
- "event_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "flags": {
- "eos_inference_mode": "every_token",
- "include_all_probs": false,
- "infer_every_event": false,
- "infer_target_date": "example",
- "logits_only": false,
- "omit_predictions_json": false,
- "save_logits": false,
- "use_context": false
}, - "pool": {
- "file_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "file_path": "/datasets/transactions",
- "reference_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
]
}, - "window": {
- "count": 8,
- "end": "2026-03-31T23:59:59Z",
- "mode": "example",
- "start": "2026-01-01T00:00:00Z",
- "unit": "example"
}
}, - "space": "example",
- "status": "PENDING",
- "status_reason": "Example message",
- "tag": "example",
- "topology": "example",
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z",
- "weight_load": "example"
}| id required | string Inference server ID |
Body (status canceled = undeploy; running = activate, may persist as awaiting_inference when instances is 0)
| status required | string Enum: "canceled" "running" canceled: soft undeploy. running: activate (stored as running or awaiting_inference when instances is 0). |
{- "status": "canceled"
}{- "architecture": "example",
- "auto_batch_config": {
- "enabled": true,
- "input_source": {
- "bucket": "example",
- "integration_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "integration_name": "churn-propensity-v3",
- "path": "/datasets/transactions"
}, - "no_new_files_behavior": "example",
- "schedule": {
- "active_between": { },
- "recurrence": { },
- "termination": { },
- "timezone": "UTC"
}
}, - "checkpoint": 1,
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "compile": false,
- "compile_mode": "example",
- "connectors": {
- "inputs": [
- { }
]
}, - "context_config": {
- "enabled": true,
- "lookback_window": "example",
- "max_len": 4,
- "min_context": 1,
- "mismatch_strategy": "example"
}, - "cortex_image": "registry.example.com/image:tag",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "email": "someone@example.com",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "datavolume_name": "shared-datasets",
- "datavolume_subpath": "transactions/2026-01",
- "desired_endpoint_port": 1,
- "embedding_quant": {
- "bits": 1,
- "enabled": true,
- "rounds": 1,
- "scheme": "example",
- "seed": 1
}, - "endpoint": {
- "external_host": "example",
- "listen_port": 1,
- "protocol": "example"
}, - "engine_scaling": {
- "backbone": {
- "max": 4,
- "min": 1
}, - "embedding": {
- "max": 4,
- "min": 1
}, - "fused": {
- "max": 4,
- "min": 1
}, - "max": 4,
- "min": 1
}, - "engine_yaml": { },
- "epoch": 1,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_type": "example",
- "inference_version": "1.0.0",
- "instances": 1,
- "job_state_reasons": { },
- "job_states": { },
- "last_deployed_at": "2026-01-15T10:30:00Z",
- "mode": "example",
- "model_dir": "/datasets/transactions",
- "model_path": "/datasets/transactions",
- "model_source": "example",
- "monitoring_settings": {
- "decision_thresholds": [
- { }
], - "model_drift": {
- "critical_ks_d": 0.5,
- "warn_ks_d": 0.5
}
}, - "scaling": {
- "cooldown_seconds": 1,
- "max": 4,
- "min": 1,
- "target_concurrency": 1
}, - "schedule": {
- "active_between": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "recurrence": {
- "by_week_day": [
- "example"
], - "frequency": "example",
- "interval": 1,
- "time_of_day": "example"
}, - "termination": {
- "count": 8,
- "mode": "example",
- "until": "example"
}, - "timezone": "UTC"
}, - "scheduled_batch": {
- "event_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "flags": {
- "eos_inference_mode": "every_token",
- "include_all_probs": false,
- "infer_every_event": false,
- "infer_target_date": "example",
- "logits_only": false,
- "omit_predictions_json": false,
- "save_logits": false,
- "use_context": false
}, - "pool": {
- "file_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "file_path": "/datasets/transactions",
- "reference_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
]
}, - "window": {
- "count": 8,
- "end": "2026-03-31T23:59:59Z",
- "mode": "example",
- "start": "2026-01-01T00:00:00Z",
- "unit": "example"
}
}, - "space": "example",
- "status": "PENDING",
- "status_reason": "Example message",
- "tag": "example",
- "topology": "example",
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z",
- "weight_load": "example"
}| id required | string Inference server ID |
Body
| architecture | string <= 128 characters Architecture names which platform architecture the model was trained under, for a path/datavolume deploy that has NO checkpoint lineage. It supplies the inference config (rust image + tunables) AND the cortex image the GPU engines run in (always multi-version — the training cortex, never cortex-infer-gpu) — the provenance a lineage-free deploy otherwise lacks. Empty → the platform's current default architecture (the most recent cortex). Ignored for a checkpoint source (which resolves the architecture from the checkpoint's training lineage). |
object AutoBatchConfig is the batch-mode automation intent (input source + schedule
| |
| checkpoint_id | string |
| compile | boolean Compile is the torch.compile override for every engine role (embedding, backbone, fused). Omitted compiles; an explicit false runs the engines eager. Engine-only — it never reaches the context store. |
| compile_mode | string Enum: "regional" "max-autotune" CompileMode is the torch.compile mode the FUSED engine uses when Compile is on: "regional" (the default) or "max-autotune". "whole" is intentionally not offered (documented broken). The embedding and backbone engines always compile regionally. |
object Connectors carries the server's optional input data integrations. It is no longer required — the output destination moved to the batch run — so a deploy that sends none (or only inputs) is accepted. | |
| cortex_image | string <= 512 characters CortexImage optionally overrides the GPU/training cortex image the engines run in (the multi-version main container) — a full image ref typed by hand for a path/datavolume deploy. Empty → the architecture's image. Ignored for a checkpoint source (which resolves the image from its training lineage). |
| data_model_id | string The lineage IDs are required only for the default checkpoint source; the lineage-free sources (path, datavolume) omit them. gin's required_unless takes a single value, so the "checkpoint source requires lineage" rule is enforced in the service Create instead (same rejection, better message) — the binding leaves them optional. |
| datavolume_name | string DataVolumeName is the neocore DataVolume to serve the model from, required when model_source is "datavolume". DataVolumeSubpath is the optional dir under its mount the model lives in (empty = the mount root). |
| datavolume_subpath | string |
object EmbeddingQuant is the optional TurboQuant embedding-quantization knob. Absent → no quantization (emitted configs are byte-identical to before). Only online deploys carry it (folded into the model fingerprint across the engines + context store + server). Scheme/Bits/Seed/Rounds default server-side when omitted; Enabled defaults false. | |
object Endpoint optionally fixes the online server's client-facing external port at deploy (online only): a specific port or a range to draw one from. Absent → neocore auto-allocates. Persisted as the server's desired port and pinned when the online HTTP server is brought up. | |
object EngineScaling is the optional autoscaling config for the GPU engine tier (embedding + backbone). Absent → fixed single-replica engine jobs. | |
object EngineYaml carries optional per-role user-edited engine config documents — the advanced "edit engine YAML" deploy mode — keyed by engine role: "embedding"/"backbone" for a split server, "fused" for a fused server. For each role present, the engine job mounts the user's document with the platform-managed engine fields (model dir, mode, embed_dtype, transport wiring, embedding_quant) deep-merged OVER it, so the operator can't break serving. Roles not present (or an empty string / absent map) fall back to the field-derived config — byte-identical to a deploy made before this knob existed. Malformed YAML → 400. Unknown role keys → 400. | |
| inference_type required | string Enum: "batch" "online" |
| inference_version | string <= 128 characters InferenceVersion overrides the cortex-infer image tag (tag only, e.g. "v0.0.8"); empty = the architecture's tag (latest). Validated tag-only in the service. |
| instances | integer |
| mode | string Enum: "online" "batch" "hybrid" Mode is the deploy intent: "online" (serves /infer), "hybrid" (serves /infer AND accepts batch runs through its engines, which default to the engine's batch mode — the portal's "Batch" deploy) or "batch" (accepts batch runs, no endpoint). It must agree with inference_type (online and hybrid are online types), and omitted derives from it. |
| model_path | string ModelPath is the operator-supplied absolute model dir, required when model_source is "path". Must be under a shared volume (/shared or /mnt/fss). |
| model_source | string Enum: "checkpoint" "path" "datavolume" ModelSource selects where the served model dir comes from: "checkpoint" (the default; empty is treated as checkpoint) resolves the data-model / training / checkpoint lineage, "path" serves ModelPath directly (no lineage), or "datavolume" serves a dir under a neocore DataVolume's mount (no lineage). |
object Scaling is the optional autoscaling config for an online endpoint. Absent → a fixed fleet sized by Instances. | |
object (model.InferenceServerSchedule) | |
object ScheduledBatch is the stepper config a batch-mode server reuses on each scheduled fire (rolling window). The schedule lives in Schedule. | |
| space required | string |
| tag | string |
| topology | string Enum: "split" "fused" Topology selects the online engine layout: "split" (default; empty = split) runs the embedding + backbone pair, "fused" runs one fused engine. Fused is online only — the service rejects it for a batch-only server. |
| training_id | string |
| weight_load | string Enum: "standard" "legacy" WeightLoad selects the engine checkpoint-head load path: "standard" (default) or "legacy" (pre-refactor checkpoints, older head layout). Absent → standard. Engine-only: it reaches both GPU engine roles on every deploy type and never the context store. |
{- "architecture": "string",
- "auto_batch_config": {
- "enabled": true,
- "input_source": {
- "bucket": "string",
- "integration_id": "string",
- "integration_name": "string",
- "path": "string"
}, - "no_new_files_behavior": "string",
- "schedule": {
- "active_between": {
- "end": "string",
- "start": "string"
}, - "recurrence": {
- "by_week_day": [
- "string"
], - "frequency": "string",
- "interval": 0,
- "time_of_day": "string"
}, - "termination": {
- "count": 0,
- "mode": "string",
- "until": "string"
}, - "timezone": "string"
}
}, - "checkpoint_id": "string",
- "compile": true,
- "compile_mode": "regional",
- "connectors": {
- "inputs": [
- {
- "connector_id": "string",
- "hive_partition": "string",
- "path": "string"
}
]
}, - "cortex_image": "string",
- "data_model_id": "string",
- "datavolume_name": "string",
- "datavolume_subpath": "string",
- "embedding_quant": {
- "bits": 0,
- "enabled": true,
- "rounds": 0,
- "scheme": "string",
- "seed": 0
}, - "endpoint": {
- "port": 1,
- "range": {
- "max": 1,
- "min": 1
}
}, - "engine_scaling": {
- "backbone": {
- "max": 0,
- "min": 0
}, - "embedding": {
- "max": 0,
- "min": 0
}, - "fused": {
- "max": 0,
- "min": 0
}, - "max": 0,
- "min": 0
}, - "engine_yaml": {
- "property1": "string",
- "property2": "string"
}, - "inference_type": "batch",
- "inference_version": "string",
- "instances": 0,
- "mode": "online",
- "model_path": "string",
- "model_source": "checkpoint",
- "scaling": {
- "cooldown_seconds": 0,
- "max": 0,
- "min": 0,
- "target_concurrency": 0
}, - "schedule": {
- "active_between": {
- "end": "string",
- "start": "string"
}, - "recurrence": {
- "by_week_day": [
- "string"
], - "frequency": "string",
- "interval": 0,
- "time_of_day": "string"
}, - "termination": {
- "count": 0,
- "mode": "string",
- "until": "string"
}, - "timezone": "string"
}, - "scheduled_batch": {
- "event_dataset_ids": [
- "string"
], - "flags": {
- "eos_inference_mode": "every_token",
- "include_all_probs": true,
- "infer_every_event": true,
- "infer_target_date": "string",
- "logits_only": true,
- "omit_predictions_json": true,
- "save_logits": true,
- "use_context": true
}, - "pool": {
- "file_connector_id": "string",
- "file_path": "string",
- "reference_dataset_ids": [
- "string"
]
}, - "window": {
- "count": 0,
- "end": "string",
- "mode": "string",
- "start": "string",
- "unit": "string"
}
}, - "space": "string",
- "tag": "string",
- "topology": "split",
- "training_id": "string",
- "weight_load": "standard"
}Persist how much cached context the online endpoint keeps per user.
| id required | string Inference server ID |
Context configuration
| enabled | boolean |
| lookback_window | string |
| max_len | integer |
| min_context | integer |
| mismatch_strategy | string |
{- "enabled": true,
- "lookback_window": "string",
- "max_len": 0,
- "min_context": 0,
- "mismatch_strategy": "string"
}{- "architecture": "example",
- "auto_batch_config": {
- "enabled": true,
- "input_source": {
- "bucket": "example",
- "integration_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "integration_name": "churn-propensity-v3",
- "path": "/datasets/transactions"
}, - "no_new_files_behavior": "example",
- "schedule": {
- "active_between": { },
- "recurrence": { },
- "termination": { },
- "timezone": "UTC"
}
}, - "checkpoint": 1,
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "compile": false,
- "compile_mode": "example",
- "connectors": {
- "inputs": [
- { }
]
}, - "context_config": {
- "enabled": true,
- "lookback_window": "example",
- "max_len": 4,
- "min_context": 1,
- "mismatch_strategy": "example"
}, - "cortex_image": "registry.example.com/image:tag",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "email": "someone@example.com",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "datavolume_name": "shared-datasets",
- "datavolume_subpath": "transactions/2026-01",
- "desired_endpoint_port": 1,
- "embedding_quant": {
- "bits": 1,
- "enabled": true,
- "rounds": 1,
- "scheme": "example",
- "seed": 1
}, - "endpoint": {
- "external_host": "example",
- "listen_port": 1,
- "protocol": "example"
}, - "engine_scaling": {
- "backbone": {
- "max": 4,
- "min": 1
}, - "embedding": {
- "max": 4,
- "min": 1
}, - "fused": {
- "max": 4,
- "min": 1
}, - "max": 4,
- "min": 1
}, - "engine_yaml": { },
- "epoch": 1,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_type": "example",
- "inference_version": "1.0.0",
- "instances": 1,
- "job_state_reasons": { },
- "job_states": { },
- "last_deployed_at": "2026-01-15T10:30:00Z",
- "mode": "example",
- "model_dir": "/datasets/transactions",
- "model_path": "/datasets/transactions",
- "model_source": "example",
- "monitoring_settings": {
- "decision_thresholds": [
- { }
], - "model_drift": {
- "critical_ks_d": 0.5,
- "warn_ks_d": 0.5
}
}, - "scaling": {
- "cooldown_seconds": 1,
- "max": 4,
- "min": 1,
- "target_concurrency": 1
}, - "schedule": {
- "active_between": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "recurrence": {
- "by_week_day": [
- "example"
], - "frequency": "example",
- "interval": 1,
- "time_of_day": "example"
}, - "termination": {
- "count": 8,
- "mode": "example",
- "until": "example"
}, - "timezone": "UTC"
}, - "scheduled_batch": {
- "event_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "flags": {
- "eos_inference_mode": "every_token",
- "include_all_probs": false,
- "infer_every_event": false,
- "infer_target_date": "example",
- "logits_only": false,
- "omit_predictions_json": false,
- "save_logits": false,
- "use_context": false
}, - "pool": {
- "file_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "file_path": "/datasets/transactions",
- "reference_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
]
}, - "window": {
- "count": 8,
- "end": "2026-03-31T23:59:59Z",
- "mode": "example",
- "start": "2026-01-01T00:00:00Z",
- "unit": "example"
}
}, - "space": "example",
- "status": "PENDING",
- "status_reason": "Example message",
- "tag": "example",
- "topology": "example",
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z",
- "weight_load": "example"
}The score cut-offs the server applies when turning a prediction into a decision.
| id required | string Inference server ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/decision-thresholds" \ -H "x-api-key: $API_KEY"
{- "targets": [
- {
- "best_threshold": 0.5,
- "target": "example"
}
]
}Renders each engine role's current effective engine config for an already-deployed server (folding in any persisted per-role override), with the platform-managed fields shown as placeholders. Pre-fills the reconfigure editor. Creates nothing.
| spaceId required | string Space id |
| id required | string Inference server ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/engine-config" \ -H "x-api-key: $API_KEY"
{- "configs": { }
}Applies per-role engine-config overrides to an already-provisioned server and recreates ONLY the reconfigured engine role(s) with the new config — a brief serving interruption on the affected tier. Managed fields are re-injected; unknown role / malformed YAML → 400.
| spaceId required | string Space id |
| id required | string Inference server ID |
Per-role engine YAML
object | |||
| |||
{- "engine_yaml": {
- "property1": "string",
- "property2": "string"
}
}{- "architecture": "example",
- "auto_batch_config": {
- "enabled": true,
- "input_source": {
- "bucket": "example",
- "integration_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "integration_name": "churn-propensity-v3",
- "path": "/datasets/transactions"
}, - "no_new_files_behavior": "example",
- "schedule": {
- "active_between": { },
- "recurrence": { },
- "termination": { },
- "timezone": "UTC"
}
}, - "checkpoint": 1,
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "compile": false,
- "compile_mode": "example",
- "connectors": {
- "inputs": [
- { }
]
}, - "context_config": {
- "enabled": true,
- "lookback_window": "example",
- "max_len": 4,
- "min_context": 1,
- "mismatch_strategy": "example"
}, - "cortex_image": "registry.example.com/image:tag",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "email": "someone@example.com",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "datavolume_name": "shared-datasets",
- "datavolume_subpath": "transactions/2026-01",
- "desired_endpoint_port": 1,
- "embedding_quant": {
- "bits": 1,
- "enabled": true,
- "rounds": 1,
- "scheme": "example",
- "seed": 1
}, - "endpoint": {
- "external_host": "example",
- "listen_port": 1,
- "protocol": "example"
}, - "engine_scaling": {
- "backbone": {
- "max": 4,
- "min": 1
}, - "embedding": {
- "max": 4,
- "min": 1
}, - "fused": {
- "max": 4,
- "min": 1
}, - "max": 4,
- "min": 1
}, - "engine_yaml": { },
- "epoch": 1,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_type": "example",
- "inference_version": "1.0.0",
- "instances": 1,
- "job_state_reasons": { },
- "job_states": { },
- "last_deployed_at": "2026-01-15T10:30:00Z",
- "mode": "example",
- "model_dir": "/datasets/transactions",
- "model_path": "/datasets/transactions",
- "model_source": "example",
- "monitoring_settings": {
- "decision_thresholds": [
- { }
], - "model_drift": {
- "critical_ks_d": 0.5,
- "warn_ks_d": 0.5
}
}, - "scaling": {
- "cooldown_seconds": 1,
- "max": 4,
- "min": 1,
- "target_concurrency": 1
}, - "schedule": {
- "active_between": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "recurrence": {
- "by_week_day": [
- "example"
], - "frequency": "example",
- "interval": 1,
- "time_of_day": "example"
}, - "termination": {
- "count": 8,
- "mode": "example",
- "until": "example"
}, - "timezone": "UTC"
}, - "scheduled_batch": {
- "event_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "flags": {
- "eos_inference_mode": "every_token",
- "include_all_probs": false,
- "infer_every_event": false,
- "infer_target_date": "example",
- "logits_only": false,
- "omit_predictions_json": false,
- "save_logits": false,
- "use_context": false
}, - "pool": {
- "file_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "file_path": "/datasets/transactions",
- "reference_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
]
}, - "window": {
- "count": 8,
- "end": "2026-03-31T23:59:59Z",
- "mode": "example",
- "start": "2026-01-01T00:00:00Z",
- "unit": "example"
}
}, - "space": "example",
- "status": "PENDING",
- "status_reason": "Example message",
- "tag": "example",
- "topology": "example",
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z",
- "weight_load": "example"
}Bump one role's (embedding | backbone | server) ScalingGroup min/max replica bounds on demand. Floored to min >= 1, max >= min.
| id required | string Inference server ID |
| role required | string Role (embedding | backbone | server) |
New bounds
| max | integer |
| min | integer |
{- "max": 0,
- "min": 0
}{- "max": 4,
- "min": 1,
- "role": "example"
}The checkpoint the server serves, its parameter counts, and the input and target views a caller must fill.
| id required | string Inference server ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/model" \ -H "x-api-key: $API_KEY"
{- "info": {
- "backbone_dim": 1,
- "checkpoint": "example",
- "engine_params": 1,
- "input_keys": [
- "REDACTED"
], - "kind": "example",
- "target_keys": [
- "REDACTED"
], - "total_params": 1
}, - "input_views": [
- {
- "cat_cols": [
- "example"
], - "client_id_col": "example",
- "event_ts_col": "example",
- "key": "REDACTED",
- "label": "example",
- "n_cat": 1,
- "n_num": 1,
- "n_str": 1,
- "n_ts": 1,
- "num_cols": [
- "example"
], - "real_id_cols": [
- "example"
], - "role": "example",
- "str_cols": [
- "example"
], - "ts_cols": [
- "example"
], - "use_real_id_as_feature": false,
- "vocab_samples": [
- [
- "example"
]
], - "vocab_sizes": [
- 1
]
}
], - "target_views": [
- {
- "cat_cols": [
- "example"
], - "client_id_col": "example",
- "event_ts_col": "example",
- "key": "REDACTED",
- "label": "example",
- "n_cat": 1,
- "n_num": 1,
- "n_str": 1,
- "n_ts": 1,
- "num_cols": [
- "example"
], - "real_id_cols": [
- "example"
], - "role": "example",
- "str_cols": [
- "example"
], - "ts_cols": [
- "example"
], - "use_real_id_as_feature": false,
- "vocab_samples": [
- [
- "example"
]
], - "vocab_sizes": [
- 1
]
}
]
}The model's tensor/shard layout as published by the engine, forwarded verbatim.
| id required | string Inference server ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/model/layout" \ -H "x-api-key: $API_KEY"
{ }Set the drift and quality monitoring the server runs against its own traffic.
| id required | string Inference server ID |
Monitoring settings
| critical_ks_d required | number <= 1 |
object (request.ConfigureDecisionThresholdRequest) | |
| warn_ks_d required | number <= 1 |
{- "critical_ks_d": 1,
- "decision_threshold": {
- "target": "string",
- "threshold": 0
}, - "warn_ks_d": 1
}{- "architecture": "example",
- "auto_batch_config": {
- "enabled": true,
- "input_source": {
- "bucket": "example",
- "integration_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "integration_name": "churn-propensity-v3",
- "path": "/datasets/transactions"
}, - "no_new_files_behavior": "example",
- "schedule": {
- "active_between": { },
- "recurrence": { },
- "termination": { },
- "timezone": "UTC"
}
}, - "checkpoint": 1,
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "compile": false,
- "compile_mode": "example",
- "connectors": {
- "inputs": [
- { }
]
}, - "context_config": {
- "enabled": true,
- "lookback_window": "example",
- "max_len": 4,
- "min_context": 1,
- "mismatch_strategy": "example"
}, - "cortex_image": "registry.example.com/image:tag",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "email": "someone@example.com",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "datavolume_name": "shared-datasets",
- "datavolume_subpath": "transactions/2026-01",
- "desired_endpoint_port": 1,
- "embedding_quant": {
- "bits": 1,
- "enabled": true,
- "rounds": 1,
- "scheme": "example",
- "seed": 1
}, - "endpoint": {
- "external_host": "example",
- "listen_port": 1,
- "protocol": "example"
}, - "engine_scaling": {
- "backbone": {
- "max": 4,
- "min": 1
}, - "embedding": {
- "max": 4,
- "min": 1
}, - "fused": {
- "max": 4,
- "min": 1
}, - "max": 4,
- "min": 1
}, - "engine_yaml": { },
- "epoch": 1,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_type": "example",
- "inference_version": "1.0.0",
- "instances": 1,
- "job_state_reasons": { },
- "job_states": { },
- "last_deployed_at": "2026-01-15T10:30:00Z",
- "mode": "example",
- "model_dir": "/datasets/transactions",
- "model_path": "/datasets/transactions",
- "model_source": "example",
- "monitoring_settings": {
- "decision_thresholds": [
- { }
], - "model_drift": {
- "critical_ks_d": 0.5,
- "warn_ks_d": 0.5
}
}, - "scaling": {
- "cooldown_seconds": 1,
- "max": 4,
- "min": 1,
- "target_concurrency": 1
}, - "schedule": {
- "active_between": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "recurrence": {
- "by_week_day": [
- "example"
], - "frequency": "example",
- "interval": 1,
- "time_of_day": "example"
}, - "termination": {
- "count": 8,
- "mode": "example",
- "until": "example"
}, - "timezone": "UTC"
}, - "scheduled_batch": {
- "event_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "flags": {
- "eos_inference_mode": "every_token",
- "include_all_probs": false,
- "infer_every_event": false,
- "infer_target_date": "example",
- "logits_only": false,
- "omit_predictions_json": false,
- "save_logits": false,
- "use_context": false
}, - "pool": {
- "file_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "file_path": "/datasets/transactions",
- "reference_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
]
}, - "window": {
- "count": 8,
- "end": "2026-03-31T23:59:59Z",
- "mode": "example",
- "start": "2026-01-01T00:00:00Z",
- "unit": "example"
}
}, - "space": "example",
- "status": "PENDING",
- "status_reason": "Example message",
- "tag": "example",
- "topology": "example",
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z",
- "weight_load": "example"
}Bring up the online (synchronous) inference endpoint. Accepted immediately; the server reports READY through its status.
| id required | string Inference server ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/online-server" \ -H "x-api-key: $API_KEY"
{- "architecture": "example",
- "auto_batch_config": {
- "enabled": true,
- "input_source": {
- "bucket": "example",
- "integration_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "integration_name": "churn-propensity-v3",
- "path": "/datasets/transactions"
}, - "no_new_files_behavior": "example",
- "schedule": {
- "active_between": { },
- "recurrence": { },
- "termination": { },
- "timezone": "UTC"
}
}, - "checkpoint": 1,
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "compile": false,
- "compile_mode": "example",
- "connectors": {
- "inputs": [
- { }
]
}, - "context_config": {
- "enabled": true,
- "lookback_window": "example",
- "max_len": 4,
- "min_context": 1,
- "mismatch_strategy": "example"
}, - "cortex_image": "registry.example.com/image:tag",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "email": "someone@example.com",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "datavolume_name": "shared-datasets",
- "datavolume_subpath": "transactions/2026-01",
- "desired_endpoint_port": 1,
- "embedding_quant": {
- "bits": 1,
- "enabled": true,
- "rounds": 1,
- "scheme": "example",
- "seed": 1
}, - "endpoint": {
- "external_host": "example",
- "listen_port": 1,
- "protocol": "example"
}, - "engine_scaling": {
- "backbone": {
- "max": 4,
- "min": 1
}, - "embedding": {
- "max": 4,
- "min": 1
}, - "fused": {
- "max": 4,
- "min": 1
}, - "max": 4,
- "min": 1
}, - "engine_yaml": { },
- "epoch": 1,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_type": "example",
- "inference_version": "1.0.0",
- "instances": 1,
- "job_state_reasons": { },
- "job_states": { },
- "last_deployed_at": "2026-01-15T10:30:00Z",
- "mode": "example",
- "model_dir": "/datasets/transactions",
- "model_path": "/datasets/transactions",
- "model_source": "example",
- "monitoring_settings": {
- "decision_thresholds": [
- { }
], - "model_drift": {
- "critical_ks_d": 0.5,
- "warn_ks_d": 0.5
}
}, - "scaling": {
- "cooldown_seconds": 1,
- "max": 4,
- "min": 1,
- "target_concurrency": 1
}, - "schedule": {
- "active_between": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "recurrence": {
- "by_week_day": [
- "example"
], - "frequency": "example",
- "interval": 1,
- "time_of_day": "example"
}, - "termination": {
- "count": 8,
- "mode": "example",
- "until": "example"
}, - "timezone": "UTC"
}, - "scheduled_batch": {
- "event_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "flags": {
- "eos_inference_mode": "every_token",
- "include_all_probs": false,
- "infer_every_event": false,
- "infer_target_date": "example",
- "logits_only": false,
- "omit_predictions_json": false,
- "save_logits": false,
- "use_context": false
}, - "pool": {
- "file_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "file_path": "/datasets/transactions",
- "reference_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
]
}, - "window": {
- "count": 8,
- "end": "2026-03-31T23:59:59Z",
- "mode": "example",
- "start": "2026-01-01T00:00:00Z",
- "unit": "example"
}
}, - "space": "example",
- "status": "PENDING",
- "status_reason": "Example message",
- "tag": "example",
- "topology": "example",
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z",
- "weight_load": "example"
}The URL and credentials a client needs to call the online endpoint.
| id required | string Inference server ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/online-server/connection" \ -H "x-api-key: $API_KEY"
{- "health_check": {
- "interval_seconds": 1,
- "path": "/datasets/transactions",
- "port": 1,
- "protocol": "example",
- "timeout_seconds": 1
}, - "http_endpoint": {
- "backend": "example",
- "external_host": "example",
- "name": "churn-propensity-v3",
- "node_port": 2,
- "protocol": "example",
- "service_dns": "example",
- "target_port": 1
}, - "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "job_name": "churn-propensity-v3",
- "leader_task": "example",
- "metrics_endpoint": {
- "backend": "example",
- "external_host": "example",
- "name": "churn-propensity-v3",
- "node_port": 2,
- "protocol": "example",
- "service_dns": "example",
- "target_port": 1
}, - "node_ip": "example",
- "node_name": "churn-propensity-v3"
}Per-role (embedding | backbone | server) replica counts and readiness, forwarded from the scaling groups.
| id required | string Inference server ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/online-server/replicas" \ -H "x-api-key: $API_KEY"
{ }Tear the online endpoint down and release its engine replicas.
| id required | string Inference server ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/online-server/stop" \ -H "x-api-key: $API_KEY"
{- "architecture": "example",
- "auto_batch_config": {
- "enabled": true,
- "input_source": {
- "bucket": "example",
- "integration_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "integration_name": "churn-propensity-v3",
- "path": "/datasets/transactions"
}, - "no_new_files_behavior": "example",
- "schedule": {
- "active_between": { },
- "recurrence": { },
- "termination": { },
- "timezone": "UTC"
}
}, - "checkpoint": 1,
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "compile": false,
- "compile_mode": "example",
- "connectors": {
- "inputs": [
- { }
]
}, - "context_config": {
- "enabled": true,
- "lookback_window": "example",
- "max_len": 4,
- "min_context": 1,
- "mismatch_strategy": "example"
}, - "cortex_image": "registry.example.com/image:tag",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "email": "someone@example.com",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "datavolume_name": "shared-datasets",
- "datavolume_subpath": "transactions/2026-01",
- "desired_endpoint_port": 1,
- "embedding_quant": {
- "bits": 1,
- "enabled": true,
- "rounds": 1,
- "scheme": "example",
- "seed": 1
}, - "endpoint": {
- "external_host": "example",
- "listen_port": 1,
- "protocol": "example"
}, - "engine_scaling": {
- "backbone": {
- "max": 4,
- "min": 1
}, - "embedding": {
- "max": 4,
- "min": 1
}, - "fused": {
- "max": 4,
- "min": 1
}, - "max": 4,
- "min": 1
}, - "engine_yaml": { },
- "epoch": 1,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_type": "example",
- "inference_version": "1.0.0",
- "instances": 1,
- "job_state_reasons": { },
- "job_states": { },
- "last_deployed_at": "2026-01-15T10:30:00Z",
- "mode": "example",
- "model_dir": "/datasets/transactions",
- "model_path": "/datasets/transactions",
- "model_source": "example",
- "monitoring_settings": {
- "decision_thresholds": [
- { }
], - "model_drift": {
- "critical_ks_d": 0.5,
- "warn_ks_d": 0.5
}
}, - "scaling": {
- "cooldown_seconds": 1,
- "max": 4,
- "min": 1,
- "target_concurrency": 1
}, - "schedule": {
- "active_between": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "recurrence": {
- "by_week_day": [
- "example"
], - "frequency": "example",
- "interval": 1,
- "time_of_day": "example"
}, - "termination": {
- "count": 8,
- "mode": "example",
- "until": "example"
}, - "timezone": "UTC"
}, - "scheduled_batch": {
- "event_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "flags": {
- "eos_inference_mode": "every_token",
- "include_all_probs": false,
- "infer_every_event": false,
- "infer_target_date": "example",
- "logits_only": false,
- "omit_predictions_json": false,
- "save_logits": false,
- "use_context": false
}, - "pool": {
- "file_connector_id": "conn_1a2b3c4d5e6f708192a3b4c5",
- "file_path": "/datasets/transactions",
- "reference_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
]
}, - "window": {
- "count": 8,
- "end": "2026-03-31T23:59:59Z",
- "mode": "example",
- "start": "2026-01-01T00:00:00Z",
- "unit": "example"
}
}, - "space": "example",
- "status": "PENDING",
- "status_reason": "Example message",
- "tag": "example",
- "topology": "example",
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z",
- "weight_load": "example"
}Run one inference against the live endpoint and return the raw response, for smoke-testing a deploy.
| id required | string Inference server ID |
Test inference payload
| body required | Array of integers |
| path required | string |
{- "body": [
- 0
], - "path": "string"
}{- "body": [
- 1
], - "body_text": "example",
- "elapsed_ms": 1,
- "status": 1,
- "truncated": false
}| id required | string Inference server ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/resume" \ -H "x-api-key: $API_KEY"
Destructive: wipes every cached context for the server.
| id required | string Inference server ID |
curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/context-store" \ -H "x-api-key: $API_KEY"
{ }| id required | string Inference server ID |
| limit | integer Max builds per page (default 50, max 100) |
| after | string Cursor: the last build id from the previous page |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/context-store/builds" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "build_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "datasets": [
- { }
], - "failed_clients": 1,
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "progress": { },
- "retried_from_build_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shards": [
- { }
], - "status": "PENDING",
- "stopped_at": "2026-01-15T10:30:00Z"
}
], - "has_more": false
}Spawns one embedding-cache build job per dataset to populate the server's context store.
| id required | string Inference server ID |
Build configuration
Array of objects (request.ContextStoreBuildDatasetItem) | |
Array of objects (request.ContextStoreBuildLocalDatasetItem) | |
| shards | integer [ 1 .. 64 ] Shards is how many data-parallel builder jobs to launch. Each shard owns a disjoint slice of the store's buckets (worker i of N via --bucket-shard i/N), so N builders write non-overlapping clients into the same store daemon. 0/omitted = 1 = the single-job build (unchanged). The store is shard-disjoint by client, so any N is safe; there is no power-of-two constraint. |
{- "datasets": [
- {
- "chunk_size": 0,
- "dataset_id": "string",
- "dataset_key": "string"
}
], - "datasets_local": [
- {
- "chunk_size": 0,
- "dataset_key": "string",
- "datavolume_name": "string",
- "dir": "string",
- "subpath": "string"
}
], - "shards": 1
}{- "build_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "datasets": [
- {
- "dataset_key": "transactions",
- "job_name": "churn-propensity-v3",
- "reason": "Example message",
- "state": "PENDING"
}
], - "failed_clients": 1,
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "progress": {
- "elapsed_seconds": 0.5,
- "eta_seconds": 0.5,
- "events_done": 1,
- "mem_limit_mb": 0.5,
- "mem_rss_mb": 0.5,
- "percent": 0.5,
- "phase": "example",
- "stalled": false,
- "unit": "example",
- "units_done": 1,
- "units_total": 1,
- "updated_at": "2026-01-15T10:30:00Z",
- "users_done": 1,
- "users_failed": 1,
- "users_per_second": 0.5
}, - "retried_from_build_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shards": [
- {
- "failed_clients": 1,
- "job_name": "churn-propensity-v3",
- "progress": { },
- "reason": "Example message",
- "shard_index": 1,
- "state": "PENDING"
}
], - "status": "PENDING",
- "stopped_at": "2026-01-15T10:30:00Z"
}Stops the build (deletes any of its neocore jobs still around) and removes its record. Clients already written to the store stay there — use the store delete to wipe them.
| id required | string Inference server ID |
| buildId required | string Build ID |
curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/context-store/builds/{buildId}" \ -H "x-api-key: $API_KEY"
Creates a NEW build that re-embeds only the clients the source build dead-lettered (skipped after backoff-retry), one shard job per source shard that had failures. The source build is left untouched.
| id required | string Inference server ID |
| buildId required | string Source build ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/context-store/builds/{buildId}/retry-failed-clients" \ -H "x-api-key: $API_KEY"
{- "build_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "datasets": [
- {
- "dataset_key": "transactions",
- "job_name": "churn-propensity-v3",
- "reason": "Example message",
- "state": "PENDING"
}
], - "failed_clients": 1,
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "progress": {
- "elapsed_seconds": 0.5,
- "eta_seconds": 0.5,
- "events_done": 1,
- "mem_limit_mb": 0.5,
- "mem_rss_mb": 0.5,
- "percent": 0.5,
- "phase": "example",
- "stalled": false,
- "unit": "example",
- "units_done": 1,
- "units_total": 1,
- "updated_at": "2026-01-15T10:30:00Z",
- "users_done": 1,
- "users_failed": 1,
- "users_per_second": 0.5
}, - "retried_from_build_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shards": [
- {
- "failed_clients": 1,
- "job_name": "churn-propensity-v3",
- "progress": { },
- "reason": "Example message",
- "shard_index": 1,
- "state": "PENDING"
}
], - "status": "PENDING",
- "stopped_at": "2026-01-15T10:30:00Z"
}Deletes the build's neocore job(s), so a running build stops embedding. The build record stays and lists as Canceled. Clients already written to the store stay there.
| id required | string Inference server ID |
| buildId required | string Build ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/context-store/builds/{buildId}/stop" \ -H "x-api-key: $API_KEY"
{- "build_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "datasets": [
- {
- "dataset_key": "transactions",
- "job_name": "churn-propensity-v3",
- "reason": "Example message",
- "state": "PENDING"
}
], - "failed_clients": 1,
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "progress": {
- "elapsed_seconds": 0.5,
- "eta_seconds": 0.5,
- "events_done": 1,
- "mem_limit_mb": 0.5,
- "mem_rss_mb": 0.5,
- "percent": 0.5,
- "phase": "example",
- "stalled": false,
- "unit": "example",
- "units_done": 1,
- "units_total": 1,
- "updated_at": "2026-01-15T10:30:00Z",
- "users_done": 1,
- "users_failed": 1,
- "users_per_second": 0.5
}, - "retried_from_build_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shards": [
- {
- "failed_clients": 1,
- "job_name": "churn-propensity-v3",
- "progress": { },
- "reason": "Example message",
- "shard_index": 1,
- "state": "PENDING"
}
], - "status": "PENDING",
- "stopped_at": "2026-01-15T10:30:00Z"
}Request/error rate, get/append p99 latency, hit rate and RocksDB size, compaction and stall history for the server's context-store daemon over a rolling window. Series without samples are empty arrays.
| id required | string Inference server ID |
| window | string Default: "1h" Window as a Go duration (e.g. 1h), capped at 168h |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/context-store/metrics" \ -H "x-api-key: $API_KEY"
{- "current": {
- "append_p99_ms": 0.5,
- "disk_bytes": 0.5,
- "error_rate": 0.5,
- "get_p99_ms": 0.5,
- "health_state": 0.5,
- "hit_rate": 0.5,
- "live_data_bytes": 0.5,
- "pending_compaction_bytes": 0.5,
- "queue_depth_max": 0.5,
- "request_rate": 0.5,
- "retrieved_per_sec": 0.5,
- "stored_per_sec": 0.5,
- "write_stopped": 0.5
}, - "series": {
- "append_p99_ms": [
- { }
], - "disk_bytes": [
- { }
], - "error_rate": [
- { }
], - "get_p99_ms": [
- { }
], - "health_state": [
- { }
], - "hit_rate": [
- { }
], - "live_data_bytes": [
- { }
], - "pending_compaction_bytes": [
- { }
], - "queue_depth_max": [
- { }
], - "request_rate": [
- { }
], - "retrieved_per_sec": [
- { }
], - "stored_per_sec": [
- { }
], - "write_stopped": [
- { }
]
}, - "step": "example",
- "window": "example"
}Proxies the context-store daemon's stats verbatim.
| id required | string Inference server ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/context-store/occupancy" \ -H "x-api-key: $API_KEY"
{ }Proxies the context-store daemon's user listing verbatim; the query string is forwarded as-is.
| id required | string Inference server ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/context-store/users" \ -H "x-api-key: $API_KEY"
{ }Proxies the context-store daemon's per-user context verbatim.
| id required | string Inference server ID |
| userId required | string User ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/context-store/users/{userId}" \ -H "x-api-key: $API_KEY"
{ }| spaceId required | string Space ID |
| id required | string Inference server ID |
| granularity | string Bucket granularity |
| start | string Range start (RFC3339) |
| end | string Range end (RFC3339) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/drift" \ -H "x-api-key: $API_KEY"
{- "baseline": { },
- "granularity": "example",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "targets": { }
}| spaceId required | string Space ID |
| id required | string Inference server ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/drift/baseline/report" \ -H "x-api-key: $API_KEY"
{- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "mode": "example",
- "run_id": "bif_1a2b3c4d5e6f708192a3b4c5",
- "run_output_dir": "/datasets/transactions",
- "status": "PENDING",
- "status_reason": "Example message",
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z"
}| spaceId required | string Space ID |
| id required | string Inference server ID |
| limit | integer Page size |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/drift/reports" \ -H "x-api-key: $API_KEY"
[- {
- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "mode": "example",
- "run_id": "bif_1a2b3c4d5e6f708192a3b4c5",
- "run_output_dir": "/datasets/transactions",
- "status": "PENDING",
- "status_reason": "Example message",
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z"
}
]| spaceId required | string Space ID |
| id required | string Inference server ID |
| runId required | string Batch inference run ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/drift/runs/{runId}/report" \ -H "x-api-key: $API_KEY"
{- "checkpoint_id": "che_1a2b3c4d5e6f708192a3b4c5",
- "created_at": "2026-01-15T10:30:00Z",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "mode": "example",
- "run_id": "bif_1a2b3c4d5e6f708192a3b4c5",
- "run_output_dir": "/datasets/transactions",
- "status": "PENDING",
- "status_reason": "Example message",
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "updated_at": "2026-01-15T10:30:00Z"
}| spaceId required | string Space ID |
| id required | string Inference server ID |
| runId required | string Batch inference run ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/drift/runs/{runId}/retry" \ -H "x-api-key: $API_KEY"
{- "error": "example"
}| spaceId required | string Space ID |
| id required | string Inference server ID |
| target required | string Target name |
| column | string Column filter |
| class | string Class filter |
| granularity | string Bucket granularity |
| start | string Range start (RFC3339) |
| end | string Range end (RFC3339) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/drift/targets/{target}" \ -H "x-api-key: $API_KEY"
{- "baseline": {
- "class": "example",
- "column": "event_ts",
- "created_at": "2026-01-15T10:30:00Z",
- "granularity": "example",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "label": "example",
- "metrics": {
- "distribution": { },
- "drift": { },
- "migration": { },
- "volume": { }
}, - "mode": "example",
- "n_clients": 1,
- "n_rows": 1,
- "partial": false,
- "period": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "report_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "ruler": {
- "bands": [
- { }
], - "class_selection": "example",
- "classes": [
- "example"
], - "n_classes": 1,
- "vocab_offset": 1
}, - "score_column": "event_ts",
- "target": "example",
- "target_type": "example"
}, - "class": "example",
- "column": "event_ts",
- "periods": [
- {
- "class": "example",
- "column": "event_ts",
- "created_at": "2026-01-15T10:30:00Z",
- "granularity": "example",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "label": "example",
- "metrics": { },
- "mode": "example",
- "n_clients": 1,
- "n_rows": 1,
- "partial": false,
- "period": { },
- "report_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "ruler": { },
- "score_column": "event_ts",
- "target": "example",
- "target_type": "example"
}
], - "target": "example"
}| spaceId required | string Space ID |
| id required | string Inference server ID |
| target required | string Target name |
| periodId required | string Drift period ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/drift/targets/{target}/periods/{periodId}" \ -H "x-api-key: $API_KEY"
{- "baseline_full": {
- "class": "example",
- "column": "event_ts",
- "created_at": "2026-01-15T10:30:00Z",
- "granularity": "example",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "label": "example",
- "metrics": {
- "distribution": { },
- "drift": { },
- "migration": { },
- "volume": { }
}, - "mode": "example",
- "n_clients": 1,
- "n_rows": 1,
- "partial": false,
- "period": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "report_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "ruler": {
- "bands": [
- { }
], - "class_selection": "example",
- "classes": [
- "example"
], - "n_classes": 1,
- "vocab_offset": 1
}, - "score_column": "event_ts",
- "target": "example",
- "target_type": "example"
}, - "profile_period": {
- "class": "example",
- "column": "event_ts",
- "created_at": "2026-01-15T10:30:00Z",
- "granularity": "example",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "label": "example",
- "metrics": {
- "distribution": { },
- "drift": { },
- "migration": { },
- "volume": { }
}, - "mode": "example",
- "n_clients": 1,
- "n_rows": 1,
- "partial": false,
- "period": {
- "end": "2026-03-31T23:59:59Z",
- "start": "2026-01-01T00:00:00Z"
}, - "report_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "ruler": {
- "bands": [
- { }
], - "class_selection": "example",
- "classes": [
- "example"
], - "n_classes": 1,
- "vocab_offset": 1
}, - "score_column": "event_ts",
- "target": "example",
- "target_type": "example"
}, - "target": "example"
}| id required | string Inference server ID |
| limit | integer Page size |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/inference-servers/{id}/stress-runs" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "config": { },
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "finished_at": "2026-01-15T10:30:00Z",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "report": { },
- "started_at": "2026-01-15T10:30:00Z",
- "status": "PENDING",
- "status_reason": "Example message"
}
], - "has_more": false
}| id required | string Inference server ID |
Stress run configuration
object (request.CreateStressRunBreaker) | |
| events_per_request | integer |
required | object |
required | Array of objects (request.CreateStressRunStage) non-empty |
| timeout_ms | integer |
| unique_field | string |
| warmup_s | integer |
{- "breaker": {
- "consecutive_bad_buckets": 0,
- "error_rate": 0
}, - "events_per_request": 0,
- "payload": {
- "property1": null,
- "property2": null
}, - "stages": [
- {
- "concurrency": 1,
- "duration_s": 1
}
], - "timeout_ms": 0,
- "unique_field": "string",
- "warmup_s": 0
}{- "config": { },
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "finished_at": "2026-01-15T10:30:00Z",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "report": { },
- "started_at": "2026-01-15T10:30:00Z",
- "status": "PENDING",
- "status_reason": "Example message"
}curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/stress-runs/{id}" \ -H "x-api-key: $API_KEY"
{- "config": { },
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "finished_at": "2026-01-15T10:30:00Z",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "report": { },
- "started_at": "2026-01-15T10:30:00Z",
- "status": "PENDING",
- "status_reason": "Example message"
}curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/stress-runs/{id}/cancel" \ -H "x-api-key: $API_KEY"
{- "config": { },
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": "example",
- "finished_at": "2026-01-15T10:30:00Z",
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "inference_server_id": "inf_1a2b3c4d5e6f708192a3b4c5",
- "report": { },
- "started_at": "2026-01-15T10:30:00Z",
- "status": "PENDING",
- "status_reason": "Example message"
}Best-effort tail of the stress job's logs; empty while the job runs healthy.
| id required | string Stress run ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/stress-runs/{id}/logs" \ -H "x-api-key: $API_KEY"
{ }Retrieve a paginated list of checkpoints grouped with their metrics for leaderboard display
| limit | integer Default: 10 Limit |
| after | string Cursor for pagination (checkpoint ID of last item, required with after_metric_value) |
| model_id | string Filter by model/checkpoint ID |
| benchmarks | Array of strings Filter by benchmark IDs (can be multiple) |
| trainings | Array of strings Filter by training IDs (can be multiple) |
| start_date | string Filter by start date (RFC3339 format, e.g., 2024-01-01T00:00:00Z) |
| end_date | string Filter by end date (RFC3339 format, e.g., 2024-12-31T23:59:59Z) |
| order_by_metric.metric_name | string Order by this metric name (requires dataset_name and target_name) |
| order_by_metric.dataset_name | string Dataset name for metric ordering (required when ordering by metric) |
| order_by_metric.target_name | string Target name for metric ordering (required when ordering by metric) |
| order_by_metric.after_metric_value | number Metric value of last item for cursor pagination (requires after param) |
| order_by_metric.direction | string Default: "desc" Order direction: asc or desc |
| name | string Filter by checkpoint name |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/leaderboards" \ -H "x-api-key: $API_KEY"
{- "data": [
- {
- "created_at": "2026-01-15T10:30:00Z",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "epoch": 1,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "metrics": [
- { }
], - "name": "churn-propensity-v3",
- "step": 1,
- "training_id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "training_name": "churn-propensity-v3"
}
], - "has_more": false
}| kind | string model_input or model_output |
| status | string draft, published or archived |
| name | string name substring filter |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/model-designs" \ -H "x-api-key: $API_KEY"
{- "data": [
- {
- "archived_at": "2026-01-15T10:30:00Z",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": { },
- "datasets": [
- { }
], - "description": "Scores the active customer base every morning.",
- "global_tokens": [
- { }
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "kind": "model_input",
- "metrics": { },
- "name": "churn-propensity-v3",
- "published_at": "2026-01-15T10:30:00Z",
- "status": "draft",
- "tasks": [
- { }
], - "time_ranges": { },
- "updated_at": "2026-01-15T10:30:00Z",
- "used_in_training": false
}
]
}Create a design model (input or output) with its content, in
Create body
Array of objects (model.ModelDesignDataset) | |
| description | string <= 300 characters |
Array of objects (model.ModelDesignColumnRef) | |
| kind required | string Enum: "model_input" "model_output" |
object (model.ModelDesignMetrics) | |
| name required | string <= 100 characters |
| publish | boolean |
Array of objects (model.ModelDesignTask) | |
object (model.ModelDesignTimeRanges) |
{- "datasets": [
- {
- "cross_net_sharing_group_size": 0,
- "exclude_columns": [
- "string"
], - "id": "string",
- "include_columns": [
- "string"
], - "shift": "string"
}
], - "description": "string",
- "global_tokens": [
- {
- "column": "string",
- "dataset_id": "string"
}
], - "kind": "model_input",
- "metrics": {
- "keys": [
- "string"
], - "primary": "string"
}, - "name": "string",
- "publish": true,
- "tasks": [
- {
- "active": true,
- "canvas": {
- "property1": null,
- "property2": null
}, - "facts": [
- {
- "column": "string",
- "dataset_id": "string"
}
], - "id": "string",
- "name": "string",
- "targets": [
- {
- "column": "string",
- "dataset_id": "string",
- "primary": true
}
]
}
], - "time_ranges": {
- "test": [
- "string"
], - "train": [
- "string"
], - "val": [
- "string"
]
}
}{- "archived_at": "2026-01-15T10:30:00Z",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "datasets": [
- {
- "cross_net_sharing_group_size": 1,
- "exclude_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "include_columns": [
- "event_ts",
- "customer_id"
], - "shift": "example"
}
], - "description": "Scores the active customer base every morning.",
- "global_tokens": [
- {
- "column": "event_ts",
- "dataset_id": "dpp_1a2b3c4d5e6f708192a3b4c5"
}
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "kind": "model_input",
- "metrics": {
- "keys": [
- "REDACTED"
], - "primary": "example"
}, - "name": "churn-propensity-v3",
- "published_at": "2026-01-15T10:30:00Z",
- "status": "draft",
- "tasks": [
- {
- "active": true,
- "canvas": { },
- "facts": [
- { }
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "targets": [
- { }
]
}
], - "time_ranges": {
- "test": [
- "2026-01-01",
- "2026-03-31"
], - "train": [
- "2026-01-01",
- "2026-03-31"
], - "val": [
- "2026-01-01",
- "2026-03-31"
]
}, - "updated_at": "2026-01-15T10:30:00Z",
- "used_in_training": false
}Soft-deletes the design (stamps deleted_at). The row is kept
| id required | string Design model ID |
curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/model-designs/{id}" \ -H "x-api-key: $API_KEY"
{- "error": "example"
}curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/model-designs/{id}" \ -H "x-api-key: $API_KEY"
{- "archived_at": "2026-01-15T10:30:00Z",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "datasets": [
- {
- "cross_net_sharing_group_size": 1,
- "exclude_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "include_columns": [
- "event_ts",
- "customer_id"
], - "shift": "example"
}
], - "description": "Scores the active customer base every morning.",
- "global_tokens": [
- {
- "column": "event_ts",
- "dataset_id": "dpp_1a2b3c4d5e6f708192a3b4c5"
}
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "kind": "model_input",
- "metrics": {
- "keys": [
- "REDACTED"
], - "primary": "example"
}, - "name": "churn-propensity-v3",
- "published_at": "2026-01-15T10:30:00Z",
- "status": "draft",
- "tasks": [
- {
- "active": true,
- "canvas": { },
- "facts": [
- { }
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "targets": [
- { }
]
}
], - "time_ranges": {
- "test": [
- "2026-01-01",
- "2026-03-31"
], - "train": [
- "2026-01-01",
- "2026-03-31"
], - "val": [
- "2026-01-01",
- "2026-03-31"
]
}, - "updated_at": "2026-01-15T10:30:00Z",
- "used_in_training": false
}Marks the design as archived. Archived designs remain in the
| id required | string Design model ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/model-designs/{id}/archive" \ -H "x-api-key: $API_KEY"
{- "archived_at": "2026-01-15T10:30:00Z",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "datasets": [
- {
- "cross_net_sharing_group_size": 1,
- "exclude_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "include_columns": [
- "event_ts",
- "customer_id"
], - "shift": "example"
}
], - "description": "Scores the active customer base every morning.",
- "global_tokens": [
- {
- "column": "event_ts",
- "dataset_id": "dpp_1a2b3c4d5e6f708192a3b4c5"
}
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "kind": "model_input",
- "metrics": {
- "keys": [
- "REDACTED"
], - "primary": "example"
}, - "name": "churn-propensity-v3",
- "published_at": "2026-01-15T10:30:00Z",
- "status": "draft",
- "tasks": [
- {
- "active": true,
- "canvas": { },
- "facts": [
- { }
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "targets": [
- { }
]
}
], - "time_ranges": {
- "test": [
- "2026-01-01",
- "2026-03-31"
], - "train": [
- "2026-01-01",
- "2026-03-31"
], - "val": [
- "2026-01-01",
- "2026-03-31"
]
}, - "updated_at": "2026-01-15T10:30:00Z",
- "used_in_training": false
}Stores the content and flips a draft design to published,
| id required | string Design model ID |
Design content
Array of objects (model.ModelDesignDataset) | |
Array of objects (model.ModelDesignColumnRef) | |
object (model.ModelDesignMetrics) | |
Array of objects (model.ModelDesignTask) | |
object (model.ModelDesignTimeRanges) |
{- "datasets": [
- {
- "cross_net_sharing_group_size": 0,
- "exclude_columns": [
- "string"
], - "id": "string",
- "include_columns": [
- "string"
], - "shift": "string"
}
], - "global_tokens": [
- {
- "column": "string",
- "dataset_id": "string"
}
], - "metrics": {
- "keys": [
- "string"
], - "primary": "string"
}, - "tasks": [
- {
- "active": true,
- "canvas": {
- "property1": null,
- "property2": null
}, - "facts": [
- {
- "column": "string",
- "dataset_id": "string"
}
], - "id": "string",
- "name": "string",
- "targets": [
- {
- "column": "string",
- "dataset_id": "string",
- "primary": true
}
]
}
], - "time_ranges": {
- "test": [
- "string"
], - "train": [
- "string"
], - "val": [
- "string"
]
}
}{- "archived_at": "2026-01-15T10:30:00Z",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "datasets": [
- {
- "cross_net_sharing_group_size": 1,
- "exclude_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "include_columns": [
- "event_ts",
- "customer_id"
], - "shift": "example"
}
], - "description": "Scores the active customer base every morning.",
- "global_tokens": [
- {
- "column": "event_ts",
- "dataset_id": "dpp_1a2b3c4d5e6f708192a3b4c5"
}
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "kind": "model_input",
- "metrics": {
- "keys": [
- "REDACTED"
], - "primary": "example"
}, - "name": "churn-propensity-v3",
- "published_at": "2026-01-15T10:30:00Z",
- "status": "draft",
- "tasks": [
- {
- "active": true,
- "canvas": { },
- "facts": [
- { }
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "targets": [
- { }
]
}
], - "time_ranges": {
- "test": [
- "2026-01-01",
- "2026-03-31"
], - "train": [
- "2026-01-01",
- "2026-03-31"
], - "val": [
- "2026-01-01",
- "2026-03-31"
]
}, - "updated_at": "2026-01-15T10:30:00Z",
- "used_in_training": false
}Clears the archived flag. The design comes back with the
| id required | string Design model ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/model-designs/{id}/unarchive" \ -H "x-api-key: $API_KEY"
{- "archived_at": "2026-01-15T10:30:00Z",
- "created_at": "2026-01-15T10:30:00Z",
- "created_by": {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3"
}, - "datasets": [
- {
- "cross_net_sharing_group_size": 1,
- "exclude_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "include_columns": [
- "event_ts",
- "customer_id"
], - "shift": "example"
}
], - "description": "Scores the active customer base every morning.",
- "global_tokens": [
- {
- "column": "event_ts",
- "dataset_id": "dpp_1a2b3c4d5e6f708192a3b4c5"
}
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "kind": "model_input",
- "metrics": {
- "keys": [
- "REDACTED"
], - "primary": "example"
}, - "name": "churn-propensity-v3",
- "published_at": "2026-01-15T10:30:00Z",
- "status": "draft",
- "tasks": [
- {
- "active": true,
- "canvas": { },
- "facts": [
- { }
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "targets": [
- { }
]
}
], - "time_ranges": {
- "test": [
- "2026-01-01",
- "2026-03-31"
], - "train": [
- "2026-01-01",
- "2026-03-31"
], - "val": [
- "2026-01-01",
- "2026-03-31"
]
}, - "updated_at": "2026-01-15T10:30:00Z",
- "used_in_training": false
}curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/model-endpoints" \ -H "x-api-key: $API_KEY"
[- {
- "context_pool": {
- "chunk_tokens": 1,
- "enabled": true,
- "local_cpu_gb": 0.5,
- "transport": "example"
}, - "created_at": "2026-01-15T10:30:00Z",
- "deployed_at": "2026-01-15T10:30:00Z",
- "gpus_per_node": 2,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "max_context_tokens": 4,
- "name": "churn-propensity-v3",
- "nodes": 2,
- "pipeline_parallel": 1,
- "profile_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "role_scaling": { },
- "roles": [
- { }
], - "scaling": {
- "cooldown_seconds": 1,
- "max": 4,
- "min": 1,
- "target": 0.5
}, - "served_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "served_model_name": "churn-propensity",
- "space": "example",
- "status": "PENDING",
- "status_reason": "Example message",
- "tensor_parallel": 1,
- "topology": "example",
- "total_gpus": 8,
- "weights_format": "example"
}
]Deploys one configuration (weights format + profile) of a cataloged model. The chosen configuration is RE-VALIDATED against current cluster capacity before anything is created, so a plan that has gone stale is refused with 409 rather than deployed into a queue.
| spaceId required | string Space ID |
Endpoint configuration
| kv_offload | string KVOffload is how far the cache travels: off, offloading, lmcache, mooncake. StoreTopology applies only to the modes that share a pool, and says who owns its memory. |
| max_context_tokens | integer MaxContextTokens is the advertised context window. Optional (the model's own maximum applies), and not cosmetic: it shapes the cache reservation, so raising it can make an otherwise-deployable configuration stop fitting. |
| name required | string Name is the operator's label, unique within the space. |
| port | integer Port fixes the client-facing port; 0 lets neocore allocate one. A fixed port is reserved before any GPU is claimed, so an unavailable one fails the deploy instead of silently landing somewhere else. |
| profile_id required | string |
object RoleScaling sizes the two phases of a prefill/decode deploy on their own, keyed "prefill" and "decode": both or neither, and only with that strategy. Absent, every role takes Scaling, as before. Given, Scaling bounds the router in front of them. Phases sized alike still run as units of one prefill and one decode where a pair fits a node; phases sized apart cannot be cut into units, so they run as fleets and the KV crosses the network, which needs a fast fabric. Scale-to-zero is the whole endpoint's: scaling.min and both phases' min are 0, or none is. | |
object (request.ModelEndpointScalingRequest) | |
| served_model_id | string ServedModelID or ServedModelName identifies the catalog entry; one is required. |
| served_model_name | string |
| shared_cache | boolean SharedCache overrides whether the endpoint runs a shared cross-machine KV pool. Left unset, the platform follows the machine boundary: a fleet that can place replicas on different machines (max > 1) pools its KV so scaling out shares the prefix cache instead of siloing it. Set false to force replica-local caching (economy, or a model with a known store gap); set true to demand it (refused if the model does not support the store). A pointer so "unset" and "false" are different instructions. |
| spec_decoding | boolean SpecDecoding requests the checkpoint's fused draft module. Refused when the chosen variant ships none, because the engine will not start when told to speculate with weights that cannot. |
| store_topology | string |
| strategy | string Strategy is the parallelism family. Must be one the model declares — and one its chosen variant does not exclude, since a fused release can carry kernels its siblings lack. |
| variant_id | string VariantID names the CHECKPOINT to serve. A weights format cannot identify one: two checkpoints of a model can share a precision and differ in release, publisher and draft module. WeightsFormat above stays for callers that predate variants and resolves to the model's only checkpoint at that precision. |
| weights_format required | string WeightsFormat and ProfileID are the picked cell. Both are required because a configuration is the pair — a format without a parallelism is not deployable, and defaulting either one would deploy something the operator did not choose. |
| weights_secret_name | string WeightsSecretName is the external secret that unlocks gated weights. Required only when the chosen variant is gated, and only the NAME travels — the credential itself is resolved on the node and never reaches the platform. |
{- "kv_offload": "string",
- "max_context_tokens": 0,
- "name": "string",
- "port": 0,
- "profile_id": "string",
- "role_scaling": {
- "property1": {
- "cooldown_seconds": 0,
- "max": 0,
- "min": 0,
- "target": 0
}, - "property2": {
- "cooldown_seconds": 0,
- "max": 0,
- "min": 0,
- "target": 0
}
}, - "scaling": {
- "cooldown_seconds": 0,
- "max": 0,
- "min": 0,
- "target": 0
}, - "served_model_id": "string",
- "served_model_name": "string",
- "shared_cache": true,
- "spec_decoding": true,
- "store_topology": "string",
- "strategy": "string",
- "variant_id": "string",
- "weights_format": "string",
- "weights_secret_name": "string"
}{- "context_pool": {
- "chunk_tokens": 1,
- "enabled": true,
- "local_cpu_gb": 0.5,
- "transport": "example"
}, - "created_at": "2026-01-15T10:30:00Z",
- "deployed_at": "2026-01-15T10:30:00Z",
- "gpus_per_node": 2,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "max_context_tokens": 4,
- "name": "churn-propensity-v3",
- "nodes": 2,
- "pipeline_parallel": 1,
- "profile_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "role_scaling": { },
- "roles": [
- {
- "current": 1,
- "desired": 1,
- "ready": 1,
- "reason": "Example message",
- "role": "example"
}
], - "scaling": {
- "cooldown_seconds": 1,
- "max": 4,
- "min": 1,
- "target": 0.5
}, - "served_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "served_model_name": "churn-propensity",
- "space": "example",
- "status": "PENDING",
- "status_reason": "Example message",
- "tensor_parallel": 1,
- "topology": "example",
- "total_gpus": 8,
- "weights_format": "example"
}Lists the staged weight sets and their progress. A deploy that is waiting on weights is answered here: a several-hundred-gigabyte fetch takes a long time, and "preparing, 40 GB so far" is a very different answer from an endpoint that will not start.
| spaceId required | string Space ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/model-endpoints/weight-stages" \ -H "x-api-key: $API_KEY"
[- {
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "model_name": "churn-propensity",
- "size_gb": 0.5,
- "staged_at": "2026-01-15T10:30:00Z",
- "status": "PENDING",
- "status_reason": "Example message",
- "weights_format": "example"
}
]Tears down the serving fleet and the endpoint address, then removes the record. Teardown is best-effort per resource: a neocore failure is logged and the record is still removed, because an endpoint nobody can delete through the API is worse than a resource to clean up.
| spaceId required | string Space ID |
| id required | string Model endpoint ID |
curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/model-endpoints/{id}" \ -H "x-api-key: $API_KEY"
{ }| spaceId required | string Space ID |
| id required | string Model endpoint ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/model-endpoints/{id}" \ -H "x-api-key: $API_KEY"
{- "context_pool": {
- "chunk_tokens": 1,
- "enabled": true,
- "local_cpu_gb": 0.5,
- "transport": "example"
}, - "created_at": "2026-01-15T10:30:00Z",
- "deployed_at": "2026-01-15T10:30:00Z",
- "gpus_per_node": 2,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "max_context_tokens": 4,
- "name": "churn-propensity-v3",
- "nodes": 2,
- "pipeline_parallel": 1,
- "profile_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "role_scaling": { },
- "roles": [
- {
- "current": 1,
- "desired": 1,
- "ready": 1,
- "reason": "Example message",
- "role": "example"
}
], - "scaling": {
- "cooldown_seconds": 1,
- "max": 4,
- "min": 1,
- "target": 0.5
}, - "served_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "served_model_name": "churn-propensity",
- "space": "example",
- "status": "PENDING",
- "status_reason": "Example message",
- "tensor_parallel": 1,
- "topology": "example",
- "total_gpus": 8,
- "weights_format": "example"
}| spaceId required | string Space ID |
| id required | string Model endpoint ID |
| window | string Lookback window (e.g. 15m, 1h) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/model-endpoints/{id}/metrics" \ -H "x-api-key: $API_KEY"
{- "e2e_avg_ms": 0.5,
- "generation_tokens_per_sec": 0.5,
- "kv_cache_usage": 0.5,
- "kv_capacity_derived": false,
- "kv_capacity_gb": 0.5,
- "kv_transfer": {
- "bytes_per_sec": 0.5,
- "expired_requests": 0.5,
- "failed_notifications": 0.5,
- "failed_transfers": 0.5,
- "series": {
- "bytes_per_sec": [
- { }
], - "expired_requests": [
- { }
], - "failed_notifications": [
- { }
], - "failed_transfers": [
- { }
], - "transfer_avg_ms": [
- { }
], - "transfers_per_sec": [
- { }
]
}, - "transfer_avg_ms": 0.5,
- "transfers_per_sec": 0.5
}, - "kv_used_gb": 0.5,
- "lookback_seconds": 1,
- "now_seconds": 1,
- "preemptions_per_sec": 0.5,
- "prefix_hit_rate": 0.5,
- "prompt_tokens_per_sec": 0.5,
- "queue_wait_avg_ms": 0.5,
- "replicas": [
- {
- "index": 1,
- "job": "example",
- "now": { },
- "replica": "example",
- "reporting": false,
- "role": "example",
- "series": { }
}
], - "reporting_replicas": 1,
- "requests_per_sec": 0.5,
- "requests_running": 0.5,
- "requests_started_per_sec": 0.5,
- "requests_waiting": 0.5,
- "roles": [
- {
- "members": 1,
- "now": { },
- "reporting": 1,
- "role": "example",
- "series": { }
}
], - "series": {
- "e2e_avg_ms": [
- { }
], - "generation_tokens_per_sec": [
- { }
], - "kv_cache_usage": [
- { }
], - "preemptions_per_sec": [
- { }
], - "prefix_hit_rate": [
- { }
], - "prompt_tokens_per_sec": [
- { }
], - "queue_wait_avg_ms": [
- { }
], - "reporting_replicas": [
- { }
], - "requests_per_sec": [
- { }
], - "requests_running": [
- { }
], - "requests_started_per_sec": [
- { }
], - "requests_waiting": [
- { }
], - "shared_hit_rate": [
- { }
], - "tpot_avg_ms": [
- { }
], - "ttft_avg_ms": [
- { }
]
}, - "shared_hit_rate": 0.5,
- "step_seconds": 1,
- "topology": "example",
- "tpot_avg_ms": 0.5,
- "ttft_avg_ms": 0.5,
- "window_seconds": 1
}Live view of the endpoint's shared cross-machine KV pool: how many replicas contribute to it and how big it therefore is, plus best-effort hit rate, cache occupancy and throughput scraped from the serving replicas. Returns enabled=false for an endpoint that has no pool. The optional window (e.g. 30m, 6h) sets the range of the returned sparklines.
| spaceId required | string Space ID |
| id required | string Model endpoint ID |
| window | string Time window, e.g. 30m or 6h (default 30m) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/model-endpoints/{id}/pool/metrics" \ -H "x-api-key: $API_KEY"
{- "enabled": true,
- "hit_rate": 0.5,
- "kv_cache_usage": 0.5,
- "pool_capacity_gb": 0.5,
- "replicas": 1,
- "requests_running": 0.5,
- "requests_waiting": 0.5,
- "segment_gb_per_replica": 0.5,
- "series": {
- "hit_rate": [
- { }
], - "kv_cache_usage": [
- { }
], - "requests_running": [
- { }
], - "tokens_per_sec": [
- { }
]
}, - "tokens_per_sec": 0.5,
- "tokens_saved_per_sec": 0.5,
- "transport": "example",
- "window_seconds": 1
}Change how many replicas the endpoint holds. Converges in place: the groups are rewritten and the reconciler appends or drains members, so running replicas are not torn down. Shape (parallelism, GPUs, nodes, image) is not changeable here -- that is a redeploy.
| spaceId required | string Space ID |
| id required | string Model endpoint ID |
| role | string Resize only this phase of a split sized per phase (prefill or decode); empty resizes the endpoint's own bounds -- every role without bounds of its own |
New fleet bounds
| cooldown_seconds | integer CooldownSeconds paces repeated scale decisions; 0 takes the platform default, which is sized to how long a replica actually takes to become ready. |
| max | integer |
| min | integer |
| target | number Target is the saturation level to hold the fleet at; 0 takes the platform default. |
{- "cooldown_seconds": 0,
- "max": 0,
- "min": 0,
- "target": 0
}{- "context_pool": {
- "chunk_tokens": 1,
- "enabled": true,
- "local_cpu_gb": 0.5,
- "transport": "example"
}, - "created_at": "2026-01-15T10:30:00Z",
- "deployed_at": "2026-01-15T10:30:00Z",
- "gpus_per_node": 2,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "max_context_tokens": 4,
- "name": "churn-propensity-v3",
- "nodes": 2,
- "pipeline_parallel": 1,
- "profile_id": "dp_1a2b3c4d5e6f708192a3b4c5",
- "role_scaling": { },
- "roles": [
- {
- "current": 1,
- "desired": 1,
- "ready": 1,
- "reason": "Example message",
- "role": "example"
}
], - "scaling": {
- "cooldown_seconds": 1,
- "max": 4,
- "min": 1,
- "target": 0.5
}, - "served_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "served_model_name": "churn-propensity",
- "space": "example",
- "status": "PENDING",
- "status_reason": "Example message",
- "tensor_parallel": 1,
- "topology": "example",
- "total_gpus": 8,
- "weights_format": "example"
}Forwards an OpenAI-compatible request (chat completions, models, ...) to the endpoint, streaming the response through. Authentication and authorisation are the platform's; the request body and the response are passed through untouched.
| spaceId required | string Space ID |
| id required | string Model endpoint ID |
| upstream required | string Upstream path, e.g. /chat/completions |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/model-endpoints/{id}/v1/{upstream}" \ -H "x-api-key: $API_KEY"
Lists the served-model catalog with, per model, whether it can be deployed on this space's cluster right now. A model that cannot be served is returned WITH its reason rather than omitted.
| spaceId required | string Space ID |
| family | string Narrow to one family (deepseek, qwen, glm, gemma, nemotron) |
| include_disabled | boolean Include entries an operator turned off |
| max_context_tokens | integer Longest conversation to assume when deciding what fits; defaults to each model's own maximum |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/served-models" \ -H "x-api-key: $API_KEY"
{- "items": [
- {
- "active_params_b": 0.5,
- "autoregressive": false,
- "availability": "example",
- "capabilities": [
- "example"
], - "context_pool_supported": false,
- "display_name": "Churn propensity",
- "family": "example",
- "hybrid_kv_cache": false,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "image": "registry.example.com/image:tag",
- "max_context": 4,
- "modality": "example",
- "name": "churn-propensity",
- "params_b": 0.5,
- "profiles": [
- { }
], - "provenance": "example",
- "reason": "Example message",
- "reasoning": false,
- "smallest_viable": { },
- "strategies": [
- "example"
], - "tool_calling": false,
- "variants": [
- { }
]
}
], - "observed_at": "2026-01-15T10:30:00Z"
}Adds one servable model to this organisation's catalog. The built-in catalog is a RECOMMENDATION, off unless the deployment enables it — this is how a deployment says what it actually serves.
| spaceId required | string Space ID |
Model
| active_params_b | number |
| autoregressive | boolean Autoregressive é ponteiro para distinguir "não marcado" de "marcado como falso": o default é TRUE (quase todo modelo o é), e um bool simples faria o formulário que esquece o campo prometer que um difusor não faz streaming. |
| capabilities | Array of strings |
| context_pool_supported | boolean |
| data_parallel | integer |
| display_name required | string <= 120 characters |
object | |
object | |
| expert_parallel | boolean |
Array of objects (request.CreateServedModelProfileRequest) <= 8 items ExtraProfiles são as formas de rodar além da principal. Cada uma é completa -- nada é herdado dos campos planos --, porque herança obrigaria a declarar como REMOVER uma flag da principal, e é exatamente a flag de uma forma que não vale na outra que motiva este campo. | |
| family required | string <= 60 characters |
| format required | string Enum: "bf16" "fp16" "fp8" "nvfp4" "mxfp4" "int8" "int4" "mixed" |
| gpus_per_node required | integer [ 1 .. 64 ] A configuração de execução -- o formato que o deploy vai usar. |
| hidden_layers | integer |
| hybrid_kv_cache | boolean |
| image | string <= 300 characters Image é uma imagem de container |
| kv_cache_dtype | string |
| max_context | integer |
| min_runtime_version | string Exigências da ARQUITETURA, não preferências: sem o modo de tokenizer certo um checkpoint sem chat template carrega bem e falha toda requisição de chat, e um parser ausente faz o chip de capacidade prometer o que não se cumpre. |
| name required | string <= 120 characters Identidade. |
| node_fraction | number |
| nodes required | integer [ 1 .. 16 ] |
| params_b required | number Tamanho. |
| pipeline_parallel | integer |
| reasoning_parser | string |
| ref required | string <= 300 characters |
| size_gb | number |
| tensor_parallel required | integer [ 1 .. 64 ] |
| tokenizer_mode | string |
| tool_call_parser | string |
| trust_remote_code | boolean |
| weights_source | string Enum: "hub" "path" "hub_cache" Onde estão os pesos, e em que precisão.
Lista em vez de bloco indentado de propósito: indentação vira code block em markdown, e a referência publicada renderiza esta descrição. |
{- "active_params_b": 0,
- "autoregressive": true,
- "capabilities": [
- "string"
], - "context_pool_supported": true,
- "data_parallel": 0,
- "display_name": "string",
- "engine_args": {
- "property1": "string",
- "property2": "string"
}, - "env": {
- "property1": "string",
- "property2": "string"
}, - "expert_parallel": true,
- "extra_profiles": [
- {
- "data_parallel": 0,
- "decode": {
- "engine_args": {
- "property1": "string",
- "property2": "string"
}, - "env": {
- "property1": "string",
- "property2": "string"
}
}, - "engine_args": {
- "property1": "string",
- "property2": "string"
}, - "env": {
- "property1": "string",
- "property2": "string"
}, - "expert_parallel": true,
- "gpus_per_node": 0,
- "id": "string",
- "kv_cache_dtype": "string",
- "node_fraction": 0,
- "nodes": 0,
- "pipeline_parallel": 0,
- "prefill": {
- "engine_args": {
- "property1": "string",
- "property2": "string"
}, - "env": {
- "property1": "string",
- "property2": "string"
}
}, - "split": true,
- "tensor_parallel": 0
}
], - "family": "string",
- "format": "bf16",
- "gpus_per_node": 1,
- "hidden_layers": 0,
- "hybrid_kv_cache": true,
- "image": "string",
- "kv_cache_dtype": "string",
- "max_context": 0,
- "min_runtime_version": "string",
- "name": "string",
- "node_fraction": 0,
- "nodes": 1,
- "params_b": 0,
- "pipeline_parallel": 0,
- "reasoning_parser": "string",
- "ref": "string",
- "size_gb": 0,
- "tensor_parallel": 1,
- "tokenizer_mode": "string",
- "tool_call_parser": "string",
- "trust_remote_code": true,
- "weights_source": "hub"
}{- "active_params_b": 0.5,
- "autoregressive": false,
- "capabilities": [
- "example"
], - "context_pool_supported": false,
- "createdAt": "example",
- "display_name": "Churn propensity",
- "enabled": true,
- "family": "example",
- "hidden_layers": 1,
- "hybrid_kv_cache": false,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "image": "registry.example.com/image:tag",
- "image_key": "REDACTED",
- "internalID": "obj_1a2b3c4d5e6f708192a3b4c5",
- "kv_bytes_per_token": 0.5,
- "max_context": 4,
- "min_runtime_version": "1.0.0",
- "modality": "text",
- "name": "churn-propensity",
- "params_b": 0.5,
- "profiles": [
- {
- "data_parallel": 1,
- "decode": { },
- "engine_args": { },
- "env": { },
- "expert_parallel": false,
- "formats": [
- { }
], - "gpus_per_node": 2,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "kv_cache_dtype": "example",
- "node_fraction": 0.5,
- "nodes": 2,
- "pipeline_parallel": 1,
- "portable": false,
- "prefill": { },
- "requires": { },
- "split": false,
- "tensor_parallel": 1
}
], - "reasoning_parser": "Example message",
- "runtime": "vllm",
- "source": "builtin",
- "strategies": [
- "tensor_parallel"
], - "tokenizer_mode": "REDACTED",
- "tool_call_parser": "example",
- "trust_remote_code": false,
- "updatedAt": "example",
- "variants": [
- {
- "description": "Scores the active customer base every morning.",
- "draft_method": "example",
- "draft_ref": "example",
- "draft_tokens": 1,
- "format": "bf16",
- "gated": false,
- "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "label": "example",
- "min_runtime": "example",
- "ref": "example",
- "size_gb": 0.5,
- "source": "hub",
- "strategies": [
- { }
]
}
]
}Removes a declared model. A BUILT-IN recommendation is hidden instead of removed — the seed re-inserts what is missing at every boot, so a disabled row is what survives that; the response says which happened. Refused while any endpoint still serves the model.
| spaceId required | string Space ID |
| servedModelId required | string Served model ID |
curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/served-models/{servedModelId}" \ -H "x-api-key: $API_KEY"
{- "message": "Example message",
- "outcome": "deleted"
}Retrieve a list of training jobs with cursor pagination and optional filters
| limit | integer Default: 10 Page size |
| after | string Cursor: last training ID from the previous page |
| kind | string Filter by training kind |
| data_model_id | string Filter by data model ID |
| status | string Filter by job status |
| name | string Filter by training name (case-insensitive substring) |
| start_date | string Lower bound for created_at (RFC3339 or RFC3339Nano) |
| end_date | string Upper bound for created_at (RFC3339 or RFC3339Nano) |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/trainings" \ -H "x-api-key: $API_KEY"
{- "count": 8,
- "data": [
- {
- "architecture": "example",
- "architecture_id": "arc_1a2b3c4d5e6f708192a3b4c5",
- "base_checkpoint": "example",
- "config": "example",
- "config_snapshot": { },
- "created_at": "2026-01-15T10:30:00Z",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "description": "Scores the active customer base every morning.",
- "filter_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "gpu_count": 8,
- "id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "kind": "PRETRAIN",
- "model_input_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "model_output_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "recipe_preset": "example",
- "schedule": { },
- "space": "example",
- "status": "PENDING",
- "target_datasets": [
- { }
], - "time_ranges": { },
- "training_datasets": [
- { }
], - "updated_at": "2026-01-15T10:30:00Z"
}
], - "has_more": false
}Create a new training job
Training creation request
object | |
| architecture_id required | string |
| base_checkpoint | string |
| data_model_id required | string |
| description | string |
| model_input_id | string Design-driven training: when set, the service resolves TrainingDatasets / TargetDatasets and TimeRanges from the referenced Model Design's snapshot, so the client doesn't have to duplicate that mapping. |
| model_output_id | string |
| name required | string |
| recipe_preset required | string |
required | object (request.RequestedResources) |
object Schedule, when set with a start_at, defers the training: it is persisted as Scheduled and dispatched by the reconciler instead of immediately. | |
Array of objects (model.TargetDataset) | |
required | object (model.TimeRanges) |
Array of objects (model.TrainingDataset) |
{- "advanced_fields": {
- "property1": null,
- "property2": null
}, - "architecture_id": "string",
- "base_checkpoint": "string",
- "data_model_id": "string",
- "description": "string",
- "model_input_id": "string",
- "model_output_id": "string",
- "name": "string",
- "recipe_preset": "string",
- "requested_resources": {
- "cpu": "string",
- "gpu": {
- "count": 0,
- "per_node": 0
}, - "memory": "string",
- "min_nodes": 0
}, - "schedule": {
- "start_at": "string",
- "timezone": "string"
}, - "target_datasets": [
- {
- "columns": [
- "string"
], - "dir": "string",
- "excluded_columns": [
- "string"
], - "id": "string",
- "shift": "string"
}
], - "time_ranges": {
- "test": [
- "string"
], - "train": [
- "string"
], - "val": [
- "string"
]
}, - "training_datasets": [
- {
- "columns": [
- "string"
], - "cross_net_sharing_group_size": 0,
- "dir": "string",
- "excluded_columns": [
- "string"
], - "id": "string",
- "shift": "string"
}
]
}{- "architecture": "example",
- "architecture_id": "arc_1a2b3c4d5e6f708192a3b4c5",
- "base_checkpoint": "example",
- "config": "example",
- "config_snapshot": { },
- "created_at": "2026-01-15T10:30:00Z",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "description": "Scores the active customer base every morning.",
- "filter_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "gpu_count": 8,
- "id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "kind": "PRETRAIN",
- "model_input_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "model_output_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "recipe_preset": "example",
- "schedule": {
- "start_at": "2026-01-15T10:30:00Z",
- "timezone": "UTC"
}, - "space": "example",
- "status": "PENDING",
- "target_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "time_ranges": {
- "test": [
- "2026-01-01",
- "2026-03-31"
], - "train": [
- "2026-01-01",
- "2026-03-31"
], - "val": [
- "2026-01-01",
- "2026-03-31"
]
}, - "training_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "cross_net_sharing_group_size": 1,
- "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "updated_at": "2026-01-15T10:30:00Z"
}curl -X DELETE "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/trainings/{id}" \ -H "x-api-key: $API_KEY"
{- "id": "obj_1a2b3c4d5e6f708192a3b4c5"
}curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/trainings/{id}" \ -H "x-api-key: $API_KEY"
{- "architecture": "example",
- "architecture_id": "arc_1a2b3c4d5e6f708192a3b4c5",
- "base_checkpoint": "example",
- "config": "example",
- "config_snapshot": { },
- "created_at": "2026-01-15T10:30:00Z",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "description": "Scores the active customer base every morning.",
- "filter_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "gpu_count": 8,
- "id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "kind": "PRETRAIN",
- "model_input_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "model_output_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "recipe_preset": "example",
- "schedule": {
- "start_at": "2026-01-15T10:30:00Z",
- "timezone": "UTC"
}, - "space": "example",
- "status": "PENDING",
- "target_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "time_ranges": {
- "test": [
- "2026-01-01",
- "2026-03-31"
], - "train": [
- "2026-01-01",
- "2026-03-31"
], - "val": [
- "2026-01-01",
- "2026-03-31"
]
}, - "training_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "cross_net_sharing_group_size": 1,
- "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "updated_at": "2026-01-15T10:30:00Z"
}Update a training job by ID
| id required | string Training ID |
Training update request
| architecture | string |
| benchmark_ids | Array of strings |
| configuration | object |
object (request.UpdateConnectorTraining) | |
| name | string |
{- "architecture": "string",
- "benchmark_ids": [
- "string"
], - "configuration": { },
- "connector": {
- "connector_id": "string",
- "keys": [
- "string"
]
}, - "name": "string"
}{- "architecture": "example",
- "architecture_id": "arc_1a2b3c4d5e6f708192a3b4c5",
- "base_checkpoint": "example",
- "config": "example",
- "config_snapshot": { },
- "created_at": "2026-01-15T10:30:00Z",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "description": "Scores the active customer base every morning.",
- "filter_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "gpu_count": 8,
- "id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "kind": "PRETRAIN",
- "model_input_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "model_output_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "recipe_preset": "example",
- "schedule": {
- "start_at": "2026-01-15T10:30:00Z",
- "timezone": "UTC"
}, - "space": "example",
- "status": "PENDING",
- "target_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "time_ranges": {
- "test": [
- "2026-01-01",
- "2026-03-31"
], - "train": [
- "2026-01-01",
- "2026-03-31"
], - "val": [
- "2026-01-01",
- "2026-03-31"
]
}, - "training_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "cross_net_sharing_group_size": 1,
- "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "updated_at": "2026-01-15T10:30:00Z"
}Cancel a training job by ID (stops the job but preserves the training record)
| id required | string Training ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/trainings/{id}/cancel" \ -H "x-api-key: $API_KEY"
{- "architecture": "example",
- "architecture_id": "arc_1a2b3c4d5e6f708192a3b4c5",
- "base_checkpoint": "example",
- "config": "example",
- "config_snapshot": { },
- "created_at": "2026-01-15T10:30:00Z",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "description": "Scores the active customer base every morning.",
- "filter_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "gpu_count": 8,
- "id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "kind": "PRETRAIN",
- "model_input_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "model_output_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "recipe_preset": "example",
- "schedule": {
- "start_at": "2026-01-15T10:30:00Z",
- "timezone": "UTC"
}, - "space": "example",
- "status": "PENDING",
- "target_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "time_ranges": {
- "test": [
- "2026-01-01",
- "2026-03-31"
], - "train": [
- "2026-01-01",
- "2026-03-31"
], - "val": [
- "2026-01-01",
- "2026-03-31"
]
}, - "training_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "cross_net_sharing_group_size": 1,
- "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "updated_at": "2026-01-15T10:30:00Z"
}Retrieve logs for a training job by ID
| id required | string Training ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/trainings/{id}/logs" \ -H "x-api-key: $API_KEY"
{- "created_at": "2026-01-15T10:30:00Z",
- "id": "log_1a2b3c4d5e6f708192a3b4c5",
- "job_id": "log_1a2b3c4d5e6f708192a3b4c5",
- "text": "example"
}Download all logs for a training job as a plain text file
| id required | string Training ID |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/trainings/{id}/logs/download" \ -H "x-api-key: $API_KEY"
Retrieve metrics for a training job by ID. When max_points is set and the series is longer, it is downsampled (LTTB) to about that many points; checkpoint points are always kept.
| id required | string Training ID |
| type | string Metric type filter (TRAIN, CHECKPOINT_LOSS, CHECKPOINT_VALIDATION, BENCHMARK) |
| max_points | integer Max points to return; omit or <= 0 to return every point |
curl -X GET "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/trainings/{id}/metrics" \ -H "x-api-key: $API_KEY"
{- "benchmark": "example",
- "checkpoint": "example",
- "checkpoint_name": "churn-propensity-v3-step-4000",
- "created_at": "2026-01-15T10:30:00Z",
- "data_model": "example",
- "dataset": "example",
- "dataset_name": "transactions-daily",
- "epoch": 1,
- "id": "met_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "step": 1,
- "target": "example",
- "training": "example",
- "training_name": "churn-propensity-v3",
- "type": "BENCHMARK",
- "values": { }
}Pause a running training: the neocore job is deleted but checkpoints persist, so the training can be resumed later
| id required | string Training ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/trainings/{id}/pause" \ -H "x-api-key: $API_KEY"
{- "architecture": "example",
- "architecture_id": "arc_1a2b3c4d5e6f708192a3b4c5",
- "base_checkpoint": "example",
- "config": "example",
- "config_snapshot": { },
- "created_at": "2026-01-15T10:30:00Z",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "description": "Scores the active customer base every morning.",
- "filter_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "gpu_count": 8,
- "id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "kind": "PRETRAIN",
- "model_input_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "model_output_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "recipe_preset": "example",
- "schedule": {
- "start_at": "2026-01-15T10:30:00Z",
- "timezone": "UTC"
}, - "space": "example",
- "status": "PENDING",
- "target_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "time_ranges": {
- "test": [
- "2026-01-01",
- "2026-03-31"
], - "train": [
- "2026-01-01",
- "2026-03-31"
], - "val": [
- "2026-01-01",
- "2026-03-31"
]
}, - "training_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "cross_net_sharing_group_size": 1,
- "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "updated_at": "2026-01-15T10:30:00Z"
}Resume a paused or failed training from its last periodic checkpoint by re-creating the neocore job. A failed run's checkpoint integrity isn't guaranteed, since the job didn't shut down cleanly.
| id required | string Training ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/trainings/{id}/resume" \ -H "x-api-key: $API_KEY"
{- "architecture": "example",
- "architecture_id": "arc_1a2b3c4d5e6f708192a3b4c5",
- "base_checkpoint": "example",
- "config": "example",
- "config_snapshot": { },
- "created_at": "2026-01-15T10:30:00Z",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "description": "Scores the active customer base every morning.",
- "filter_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "gpu_count": 8,
- "id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "kind": "PRETRAIN",
- "model_input_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "model_output_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "recipe_preset": "example",
- "schedule": {
- "start_at": "2026-01-15T10:30:00Z",
- "timezone": "UTC"
}, - "space": "example",
- "status": "PENDING",
- "target_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "time_ranges": {
- "test": [
- "2026-01-01",
- "2026-03-31"
], - "train": [
- "2026-01-01",
- "2026-03-31"
], - "val": [
- "2026-01-01",
- "2026-03-31"
]
}, - "training_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "cross_net_sharing_group_size": 1,
- "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "updated_at": "2026-01-15T10:30:00Z"
}Replace the deferred start time of a Scheduled (not yet started) training
| id required | string Training ID |
New schedule
required | object (model.TrainingSchedule) | ||||
| |||||
{- "schedule": {
- "start_at": "string",
- "timezone": "string"
}
}{- "architecture": "example",
- "architecture_id": "arc_1a2b3c4d5e6f708192a3b4c5",
- "base_checkpoint": "example",
- "config": "example",
- "config_snapshot": { },
- "created_at": "2026-01-15T10:30:00Z",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "description": "Scores the active customer base every morning.",
- "filter_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "gpu_count": 8,
- "id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "kind": "PRETRAIN",
- "model_input_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "model_output_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "recipe_preset": "example",
- "schedule": {
- "start_at": "2026-01-15T10:30:00Z",
- "timezone": "UTC"
}, - "space": "example",
- "status": "PENDING",
- "target_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "time_ranges": {
- "test": [
- "2026-01-01",
- "2026-03-31"
], - "train": [
- "2026-01-01",
- "2026-03-31"
], - "val": [
- "2026-01-01",
- "2026-03-31"
]
}, - "training_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "cross_net_sharing_group_size": 1,
- "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "updated_at": "2026-01-15T10:30:00Z"
}Dispatch a Scheduled training immediately instead of waiting for its start time
| id required | string Training ID |
curl -X POST "https://tenant.api.neospace.ai/v1/spaces/{spaceId}/trainings/{id}/start" \ -H "x-api-key: $API_KEY"
{- "architecture": "example",
- "architecture_id": "arc_1a2b3c4d5e6f708192a3b4c5",
- "base_checkpoint": "example",
- "config": "example",
- "config_snapshot": { },
- "created_at": "2026-01-15T10:30:00Z",
- "data_model_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "description": "Scores the active customer base every morning.",
- "filter_dataset_ids": [
- "dpp_1a2b3c4d5e6f708192a3b4c5",
- "dpp_1a2b3c4d5e6f708192a3b4d6"
], - "gpu_count": 8,
- "id": "tra_1a2b3c4d5e6f708192a3b4c5",
- "kind": "PRETRAIN",
- "model_input_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "model_output_id": "dm_1a2b3c4d5e6f708192a3b4c5",
- "name": "churn-propensity-v3",
- "recipe_preset": "example",
- "schedule": {
- "start_at": "2026-01-15T10:30:00Z",
- "timezone": "UTC"
}, - "space": "example",
- "status": "PENDING",
- "target_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "time_ranges": {
- "test": [
- "2026-01-01",
- "2026-03-31"
], - "train": [
- "2026-01-01",
- "2026-03-31"
], - "val": [
- "2026-01-01",
- "2026-03-31"
]
}, - "training_datasets": [
- {
- "columns": [
- "event_ts",
- "customer_id"
], - "cross_net_sharing_group_size": 1,
- "dir": "/datasets/transactions",
- "excluded_columns": [
- "event_ts",
- "customer_id"
], - "id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "shift": "example"
}
], - "updated_at": "2026-01-15T10:30:00Z"
}How long each node spent in each cluster over a period, and what its GPUs did there. The period is read as [start, end), in UTC instants; an end in the future is read up to now.
Usage comes from the hourly rollup for every hour it has written and is read live for the rest —
normally the last hour or two, which coverage names and which is still changing. Every figure is
a sum of seconds: GPU hours are gpu_seconds / 3600, and GPU utilization is
gpu_busy_seconds / gpu_seconds. An hour in which a node changed cluster is split between the two
by the time it spent in each.
Only nodes that were up at some moment of the period count: a node a cluster lists but that never reported metrics or ran a task in the period is left out of the list and of every figure. A node's segments are the stretches it was up, so the time it was not up stays empty, and node time, peaks and the nodes at either end of the period count up time only.
cluster_id narrows the report to the time spent in one cluster: the nodes up in it at some moment
of the period, each with its stretches there alone. gpu_model narrows it to the nodes with that
model; its options, gpu_models, are the models found in the cluster filtered on, if any.
| cluster_id | string Only the time spent in this cluster, as |
| end | string Period end, RFC3339; defaults to now. The part of the period that has not happened yet is not read, so an end in the future reads up to now. |
| gpu_model | string Only the nodes with this GPU model, as |
| start | string Period start, RFC3339; defaults to 30 days before |
curl -X GET "https://tenant.api.neospace.ai/v1/usage/fleet" \ -H "x-api-key: $API_KEY"
{- "all_clusters": [
- {
- "cluster_id": "clu_1a2b3c4d5e6f708192a3b4c5",
- "deleted": false,
- "name": "churn-propensity-v3"
}
], - "as_of": "example",
- "clusters": [
- {
- "by_model": [
- { }
], - "cluster_id": "clu_1a2b3c4d5e6f708192a3b4c5",
- "deleted": false,
- "jobs": 1,
- "kind": "cluster",
- "live": { },
- "name": "churn-propensity-v3",
- "node_seconds": 0.5,
- "nodes_at_end": 2,
- "nodes_at_start": 2,
- "peak_from": "example",
- "peak_nodes": 2,
- "peak_to": "example",
- "usage": { }
}
], - "coverage": {
- "gap_from": "example",
- "gap_to": "example",
- "history_from": "example",
- "history_until": "example",
- "live_from": "example",
- "live_to": "example",
- "live_unavailable": false
}, - "end": "2026-03-31T23:59:59Z",
- "gpu_models": [
- "example"
], - "nodes": [
- {
- "cluster_seconds": 0.5,
- "gpu_count": 8,
- "gpu_model": "example",
- "live": { },
- "name": "churn-propensity-v3",
- "node_id": "nod_1a2b3c4d5e6f708192a3b4c5",
- "removed": false,
- "segments": [
- { }
], - "usage": { }
}
], - "start": "2026-01-01T00:00:00Z"
}One node over a period: where it was, its GPU use there, what happened to it — cluster moves,
another machine behind the same node — and the jobs it ran. Same period, sources and units as
GET /v1/usage/fleet.
| nodeId required | string Node ID |
| end | string Period end, RFC3339; defaults to now. The part of the period that has not happened yet is not read, so an end in the future reads up to now. |
| start | string Period start, RFC3339; defaults to 30 days before |
curl -X GET "https://tenant.api.neospace.ai/v1/usage/nodes/{nodeId}" \ -H "x-api-key: $API_KEY"
{- "all_clusters": [
- {
- "cluster_id": "clu_1a2b3c4d5e6f708192a3b4c5",
- "deleted": false,
- "name": "churn-propensity-v3"
}
], - "as_of": "example",
- "clusters": [
- {
- "by_model": [
- { }
], - "cluster_id": "clu_1a2b3c4d5e6f708192a3b4c5",
- "deleted": false,
- "jobs": 1,
- "kind": "cluster",
- "live": { },
- "name": "churn-propensity-v3",
- "node_seconds": 0.5,
- "nodes_at_end": 2,
- "nodes_at_start": 2,
- "peak_from": "example",
- "peak_nodes": 2,
- "peak_to": "example",
- "usage": { }
}
], - "coverage": {
- "gap_from": "example",
- "gap_to": "example",
- "history_from": "example",
- "history_until": "example",
- "live_from": "example",
- "live_to": "example",
- "live_unavailable": false
}, - "end": "2026-03-31T23:59:59Z",
- "events": [
- {
- "actor": "example",
- "at": "example",
- "cluster_id": "clu_1a2b3c4d5e6f708192a3b4c5",
- "gpus_after": 8,
- "gpus_before": 8,
- "kind": "joined",
- "previous_cluster_id": "clu_1a2b3c4d5e6f708192a3b4c5",
- "reason": "Example message"
}
], - "jobs": [
- {
- "cluster_id": "clu_1a2b3c4d5e6f708192a3b4c5",
- "first_seen": "example",
- "gpu_allocated_seconds": 0.5,
- "gpu_busy_seconds": 0.5,
- "job_id": "obj_1a2b3c4d5e6f708192a3b4c5",
- "kind": "example",
- "last_seen": "example",
- "live": false,
- "segment": "cluster",
- "task_seconds": 0.5,
- "tasks": 1
}
], - "node": {
- "cluster_seconds": 0.5,
- "gpu_count": 8,
- "gpu_model": "example",
- "live": {
- "gpu_allocated_seconds": 0.5,
- "gpu_busy_seconds": 0.5,
- "gpu_seconds": 0.5,
- "up_seconds": 0.5
}, - "name": "churn-propensity-v3",
- "node_id": "nod_1a2b3c4d5e6f708192a3b4c5",
- "removed": false,
- "segments": [
- { }
], - "usage": {
- "gpu_allocated_seconds": 0.5,
- "gpu_busy_seconds": 0.5,
- "gpu_seconds": 0.5,
- "up_seconds": 0.5
}
}, - "start": "2026-01-01T00:00:00Z"
}