API Endpoints
The Nimbus API provides backend services for model management and analytics. Note: Inference is performed locally by NimbusSDK.jl, not via API calls.Base URL
Model Registry
GET /v1/models/list
List available pre-trained models based on your license tier. Authentication: Required (API key) Query Parameters:| Parameter | Type | Description |
|---|---|---|
api_key | string | Your Nimbus API key (required) |
paradigm | string | Filter by BCI paradigm: motor_imagery, p300, ssvep (optional) |
type | string | Filter by model type: RxLDA, RxGMM (optional) |
name(string): Unique model identifierversion(string): Model versiontype(string): Model type (RxLDAorRxGMM)paradigm(string): BCI paradigm (motor_imagery,p300,ssvep, etc.)n_features(number): Expected number of input featuresn_classes(number): Number of output classessize_mb(number): Model file size in megabytesdownload_url(string): Direct download URL for model filechecksum(string): SHA-256 checksum for verificationrequires_license(string): Minimum license tier requiredmetadata(object): Additional model information
Using in Julia SDK
The SDK automatically uses this endpoint when loading pre-trained models:Analytics & Logging
POST /v1/analytics/log
Log inference events and usage metrics (optional, for analytics tracking). Authentication: Required (API key) Request:| Field | Type | Required | Description |
|---|---|---|---|
api_key | string | Yes | Your API key |
event_type | string | Yes | Event type: inference, model_load, error |
model_name | string | No | Model identifier |
inference_type | string | No | batch or streaming |
duration_ms | number | No | Duration in milliseconds |
success | boolean | No | Whether operation succeeded |
error_message | string | No | Error description if failed |
metadata | object | No | Additional event data |
Analytics logging is optional. The SDK works without sending analytics data. Use this endpoint if you want to track usage patterns and performance metrics in the Nimbus dashboard (coming soon).
Health Check
GET /api/health
Check API status and availability. Authentication: Not required Request:status(string): API status -"healthy"or"unhealthy"timestamp(string): Current server timestamp (ISO 8601)version(string): API versiondatabase(string): Database connection status -"connected"or"disconnected"
Error Responses
All endpoints return consistent error responses:| Code | HTTP Status | Description |
|---|---|---|
MISSING_KEY | 400 | API key not provided |
INVALID_FORMAT | 400 | API key format invalid |
MISSING_EVENT_TYPE | 400 | Event type not provided (analytics endpoint) |
INVALID_KEY | 401 | API key is invalid or inactive |
KEY_EXPIRED | 401 | API key has expired |
KEY_NOT_FOUND | 404 | API key not found (revoke endpoint) |
METHOD_NOT_ALLOWED | 405 | HTTP method not allowed |
QUOTA_EXCEEDED | 429 | Monthly quota limit reached |
RATE_LIMIT_EXCEEDED | 429 | Too many requests |
SERVER_ERROR | 500 | Internal server error |
NOT_CONFIGURED | 503 | Server configuration issue |
Rate Limits
All API endpoints implement rate limiting to ensure fair usage and system stability.| Endpoint | Requests per Minute |
|---|---|
/v1/auth/validate | 100 |
/v1/auth/refresh | 10 |
/v1/auth/revoke | 10 |
/v1/installer/github-token | 20 |
/v1/models/list | 60 |
/v1/analytics/log | 1000 |
/api/health | Unlimited |
X-RateLimit-Limit: Maximum requests allowed per minuteX-RateLimit-Remaining: Requests remaining in current windowX-RateLimit-Reset: Unix timestamp when the limit resets
429 Too Many Requests response with a Retry-After header indicating when you can retry.
Usage Examples
Complete Workflow in Julia
List All Available Models
Check Model Availability
License Requirements
Different models require different license tiers:| Model | License Required | Description |
|---|---|---|
motor_imagery_4class_v1 | Free | Basic 4-class motor imagery |
motor_imagery_2class_v1 | Free | Binary motor imagery |
p300_binary_v1 | Research | P300 target detection |
ssvep_multiclass_v1 | Research | SSVEP multi-frequency |
| Custom models | Commercial+ | Customer-specific trained models |
Your API key’s license tier determines which models you can access. Attempting to load a model above your tier will return a
403 Forbidden error.Important Notes
Inference is Local
The Nimbus API does NOT perform inference. Inference happens locally via NimbusSDK.jl using RxInfer.jl. This approach provides: ✅ Privacy: Your EEG data never leaves your machine✅ Speed: No network latency
✅ Reliability: Works offline after initial setup
✅ Scalability: No API server bottlenecks The API only provides:
- Authentication and licensing
- Pre-trained model distribution
- Optional analytics collection
Model Caching
Models are downloaded once and cached locally:~/.nimbus/models/
Next Steps
Authentication
API key setup and management
Julia SDK
Complete SDK reference
Training Models
Train custom models
Code Examples
Working examples
Support
For API questions or model requests:- Email: hello@nimbusbci.com
- API Status: https://api.nimbusbci.com/api/health
- Documentation: https://docs.nimbusbci.com