decolua/9router · error
MiMo bootstrap failed: ${response.status}
Error message
MiMo bootstrap failed: ${response.status} What it means
MiMo's free tier requires a bootstrap call that exchanges a generated browser fingerprint for a JWT. bootstrapJwt() performs that POST; when the HTTP response status is not 2xx it throws this error carrying the status code, because no JWT can be obtained and the chat request cannot proceed.
Source
Thrown at open-sse/executors/mimo-free.js:94
jwtExpiresAt = 0;
}
async function bootstrapJwt(proxyOptions = null) {
if (cachedJwt && Date.now() < jwtExpiresAt - JWT_EXPIRY_BUFFER_MS) {
return cachedJwt;
}
const response = await proxyAwareFetch(BOOTSTRAP_URL, {
method: "POST",
headers: {
"Content-Type": "application/json",
"User-Agent": USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)],
},
body: JSON.stringify({ client: generateFingerprint() }),
}, proxyOptions);
if (!response.ok) {
throw new Error(`MiMo bootstrap failed: ${response.status}`);
}
const data = await response.json();
if (!data.jwt) {
throw new Error("MiMo bootstrap returned no JWT");
}
cachedJwt = data.jwt;
jwtExpiresAt = parseJwtExp(data.jwt);
return cachedJwt;
}
export class MimoFreeExecutor extends BaseExecutor {
constructor() {
super("mimo-free", PROVIDERS["mimo-free"]);
this.sessionId = generateSessionId();
}
View on GitHub (pinned to 90b52e06ff)
Solutions
- Check the status code in the message: 429 → back off and retry later; 403/401 → fingerprint/endpoint rejected, update 9router; 5xx → upstream outage, retry later
- Update 9router to the latest version in case MiMo changed the bootstrap endpoint or fingerprint scheme
- Disable or bypass proxies/VPNs that may be blocked or injecting failures (adjust proxyOptions)
- Reduce request frequency — free-tier bootstrap is heavily rate-limited per IP
- Verify general connectivity to the MiMo host (curl the bootstrap URL) to rule out network/DNS issues
Example fix
// before
const jwt = await executor.jwt();
// after
let jwt;
try { jwt = await executor.jwt(); }
catch (e) {
if (/MiMo bootstrap failed: 429/.test(e.message)) {
await new Promise(r => setTimeout(r, 30_000));
jwt = await executor.jwt();
} else throw e;
} Defensive patterns
Strategy: retry
Validate before calling
// pre-check reachability of the bootstrap endpoint
const ping = await fetch(MIMO_BOOTSTRAP_URL, { method: 'HEAD' }).catch(() => null);
if (!ping) throw new Error('MiMo bootstrap endpoint unreachable'); Try / catch
try {
jwt = await executor.jwt();
} catch (e) {
const status = e.message.match(/bootstrap failed: (\d+)/)?.[1];
if (status === '429') { await sleep(30_000); jwt = await executor.jwt(); }
else if (status?.startsWith('5')) { /* retry with backoff or fail over */ }
else throw e;
} Prevention
- Throttle free-tier request rate to avoid 429s
- Keep 9router updated — bootstrap endpoints and fingerprint schemes change
- Avoid blocked proxies/VPNs on the MiMo route
- Monitor the bootstrap endpoint's reachability
When it happens
Trigger: The bootstrap endpoint returns 4xx/5xx: fingerprint rejected, rate-limited (429), endpoint moved (404), server error (5xx), or a proxy/network error surfacing as a non-OK response. Raised from bootstrapJwt, called by execute/jwt/first/second.
Common situations: Heavy free-tier usage triggering rate limits; MiMo changing or geo-blocking the bootstrap endpoint; corporate proxy returning 403/502; stale 9router version after an upstream endpoint change.
Related errors
- MiMo bootstrap returned no JWT
- NanoBanana status ${r.status}
- Runway status ${r.status}
- FUSION Panel ${model} failed
- [${res.status}] ${text}
AI-assisted analysis of decolua/9router@90b52e06ff (2026-08-30).
Data as JSON: /api/errors/b0a22a7fcad40873.
Report an issue: GitHub.