---
title: "Solve Free"
method: POST
path: "/solve/free"
---

# Solve Free

`POST /solve/free`

## Request

- Base URL: `https://mcp.physea.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://mcp.physea.ai/solve/free`
- Auth: none declared

FIRST SOLVE FREE (Jay 2026-07-06): real, rate-limited WORKED solves for a
keyless visitor, BEFORE any account wall — the wall moves to save / re-run. Unlike
/demo/solve (which returns only the reduction), this routes through the SAME grounded
front door as /answer and the MCP `solve` tool, then projects the envelope down to a
keyless-safe surface (owner/scaffolding fields stripped; caller-scoped savings
never appear — app/free_solve.project_envelope is an allowlist).

Reversible knob: dark unless ROUTER_FREE_FIRST_SOLVE=1. The 50 free solves are
counted on the account, else the browser install (X-Liminal-Install), and the
address is only an abuse floor (Jay 2026-09-07 12:30). Every count reads a DURABLE
ledger so it survives the service restart that enables this. Limit/disabled/error
return a clean 200 with ok:false (never a 500), so the hero can branch instead of
erroring; the two allowance refusals also carry a LIM-FREE-* coded `error`. The
solve banks under caller 'anon-web' so keyless traffic never pollutes the owner
library. Lives outside the /mcp key gate, same as /demo/solve.

## Request body

- DemoSolveRequest
  - `question` string, required
  - `mode` 'auto' | 'solve' | 'decide' | 'research' | 'plan'
  - `context` string

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/physea/apis/liminality-router-service.md) · [All operations](https://skmtc.dev/physea/apis/liminality-router-service/llms.txt) · [OpenAPI document](https://skmtc.dev/physea/apis/liminality-router-service/revisions/5f60ddd97544?raw)
