API reference

Model inference

Run our models — and models we build for you — behind one interface. Single calls return in-line for interactive use; large jobs go to a queue that streams results back as they finish. The same model, the same weights, the same answer either way, so what you validate in batch is what you serve in production.

REST server

https://api.belumind.com

MCP server

https://mcp.belumind.com/inference

Models

Every model below is callable through the same /v1/predict and /v1/batches endpoints — pass its id as model. Each one ships with a demo of the pipeline it runs.

noise-detect@2.1.0RealtimeBatch

Signal / noise separation

Finds interference buried in a signal and marks where it starts and stops, so downstream measurements can be trusted rather than silently corrupted. Tuned against the conditions it actually runs in, not a clean benchmark — the failure mode we care about is the noise nobody noticed.

POST/v1/predictmodel=noise-detect@2.1.0200 OKinsignaloutlabelled segmentsingestresample · windowfeaturesspectral framesdetectper-frame scoressegmentmerge · thresholdLATENCY38 msMODErealtime + batchOUTPUTsegments + confidence
a noisy signal goes in; interference is scored per frame and merged into labelled segments
Model id
noise-detect@2.1.0
Latency
38 ms
Mode
realtime + batch
Output
segments + confidence
ekyc-verify@1.4.2Realtime

Identity verification

Reads an ID document, matches the face in front of the camera to the one on the card, and separates a live person from a photograph, a replay, or a generated face. Built for the phone the customer already owns, in the lighting they happen to be standing in.

POST/v1/predictmodel=ekyc-verify@1.4.2200 OKinid document + framesoutmatch + liveness verdictdocumentdetect · OCR fieldsfacealign · embedlivenessspoof / replay checkdecidematch score + reasonsRUNS ONdevice or serverMODErealtimeOUTPUTverdict + reason codes
document fields are read, the face is matched against the card, and liveness is checked before a verdict is returned
Model id
ekyc-verify@1.4.2
Runs on
device or server
Mode
realtime
Output
verdict + reason codes
csf-sign@1.0.0RealtimeBatch

Multilingual sign language generation

The model from our CSF paper: a language-agnostic semantic layer that translates from any source language straight to sign language, without routing through a pivot language. Small enough to ship anywhere and fast enough to run on a CPU.

POST/v1/predictmodel=csf-sign@1.0.0200 OKintext, any languageoutsign glosses + timingparseslot extractionsemanticscontrastive featuresgenerategloss sequencetimeduration per signSIZE0.74 MBLATENCY3.02 ms on CPUSLOT ACCURACY99.03%
text in any of four languages is reduced to semantic slots, then generated as a timed sign sequence
Model id
csf-sign@1.0.0
Size
0.74 MB
Latency
3.02 ms on CPU
Slot accuracy
99.03%

Authentication

Every request carries a bearer token. Keys are scoped — an endpoint returns 403 if the calling key lacks the scope named in its reference entry, so an agent can be handed a key that reaches exactly one tool and nothing else.

MCP clients pass the same token as a bearer credential when connecting to the server URL above.

inference:runinference:batch
Header
Authorization: Bearer blm_live_7f3c…
Content-Type: application/json
POST/v1/predictinference:run

Run a single prediction

Synchronous inference for interactive use. Returns in-line with a confidence score and the exact model version that produced the result, so the same call can be reproduced later.

MCP toolpredict

Body parameters

modelstringrequired
Model identifier — see the Models section above. Pin a version with `name@version`; bare names resolve to the current default.
inputobjectrequired
Model input. The shape depends on the model — see its entry in the model list.
optionsobjectoptional
Per-call overrides such as `top_k` or `threshold`, where the model supports them.

Responses

  • 200 OKSuccess. Body as shown in the example.
  • 400 Bad RequestThe request body failed validation. The response names the offending field.
  • 401 UnauthorizedMissing, malformed, or revoked API key.
  • 403 ForbiddenThe key is valid but lacks the scope this endpoint requires.
  • 429 Too Many RequestsRate limit exceeded. `Retry-After` carries the seconds to wait; usage is readable from /v1/usage.
  • 500 Internal Server ErrorSomething failed on our side. Requests are idempotent by `Idempotency-Key`, so a retry is safe.

Request

curl -X POST https://api.belumind.com/v1/predict \
  -H "Authorization: Bearer $BELUMIND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "noise-detect@2.1.0",
  "input": {
    "signal_url": "https://example.com/sample-recording.wav",
    "sample_rate": 48000
  },
  "options": {
    "threshold": 0.6
  }
}'

Response

