---
title: "Solve one tolerance corner"
method: POST
path: "/v1/designs/solve"
tags: ["Solve"]
---

# Solve one tolerance corner

`POST /v1/designs/solve`

## Request

- Base URL: `https://electronics-architect.com`
- URL: `https://electronics-architect.com/v1/designs/solve`
- Auth: HTTP bearer

Scope: `solve`. Synchronous; unmetered on Pro and Team, and one of the month's 10 solves on Free (`meta.solvesRemaining`). Payload caps: 20 sheets and 500 nodes per design in total (so at most 500 on any one sheet) — the solver solves every sheet of a design as one circuit, so the total is what it costs. **A converter reports two efficiencies and they are meant to differ.** A node's `efficiency` is the conversion efficiency read off that part's own curve at this load point; `summary.stages[].eff` is the whole stage, `Pout / Pin`, which also pays the quiescent current. A 12 V → 5 V buck at 1 A reads 0.920 on the node and 0.910 on the stage — the 0.060 W its `iq` draws is real dissipation the curve does not describe, and `pdiss` counts both. Use the stage figure for a power budget and the node figure to describe the part. An SMPS node also carries `efficiencyCurve`, the curve the solver used as `[outputCurrent, efficiency]` pairs over 0..`iMax` at the solved input and rail (light-load mode and `effVin` applied); the compact result leaves it out.

## Request body

- object: The design and solve options.
  - `design` Design, required (unresolved $ref)
  - `options` object
    - `corner` 'nom' | 'min' | 'max' | 'worst': Which tolerance corner to solve. `min`/`max` push every toleranced value to its extreme. `worst` moves each one the way that raises the draw and the heat (loads up, efficiencies down, a switcher's output up, an LDO's down) and holds the input at nominal; each sheet's `worstCase.held` lists what it held and why.
    - `sweep` boolean: POST /v1/designs/solve only. Solve at three input points in one request: every battery empty (0 %), half (50 %) and full (100 %), every supply at the low end, middle and high end of its voltage tolerance. `corner` still applies (with `worst`, worst case at low and at high line). Returns `result.points[]`, each with its inputs, totals, stages (with temperature) and grouped warnings. One solve against a Free allowance.
    - `ambientTemperature` number: Ambient in °C for the thermal estimates. Defaults to the design's own setting, else 25.
    - `includePortVoltages` boolean: Include per-port voltages on every node result.
    - `compact` boolean: Return the terse result: every node's solved numbers without its property echo, one `warningGroups` list per sheet (code, level, label, remedy, the parts it fired on) instead of the per-node, per-sheet and summary warning arrays, and the summary totals and `stages`. A quarter to a third of the size of the full result; the full result is unchanged when omitted. `meta.compact` and `result.compact` say which you got.

## Response `200`

The solver result and request metadata.

- SolveResponse
  - `result` SolveResult
    - `version` string
    - `simulatedAt` string, date-time
    - `elapsedMs` number
    - `toleranceMode` string
    - `sheets` SheetResult[]
      - `converged` boolean
      - `iterations` integer
      - `error` string
      - `nodes` object[]
      - `warnings` Warning[]
        - `fix` Fix: A patch an agent can apply to clear a warning (AR4.3). Present on a warning only where one property on one node is the answer.
          - `op` 'set'
          - `nodeId` string
          - `property` string: The property key to set, e.g. iMax, currentLimit, thetaJA, vinMin, dropout, topology.
          - `value` unknown
          - `unit` string, nullable
          - `meaning` 'requirement' | 'setting': "requirement": the rating the REPLACEMENT part needs (applying it models the part you would buy). "setting": a declaration the design was missing or had wrong.
          - `note` string: How the value was arrived at.
        - `code` string
        - `type` string
        - `level` 'info' | 'caution' | 'warning' | 'critical'
        - `label` string
        - `message` string
        - `remedy` string
        - `nodeId` string
        - `nodeName` string
        - `details` object
      - `summary` object
  - `meta` object
    - `attribution` Attribution: Who solved it and how to check (AR4.1). The same block on every solve response (`meta.attribution`), every export, and — as one line — every PDF, PNG and CSV the editor or the API produces.
      - `solver` string
      - `release` string: The build that solved the design — the release tag on production (e.g. "0.9.60"), "main-<sha>" on staging, "dev" elsewhere.
      - `resultContract` string: The result-shape contract version (`result.version`).
      - `designHash` string: Sixteen hex characters of SHA-256 over the canonical design: parts, properties, tolerances, selected parts and wiring. Layout, routing and solve options are excluded, so one design has one hash at every corner.
      - `generatedAt` string, date-time
      - `verifyUrl` string: /verify/{designHash}, with ?s=<token> when the design has a VIEW-ONLY public share link, so the page can re-solve it unaided. An `edit` or `clone` share link is deliberately omitted: that token also opens the design for writing, and an export is a document you hand to someone else.
      - `statement` string: The one printed line: "Solved by Electronics Architect solver vX · design <hash> · <date> · verify: <url>".
    - `schemaVersion` integer
    - `corner` string
    - `nodes` integer
    - `sheets` integer
    - `elapsedMs` number
    - `metered` boolean

## Other responses

- `400`: VALIDATION_FAILED with the failing schema paths, or INVALID_REQUEST for a bad option.
- `401`: No key, a browser token instead of a key, an unknown key, or a revoked key (code KEY_REVOKED).
- `403`: The key lacks a required scope (INSUFFICIENT_SCOPE), or the call needs a plan the account does not have (PLAN_REQUIRED): on the Free plan, compare, exports, Monte Carlo jobs, AI synthesis, a design with more than one sheet, or a save, share or key past the Free limits; or a team key whose team is no longer paid for.
- `413`: PAYLOAD_TOO_LARGE — a payload cap was exceeded.
- `429`: RATE_LIMITED: the key's per-minute allowance is used up (or, before any key is recognised, too many requests from one address presented an unknown or revoked key). On the routes that solve inside the request (solve, verify, derating, compare, exports, ai/review, ai/synthesize) it can also be SOLVE_IN_PROGRESS: this account already has 3 calls of that kind running on the server that took the request (solves, AI reviews and syntheses are each counted separately). `Retry-After` is set either way; for SOLVE_IN_PROGRESS it is 2 s for solves and 30 s for AI reviews and syntheses.
- `500`: SOLVE_FAILED — the solver refused the circuit.

---

[API](https://skmtc.dev/electronics-architect/apis/electronics-architect-api.md) · [All operations](https://skmtc.dev/electronics-architect/apis/electronics-architect-api/llms.txt) · [OpenAPI document](https://skmtc.dev/electronics-architect/apis/electronics-architect-api/revisions/98066184ba67?raw)
