---
title: "Export the BOM, the design JSON, the solved result or the machine-readable report"
method: POST
path: "/v1/designs/{id}/exports"
tags: ["Exports"]
---

# Export the BOM, the design JSON, the solved result or the machine-readable report

`POST /v1/designs/{id}/exports`

## Request

- Base URL: `https://electronics-architect.com`
- URL: `https://electronics-architect.com/v1/designs/{id}/exports`
- Auth: HTTP bearer

Scope: `export`. Returns the document inline. `bom_json` and `bom_csv` list every part-bearing node with designator, type, nameplate value, MPN, manufacturer, package and DigiKey part number (no pricing or stock — distributor data is not redistributed). `solve_json` is the solved result at `options.corner` (compact on request). `report_json` is the report: summary and grouped warnings with their `fix` patches at all three corners, plus the BOM. Every response carries `attribution` (AR4.1) and the CSV ends with the attribution line after the last row. `pdf`, `mc_report`, `derating_report` and `dossier` are rendered by the editor and return 501 EXPORT_TYPE_UNAVAILABLE here. `solve_json` and `report_json` solve the saved design, so they apply the solve payload caps (413 PAYLOAD_TOO_LARGE for a design over them); the BOM and `design_json` do not solve and are always available. In the CSV, a text cell that begins with `=`, `+`, `-` or `@` is prefixed with an apostrophe so a spreadsheet shows it as text rather than running it as a formula; a Value that is a plain number and unit, such as `-5 V`, is left as it is. Pro and Team only: a Free account is refused with 403 PLAN_REQUIRED (one sentence and the trial link).

## Request body

- object
  - `type` 'bom_json' | 'bom_csv' | 'design_json' | 'solve_json' | 'report_json' | 'pdf' | 'mc_report' | 'derating_report' | 'dossier', required
  - `options` object: For solve_json and report_json.
    - `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.
    - `ambientTemperature` number: Ambient in °C for the thermal estimates. Defaults to the design's own setting, else 25.
    - `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 export.

- Export
  - `type` string
  - `filename` string
  - `contentType` string
  - `generatedAt` string, date-time
  - `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>".
  - `content` unknown

## Other responses

- `400`: INVALID_REQUEST — unknown type.
- `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.
- `404`: NOT_FOUND.
- `413`: PAYLOAD_TOO_LARGE — solve_json or report_json on a saved design over the solve payload caps.
- `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.
- `501`: EXPORT_TYPE_UNAVAILABLE — an editor-rendered type.

---

[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)
