Board configuration
Review board settings before requesting a quote.
A revision has a board configuration. Review it after import: the importer does not read every manufacturing requirement from your design files.
Get board configuration
GET /v1/revisions/:revisionId/board
Read the board for the revision you intend to order. Keep boardId and version for edits. A project contains revisions of a design; quote and order a specific revision, not an implicit latest version.
circuithub project board show --revision 99001 --workspace acme-electronicsOutput:
Board: 7001
Version: 12
Layers: 4
Thickness: 1.6 mm
Material: FR4
Finish: ENIGcurl -X GET -H "Authorization: Bearer $CIRCUITHUB_API_KEY" \
"https://api.circuithub.com/v1/revisions/99001/board"Response: 200 OK
{
"boardId": 7001,
"spec": {
"blindBuriedHoles": 0,
"numLayers": 4,
"widthMM": 50,
"lengthMM": 40,
"materialThicknessMm": 1.6,
"minTraceWidthMM": 0.15,
"minPitchMM": 0.5,
"minHoleSizeMM": 0.3,
"silkScreenBothSides": true,
"hasSMDBothSides": true,
"selectedThicknessMM": 1.6,
"selectedSolderMaskColor": "green",
"selectedSilkscreenColor": "white",
"customRequirements": null,
"numBoards": 1,
"tgLevel": null,
"viaInPad": false,
"customStackup": null,
"blindBuriedLayerSets": 0,
"castellatedEdges": false,
"panelizationMethod": "Any",
"silkscreenWidthMM": null,
"fixSilkscreen": true,
"smViaFillLocations": null,
"viaInPadFillLocations": null,
"goldFingers": null,
"dielectricMaterial": "FR4",
"surfaceFinish": "ENIG",
"outerCopperWeightOz": 1,
"innerCopperWeightOz": 0.5,
"viaIsConductive": false
},
"impedances": [],
"stackup": null,
"possibleStackupCombinations": [],
"messages": [],
"hasCamReport": false,
"circuitHubCAMComments": null,
"updatedAt": "2026-11-03T09:00:00Z",
"version": 12
}Response fields
| Field | Type | Description |
|---|---|---|
boardId | integer | Identity of this revision’s current board |
version | integer | Existing board version; changes when board settings or impedance requirements change |
updatedAt | string | ISO 8601 update time |
spec | object | Imported geometry and selected manufacturing settings |
impedances | array | Controlled-impedance requirements; empty when none |
stackup | object or null | Resolved stackup, when available |
possibleStackupCombinations | array | Available stackup combinations; may be empty |
messages | array | Fabrication messages to review |
hasCamReport | boolean | Whether a CAM report exists |
circuitHubCAMComments | string or null | CircuitHub manufacturing review comments |
The response follows the Portal board representation. Missing measurements are null, not zero. Stackup availability is not a promise of manufacturability; the quote determines the available services.
Board measurements and stackup
spec.numLayers is the imported copper layer count. widthMM, lengthMM, materialThicknessMm, minTraceWidthMM, minPitchMM, minHoleSizeMM and silkscreenWidthMM are measurements in millimetres. materialThicknessMm describes the imported design; selectedThicknessMM is the manufacturing selection. numBoards describes the design, not the quantity being ordered.
silkScreenBothSides, hasSMDBothSides, blindBuriedHoles and viaInPad describe the imported board. fixSilkscreen is a read-only manufacturing setting on this surface. The editable selections are listed under Update board configuration. goldFingers, when present, contains the Portal’s gold finger options; use the three individual switches when editing.
A resolved stackup contains id, name, description, ownerId, overallThickness, tolerancePlus, toleranceMinus, copperLayerCount and layers. Each layer has id, stackupId, sequence, number, layerType, materialName, description, thickness, minTraceWidth, layerName and note. Unknown layer measurements and descriptive fields can be null. possibleStackupCombinations lists supported combinations of overallThickness, copperWeightOuter and copperWeightInner.
messages contains level and message for each fabrication finding. Review these alongside the quote’s orderability and blockers. A board version does not freeze the standard stackup catalogue.
Update board configuration
PATCH /v1/revisions/:revisionId/board
Change only the supplied settings. The API example is also the content of board-change.json. Omitted or null settings remain unchanged, matching the Portal; send an empty string to clear a text requirement. Geometry such as layer count and outline dimensions is read-only. Request a fresh quote after editing.
circuithub project board update --revision 99001 --workspace acme-electronics --file board-change.jsonOutput:
Updated board: 7001
Version: 13curl -X PATCH -H "Authorization: Bearer $CIRCUITHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"expectedBoardId": 7001,
"expectedVersion": 12,
"boardThickness": 1.2
}' \
"https://api.circuithub.com/v1/revisions/99001/board"Response: 200 OK
{
"boardId": 7001,
"spec": {
"blindBuriedHoles": 0,
"numLayers": 4,
"widthMM": 50,
"lengthMM": 40,
"materialThicknessMm": 1.6,
"minTraceWidthMM": 0.15,
"minPitchMM": 0.5,
"minHoleSizeMM": 0.3,
"silkScreenBothSides": true,
"hasSMDBothSides": true,
"selectedThicknessMM": 1.2,
"selectedSolderMaskColor": "green",
"selectedSilkscreenColor": "white",
"customRequirements": null,
"numBoards": 1,
"tgLevel": null,
"viaInPad": false,
"customStackup": null,
"blindBuriedLayerSets": 0,
"castellatedEdges": false,
"panelizationMethod": "Any",
"silkscreenWidthMM": null,
"fixSilkscreen": true,
"smViaFillLocations": null,
"viaInPadFillLocations": null,
"goldFingers": null,
"dielectricMaterial": "FR4",
"surfaceFinish": "ENIG",
"outerCopperWeightOz": 1,
"innerCopperWeightOz": 0.5,
"viaIsConductive": false
},
"impedances": [],
"stackup": null,
"possibleStackupCombinations": [],
"messages": [],
"hasCamReport": false,
"circuitHubCAMComments": null,
"updatedAt": "2026-11-03T09:05:00Z",
"version": 13
}Request body
| Field | Type | Description |
|---|---|---|
expectedBoardId | integer | Required. boardId from the last read |
expectedVersion | integer | Required. version from the last read |
boardThickness | number | Selected thickness in mm; read as spec.selectedThicknessMM |
dielectricMaterial | string | For example FR4, Aluminum, Roger, RigidFlex or Flex |
tgLevel | string | Material glass-transition requirement: Low, Medium or High |
outerCopperWeightOz / innerCopperWeightOz | number | Copper weight in oz |
surfaceFinish | string | ENIG or ENEPIG |
soldermaskColor / silkscreenColor | string | Solder mask: black, purple, green, green-matte, red, yellow, blue, white, black-matte, orange. Silkscreen: white or black. Read as selectedSolderMaskColor and selectedSilkscreenColor |
goldFingers / goldFingersHardGoldPlating / goldFingersChamfer | boolean | Gold finger options; disabling fingers also disables plating and chamfer |
viaPlugging / viaFillAndCap | string | Via locations; read as smViaFillLocations and viaInPadFillLocations |
viaIsConductive | boolean | Conductive via fill requirement |
blindBuriedLayerSets | integer | Number of blind/buried layer sets |
panelizationMethod | string | Any, VScore or TabRoute |
needsCastellatedEdges | boolean | Read as spec.castellatedEdges |
hasCustomRequirements / hasCustomStackup | string | Read as customRequirements and customStackup |
The Platform calls require both identity and version. The Portal also supports timestamp preconditions; these examples use its existing version counter. Unknown fields are rejected. On a stale board, read it again and review your changes before resubmitting. A locked quote prevents edits.
Set impedance requirements
PUT /v1/revisions/:revisionId/board/impedances
Replace the complete list. The API body is the content of impedances.json. Retain IDs for existing rows, use null for new rows, and omit rows to remove them. An empty rows array clears all requirements. Read the board again before quoting.
circuithub project board impedances set --revision 99001 --workspace acme-electronics --file impedances.jsonOutput:
Board: 7001
Version: 14
Requirements: 1curl -X PUT -H "Authorization: Bearer $CIRCUITHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"expectedBoardId": 7001,
"expectedVersion": 13,
"rows": [
{
"id": null,
"layers": "1",
"width": 0.15,
"space": null,
"unit": "mm",
"mode": "single-ended",
"transmissionLineType": "microstrip",
"value": 50,
"tolerance": 10,
"coupon": true,
"comments": null
}
]
}' \
"https://api.circuithub.com/v1/revisions/99001/board/impedances"Response: 200 OK
{
"boardId": 7001,
"impedances": [
{
"id": 7101,
"layers": "1",
"width": 0.15,
"space": null,
"unit": "mm",
"mode": "single-ended",
"transmissionLineType": "microstrip",
"value": 50,
"tolerance": 10,
"coupon": true,
"comments": null,
"createdAt": "2026-11-03T09:10:00Z",
"boardId": 7001
}
],
"updatedAt": "2026-11-03T09:10:00Z",
"version": 14
}Request body
| Field | Type | Description |
|---|---|---|
expectedBoardId / expectedVersion | integer | Required. Current board identity and version |
rows | array | Required. Complete list of impedance requirements |
rows[].id | integer or null | Existing row ID, or null for a new row |
rows[].layers | string | Applicable layer or layers |
rows[].width / rows[].space | number / number or null | Trace width and pair spacing in unit; spacing is null for single-ended traces |
rows[].unit | string | mm or mil |
rows[].mode | string | single-ended or differential |
rows[].transmissionLineType | string | Transmission line geometry, for example microstrip |
rows[].value | integer | Target impedance in ohms |
rows[].tolerance | integer | Allowed percentage deviation |
rows[].coupon | boolean | Whether a test coupon is required |
rows[].comments | string or null | Additional instructions |
Errors
Errors: 400 VALIDATION_ERROR for invalid settings, 409 BOARD_CHANGED for an outdated identity or version, and 409 QUOTE_LOCKED while a quote is locked. Do not silently retry a conflicting edit.