Docs / API

API quickstart

POST a model graph with what the job will do, and the pre-check comes back as JSON. Arithmetic over the graph, no model call, deterministic.

Base URL https://www.neurarch.com, with www: the apex domain redirects and drops the Authorization header. Every endpoint and field: API reference. What we keep from a call: trust page. Each command below was run on 2026-10-18.

1. Get a graph

The API takes a graph ({ components, connections }). Every published architecture has one; the architecture pages list them in /a/index.json. To make one from your own PyTorch model, trace it with neurarch-trace or the MCP server's trace_model.

$ curl -s https://www.neurarch.com/templates/qwen3-8b/model.json | jq '{model: .}' > body.json

2. A plan, no key needed

$ curl -s https://www.neurarch.com/api/v1/plan -H 'content-type: application/json' -d @body.json | jq -r '.plan.summary'
Qwen3-8B: 219 layers, 8.19B params, will run, 2 warnings, does not fit a single 80GB card, about $603.4 to train

Keyless calls are rate limited per hour by IP. With a key, your own outcome history is attached.

3. The pre-check, with what the job will do

POST /api/v1/check needs a key (Authorization: Bearer nrk_...; create one under Settings, Developer API, in the app). Add any of three fields to the body:

FieldExampleAdds to the answer
data{"seq_len": 65536, "tokenizer_size": 151700}dataFit: sequence against the context, tokenizer against the embedding, labels against the head, image size and channels.
layout{"tp": 2, "pp": 2, "dp": 2, "micro_batch": 1, "global_batch": 64, "seq_len": 2048, "gpu": "h100-80gb"}layout: whether the split is legal, stage balance, bubble, per-stage memory.
serve{"command": "vllm serve Qwen/Qwen3-8B -tp 3", "gpu": "l4", "gpus": 3}serve: whether that vLLM, SGLang or llama.cpp launch is legal for the model and fits the card.
$ curl -s https://www.neurarch.com/templates/qwen3-8b/model.json \
    | jq '{model: ., serve: {command: "vllm serve Qwen/Qwen3-8B -tp 3", gpu: "l4", gpus: 3}}' > serve.json
$ curl -s https://www.neurarch.com/api/v1/check -H "Authorization: Bearer $NEURARCH_API_KEY" \
    -H 'content-type: application/json' -d @serve.json | jq '.serve.findings[] | {severity, title}'
{ "severity": "block", "title": "TP 3 does not divide 32 attention heads" }
{ "severity": "block", "title": "TP 3 neither divides nor is a multiple of 8 KV heads" }
...

How this was run: the hosted endpoint answered 401 without a key, as it should; the findings above are from the same request to the self-hosted container, which runs the same code (below).

4. The same calls inside your network

The self-hosted container answers plan, check, lint and rank at /v1/<action> with the same code, and runs with the network removed:

$ docker run --rm --network none -p 8080:8080 neurarch/verifier:local
$ curl -s localhost:8080/v1/check -H 'content-type: application/json' -d @serve.json

The image is not on a public registry yet; we send it, with the offline proof described on the trust page.

Other endpoints

The full list, request and response fields, and errors are in the API reference.