---
title: "Using Darkbloom"
description: "One request field routes a model to quantized open weights on Apple Silicon; the rules, the rates, and the per-request floor."
canonical_url: "https://minirouter.sh/guides/darkbloom"
markdown_url: "https://minirouter.sh/guides/darkbloom.md"
last_updated: "2026-09-26"
---

# Using Darkbloom: open-weight models on Apple Silicon

Darkbloom is a second serving path behind the same key and the same base URL.
It serves quantized open-weight models on Apple Silicon, with precision named per model, at a
fraction of the default route's rate, with a minimum charge per request. You
choose it per request; a model that also has a default route never goes to
Darkbloom unless the request asks.

Base URL: https://api.minirouter.sh/v1
Get a key: https://minirouter.sh/key
Example model id: openai/gpt-oss-20b

## The one field

Add providerOptions.gateway.only to the request body on /chat/completions or
/responses. The Anthropic-format endpoint (/messages) does not accept it.

    curl https://api.minirouter.sh/v1/chat/completions \
      -H "Authorization: Bearer $MINIROUTER_KEY" \
      -H "Content-Type: application/json" \
      -d '{"model":"openai/gpt-oss-20b","messages":[{"role":"user","content":"ping"}],"providerOptions":{"gateway":{"only":["darkbloom"]}}}'

With openai-python, pass it as extra_body={"providerOptions": {"gateway":
{"only": ["darkbloom"]}}}.

## Rules

- Pinned means pinned. A request naming Darkbloom is served there or refused
  with 503 no_available_route before dispatch. It is never moved to the
  default route.
- The response header x-minirouter-provider names the route that served the
  request, for example openai/gpt-oss-20b@darkbloom. Assert on it.
- Without the field, a model with a default route uses the default route. A
  model only Darkbloom serves goes to Darkbloom automatically, on every
  endpoint including /messages.
- The field cannot be combined with the OpenRouter-style provider or models
  fields; those select the default route.

## Price

Rates are per model on https://minirouter.sh/api/v1/models (the darkbloom route of each
model, with its request minimum in pricing.request) and on
https://minirouter.sh/providers/darkbloom. Darkbloom charges the larger of the token cost
and the floor (0.000105 USD) per request:

    darkbloom_charge = max(input_tokens * in_rate + output_tokens * out_rate, floor)
    default_charge   = input_tokens * in_rate + output_tokens * out_rate

The floor is the whole price on a health check or an empty ping, where the
default route is cheaper. The crossing point, with the reply held fixed, is
the prompt size at which the default route's token cost reaches the floor:

    break_even_input_tokens = (floor - output_tokens * default_out_rate) / default_in_rate

Above it Darkbloom is cheaper and the gap widens with every token. The HTML
page draws this from live rates and tabulates four workloads (health check,
chat turn, agent turn, document pass). The x-minirouter-cost-usd header and
the streamed usage chunk include the floor.

## Quality and data

Weights are quantized, so output can differ from the full-precision endpoint
of the same model; the model page names the precision. The transport is in
alpha. A pinned request is sent to Darkbloom to be served; MiniRouter keeps its
usual 30-day private request trace, and Darkbloom's retention is described in
the privacy policy at https://minirouter.sh/legal/privacy.

Worked figures on live rates: https://minirouter.sh/guides/darkbloom
