# Halowerk Model Router

> Halowerk Model Router is a paid API for AI agents from modell.halowerk.com, paid per call via x402, $0.002/call, status unknown (last checked 2026-09-14).

Scores every catalogue LLM against a given task and returns a ranked shortlist with per-model cost estimates, sub-scores, and exclusion reasons for models that can't fit the input.

## Facts

- Endpoint: POST https://modell.halowerk.com/v1/model-router
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/halowerk-model-router-900489ec
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_TFZc-HRX3-141T3pCfGR7

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability halowerk-model-router-900489ec -d '<json body>'
```

Example prompt: Score all models in the catalogue for a question-answering task with a budget of $0.005 per call, where speed matters a lot, the input is about 8000 tokens, and I want to exclude any OpenAI models — show me the ranked shortlist with sub-scores and why any models were excluded.

## When to prefer this

Choose this endpoint when an agent or developer needs to programmatically select the best LLM for a specific task rather than hardcoding a model. It is especially valuable when cost, speed, and context window all matter and need to be traded off transparently. Prefer it over manual model comparison when the model catalogue changes frequently or when vendor restrictions need to be enforced automatically.

## Known failure modes

- No models in catalogue fit within the specified budget — empty shortlist returned with explanation
- Input size exceeds all available models' context windows — all candidates excluded with context-limit reasons
- Invalid task kind enum value — validation error returned
- Malformed weight values (e.g. do not sum to 1) — error or normalization warning returned
- Network timeout or service unavailability — HTTP 5xx error

## How this service works

Scores every catalogue model against one task and returns a ranked shortlist. You state the task kind, optionally a per-call budget in USD, how much speed matters, the input size and any vendor restriction; the answer names a model, the estimated cost per call, and the sub-scores it was chosen on, so the ranking can be checked rather than trusted. Models that cannot hold the input are excluded and listed separately with the reason. Weights are yours to set and are echoed back.

## Output

A ranked shortlist of LLMs scored against the specified task, each entry including the model name, estimated cost per call, and sub-scores (e.g. cost, speed, context fit). Models that cannot accommodate the input size are listed separately with the reason for exclusion. The caller's weights are echoed back for auditability.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "task": {
   "enum": [
    "classification",
    "extraction",
    "summarization",
    "translation",
    "chat",
    "coding",
    "agent",
    "reasoning",
    "research",
    "vision",
    "long_context"
   ],
   "type": "string",
   "description": "What the model has to do."
  },
  "weights": {
   "type": "object",
   "properties": {
    "cost": {
     "type": "number",
     "default": 0.4,
     "minimum": 0
    },
    "speed": {
     "type": "number",
     "default": 0.2,
     "minimum": 0
    },
    "capability": {
     "type": "number",
     "default": 0.4,
     "minimum": 0
    }
   },
   "description": "Weighting of cost, capability and speed. Normalised to sum 1.",
   "additionalProperties": false
  },
  "input_text": {
   "type": "string",
   "maxLength": 100000,
   "description": "Sample input. Used to estimate input_tokens if that is not given."
  },
  "input_tokens": {
   "type": "integer",
   "default": 2000,
   "minimum": 0,
   "description": "Expected input size in tokens."
  },
  "require_tags": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "Capabilities the model must carry, e.g. vision."
  },
  "output_tokens": {
   "type": "integer",
   "minimum": 0,
   "description": "Expected output length. Defaults to a value typical for the task."
  },
  "speed_priority": {
   "enum": [
    "low",
    "normal",
    "high"
   ],
   "type": "string",
   "default": "normal",
   "description": "How much latency matters."
  },
  "allowed_vendors": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "Restrict to these vendors, e.g. for a data-residency or procurement rule."
  },
  "excluded_vendors": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "Exclude these vendors."
  },
  "budget_usd_per_call": {
   "type": "number",
   "minimum": 0,
   "description": "Ceiling per call. Models above it are excluded."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/halowerk-model-router-900489ec/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from modell.halowerk.com](https://www.zero.xyz/host/modell.halowerk.com/llms.txt)
