CircuitHub

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-electronics

Output:

Board:      7001
Version:    12
Layers:     4
Thickness:  1.6 mm
Material:   FR4
Finish:     ENIG
curl -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

FieldTypeDescription
boardIdintegerIdentity of this revision’s current board
versionintegerExisting board version; changes when board settings or impedance requirements change
updatedAtstringISO 8601 update time
specobjectImported geometry and selected manufacturing settings
impedancesarrayControlled-impedance requirements; empty when none
stackupobject or nullResolved stackup, when available
possibleStackupCombinationsarrayAvailable stackup combinations; may be empty
messagesarrayFabrication messages to review
hasCamReportbooleanWhether a CAM report exists
circuitHubCAMCommentsstring or nullCircuitHub 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.json

Output:

Updated board: 7001
Version:       13
curl -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

FieldTypeDescription
expectedBoardIdintegerRequired. boardId from the last read
expectedVersionintegerRequired. version from the last read
boardThicknessnumberSelected thickness in mm; read as spec.selectedThicknessMM
dielectricMaterialstringFor example FR4, Aluminum, Roger, RigidFlex or Flex
tgLevelstringMaterial glass-transition requirement: Low, Medium or High
outerCopperWeightOz / innerCopperWeightOznumberCopper weight in oz
surfaceFinishstringENIG or ENEPIG
soldermaskColor / silkscreenColorstringSolder mask: black, purple, green, green-matte, red, yellow, blue, white, black-matte, orange. Silkscreen: white or black. Read as selectedSolderMaskColor and selectedSilkscreenColor
goldFingers / goldFingersHardGoldPlating / goldFingersChamferbooleanGold finger options; disabling fingers also disables plating and chamfer
viaPlugging / viaFillAndCapstringVia locations; read as smViaFillLocations and viaInPadFillLocations
viaIsConductivebooleanConductive via fill requirement
blindBuriedLayerSetsintegerNumber of blind/buried layer sets
panelizationMethodstringAny, VScore or TabRoute
needsCastellatedEdgesbooleanRead as spec.castellatedEdges
hasCustomRequirements / hasCustomStackupstringRead 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.json

Output:

Board:        7001
Version:      14
Requirements: 1
curl -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

FieldTypeDescription
expectedBoardId / expectedVersionintegerRequired. Current board identity and version
rowsarrayRequired. Complete list of impedance requirements
rows[].idinteger or nullExisting row ID, or null for a new row
rows[].layersstringApplicable layer or layers
rows[].width / rows[].spacenumber / number or nullTrace width and pair spacing in unit; spacing is null for single-ended traces
rows[].unitstringmm or mil
rows[].modestringsingle-ended or differential
rows[].transmissionLineTypestringTransmission line geometry, for example microstrip
rows[].valueintegerTarget impedance in ohms
rows[].toleranceintegerAllowed percentage deviation
rows[].couponbooleanWhether a test coupon is required
rows[].commentsstring or nullAdditional 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.

On this page