Documentation
API Reference
Everything you need to run neuromorphic simulations from any language.
Base URL: https://api.catalyst-neuromorphic.com
Python SDK (recommended)
pip install catalyst-cloud import catalyst_cloud as cc
client = cc.Client("cn_live_...")
net = client.create_network(
populations=[{"label": "input", "size": 100, "params": {"threshold": 1000}}],
connections=[],
)
job = client.simulate(net["network_id"], timesteps=500,
stimuli=[{"population": "input", "current": 5000}])
print(f"Spikes: {job['result']['total_spikes']}") Quick start (REST API)
1. Get an API key
Free. No credit card required.
curl -X POST https://api.catalyst-neuromorphic.com/v1/signup \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]", "tier": "free"}'
# Response:
# {
# "api_key": "cn_live_...",
# "tier": "free",
# "limits": {"max_neurons": 1024, "max_timesteps": 1000, ...}
# } 2. Define a network
Populations of spiking neurons with connections between them.
curl -X POST https://api.catalyst-neuromorphic.com/v1/networks \
-H "Content-Type: application/json" \
-H "X-API-Key: cn_live_..." \
-d '{
"populations": [
{"label": "excitatory", "size": 100, "params": {"threshold": 1000, "leak": 10}},
{"label": "inhibitory", "size": 25, "params": {"threshold": 800, "leak": 5}}
],
"connections": [
{"source": "excitatory", "target": "inhibitory", "topology": "random_sparse",
"p": 0.2, "weight": 600},
{"source": "inhibitory", "target": "excitatory", "weight": -400}
]
}'
# Response:
# {"network_id": "net_...", "total_neurons": 125, "populations": 2, "connections": 2} 3. Run a simulation
Submit a job with stimuli. It runs asynchronously and you poll for results.
curl -X POST https://api.catalyst-neuromorphic.com/v1/jobs \
-H "Content-Type: application/json" \
-H "X-API-Key: cn_live_..." \
-d '{
"network_id": "net_...",
"timesteps": 1000,
"stimuli": [
{"population": "excitatory", "neurons": [0,1,2,3,4], "current": 8000}
]
}'
# Response: {"job_id": "job_...", "status": "queued"}
# Poll for results:
curl https://api.catalyst-neuromorphic.com/v1/jobs/job_... \
-H "X-API-Key: cn_live_..."
# When status is "completed":
# {
# "status": "completed",
# "result": {
# "total_spikes": 847,
# "firing_rates": {"excitatory": 0.0052, "inhibitory": 0.0128},
# "spike_count_timeseries": [5, 12, 3, ...]
# },
# "compute_seconds": 0.34
# } 4. Get spike trains
Full per-neuron spike times, indexed by population label and local neuron index.
curl https://api.catalyst-neuromorphic.com/v1/jobs/job_.../spikes \
-H "X-API-Key: cn_live_..."
# Response:
# {
# "spike_trains": {
# "excitatory": {"0": [12, 45, 78], "1": [13, 47], "4": [11, 44, 77, 110]},
# "inhibitory": {"0": [14, 48], "3": [15, 49, 82]}
# }
# } Endpoint reference
/v1/signup Public Create a new account and get an API key.
Request body:
| string, required | |
| tier | "free" (default), "researcher", "startup", "enterprise" |
/v1/networks Requires X-API-Key Store a network definition for later job submission.
Request body:
| populations | array of label, size, params |
| connections | array of source, target, topology, weight, p, delay, compartment |
Neuron params (all optional):
| threshold | int (default 1000) — spike threshold |
| leak | int (default 3) — membrane leak rate |
| resting | int (default 0) — resting potential |
| refrac | int (default 3) — refractory period |
| dend_threshold | int (default 500) — dendritic compartment threshold |
Connection options:
| topology | all_to_all, one_to_one, random_sparse, fixed_fan_in, fixed_fan_out |
| weight | int [-32768, 32767] (default 200) — negative for inhibitory |
| p | float [0, 1] — connection probability (random_sparse) |
| delay | int [0, 63] — synaptic delay in timesteps |
| compartment | int [0, 3] — target dendritic compartment |
/v1/jobs Requires X-API-Key Submit a simulation job. Returns immediately with job_id.
| network_id | string, required — from POST /v1/networks |
| timesteps | int, required — number of simulation steps |
| stimuli | array of population, neurons (optional), current |
| learning | enabled, graded, dendritic, noise, three_factor |
| rewards | array of timestep, value — for 3-factor learning |
/v1/jobs/job_id Requires X-API-Key Get job status and summary results. Poll until status is "completed" or "failed".
Response fields (when completed):
| result.total_spikes | int — total spikes across all neurons |
| result.firing_rates | per-population mean spikes per neuron per timestep |
| result.spike_count_timeseries | array — total spikes at each timestep |
| compute_seconds | float — actual simulation compute time |
/v1/jobs/job_id/spikes Requires X-API-Key Full spike trains grouped by population with local neuron indices.
Response:
{"spike_trains": {"excitatory": {"0": [12, 45], "1": [13]}, "inhibitory": {"0": [14, 48]}}} /v1/usage Requires X-API-Key Your current usage stats and estimated cost.
| jobs_today | int — jobs submitted today |
| jobs_limit_today | int — daily limit for your tier |
| compute_seconds_this_month | float — total compute this billing cycle |
| estimated_cost_gbp | float — estimated cost at your tier rate |
Error codes
| 400 | Invalid request — check your JSON format |
| 401 | Missing or invalid API key |
| 403 | Tier limit exceeded (neurons, timesteps) |
| 404 | Network or job not found |
| 409 | Email already registered |
| 429 | Daily job limit reached — upgrade your tier |
Interactive docs also available at
OpenAPI Explorer →