application/json200 OK
{
  "prediction_id": "pred_5c7a13d9",
  "model": "noise-detect@2.1.0",
  "result": {
    "detected": true,
    "label": "broadband_interference",
    "confidence": 0.93,
    "segments": [
      {
        "start_ms": 1420,
        "end_ms": 2180,
        "confidence": 0.93
      },
      {
        "start_ms": 7650,
        "end_ms": 8010,
        "confidence": 0.71
      }
    ]
  },
  "latency_ms": 38
}

Try it

Send a request

Sample mode
POST https://api.belumind.com/v1/predict

The platform is in early access, so this console returns the documented example response rather than calling a live endpoint. Ask us for a key and the same console starts issuing real requests.

POST/v1/batchesinference:batch

Submit a batch job

Queues inference over a large input set and returns immediately with a job id. Results stream back as each shard completes, so partial output is available before the whole job finishes.

MCP toolcreate_batch

Body parameters

modelstringrequired
Model identifier, optionally version-pinned.
input_urlstringrequired
URL of a JSONL file, one input object per line.
callback_urlstringoptional
Called on completion and on partial failure. Omit to poll instead.
max_parallelismintegeroptional
Cap concurrent shards. Defaults to the limit on your key.

Responses

  • 202 AcceptedJob accepted and queued.
  • 400 Bad RequestThe request body failed validation. The response names the offending field.
  • 401 UnauthorizedMissing, malformed, or revoked API key.
  • 403 ForbiddenThe key is valid but lacks the scope this endpoint requires.
  • 429 Too Many RequestsRate limit exceeded. `Retry-After` carries the seconds to wait; usage is readable from /v1/usage.
  • 500 Internal Server ErrorSomething failed on our side. Requests are idempotent by `Idempotency-Key`, so a retry is safe.

Request

curl -X POST https://api.belumind.com/v1/batches \
  -H "Authorization: Bearer $BELUMIND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "noise-detect@2.1.0",
  "input_url": "https://example.com/batch-inputs.jsonl",
  "callback_url": "https://example.com/hooks/batch-complete",
  "max_parallelism": 8
}'

Response

application/json202 Accepted
{
  "batch_id": "batch_71ad0e3f",
  "status": "queued",
  "total_items": 128450,
  "created_at": "2026-08-31T09:14:22Z"
}

Try it

Send a request

Sample mode
POST https://api.belumind.com/v1/batches

The platform is in early access, so this console returns the documented example response rather than calling a live endpoint. Ask us for a key and the same console starts issuing real requests.

GET/v1/batches/{batch_id}inference:batch

Check batch progress

Returns progress, per-shard state, and a results URL once output is available. Failed items are listed separately so they can be retried without re-running the whole job.

MCP toolget_batch_status

Path & query parameters

batch_idstringrequired
Job id returned when the batch was submitted.

Responses

  • 200 OKSuccess. Body as shown in the example.
  • 400 Bad RequestThe request body failed validation. The response names the offending field.
  • 401 UnauthorizedMissing, malformed, or revoked API key.
  • 403 ForbiddenThe key is valid but lacks the scope this endpoint requires.
  • 429 Too Many RequestsRate limit exceeded. `Retry-After` carries the seconds to wait; usage is readable from /v1/usage.
  • 500 Internal Server ErrorSomething failed on our side. Requests are idempotent by `Idempotency-Key`, so a retry is safe.

Request

curl -X GET https://api.belumind.com/v1/batches/{batch_id} \
  -H "Authorization: Bearer $BELUMIND_API_KEY"

Response

application/json200 OK
{
  "batch_id": "batch_71ad0e3f",
  "status": "running",
  "completed_items": 96200,
  "failed_items": 12,
  "total_items": 128450,
  "results_url": "https://api.belumind.com/v1/batches/batch_71ad0e3f/results",
  "estimated_completion": "2026-08-31T09:41:05Z"
}

Try it

Send a request

Sample mode
GET https://api.belumind.com/v1/batches/batch_71ad0e3f

The platform is in early access, so this console returns the documented example response rather than calling a live endpoint. Ask us for a key and the same console starts issuing real requests.

Errors

Errors use conventional HTTP status codes and always carry a machine-readable code alongside the human-readable message, so a client can branch on the former and log the latter. Every request is idempotent by Idempotency-Key, which makes retrying a 5xx safe.

Error shape4xx / 5xx
{
  "error": {
    "code": "invalid_parameter",
    "message": "`min_confidence` must be between 0 and 1.",
    "param": "min_confidence",
    "request_id": "req_4d91c0b7"
  }
}

Ready to call it for real?

The console returns documented examples while the platform is in early access. Tell us what you are building and we will get you a key.