API Documentation

Back to App

Programmatic access to your Artifact resources. All endpoints require an API key passed via the Authorization header.

Authentication

Enter your API key to test endpoints directly from this page:
If you do not have an API key, you can create one in the User Dropdown API Keys & Documentation Modal.

Quick Start

Get from zero to a full BOM export in four API calls. Navigate the hierarchy: Projects → Diagrams → Versions → Export.

1
List your projects
GET /api/v1/projects/list
2
List diagrams in a project
GET /api/v1/diagrams/list?projectId=PROJECT_ID
3
List versions of a diagram
GET /api/v1/diagram-versions/list?diagramId=DIAGRAM_ID
4
Export the BOM
GET /api/v1/diagram-versions/bom/csv?diagramVersionId=VERSION_ID

Finding IDs from the UI

You can also find the projectID, diagramID, and diagramVersionID directly from the app. Open the Version History for any diagram, then click the gear icon (⚙) on any version row and select Copy API Info. This copies a JSON object with all three IDs to your clipboard.

Resource Hierarchy

All resources are scoped to your organization via your API key. IDs are UUIDs. Timestamps are ISO 8601.

Organization (scoped by API key)
├── Projects
│   └── Diagrams
│       └── Diagram Versions (drafts & releases)
│           ├── Exports: BOM, Connections Table, Netlist
│           └── Harnesses
│               └── Exports: BOM, NX PLMXML
└── Library (shared component catalog)
    ├── Devices     ├── Connectors    ├── Cables
    ├── Accessories ├── Tools         └── Design Blocks

Endpoints

GET
/api/v1/projects/list
List Projects
GET
/api/v1/diagrams/list
List Diagrams
GET
/api/v1/diagram-versions/list
List Diagram Versions
GET
/api/v1/diagram-versions/raw
Get Diagram Version Raw Data
GET
/api/v1/diagram-versions/bom/raw
Get Diagram Version BOM Table Raw
GET
/api/v1/diagram-versions/bom/csv
Get Diagram Version BOM Table CSV
GET
/api/v1/diagram-versions/connections-table/raw
Get Diagram Version Connections Table Raw
GET
/api/v1/diagram-versions/connections-table/csv
Get Diagram Version Connections Table CSV
GET
/api/v1/diagram-versions/netlist/raw
Get Diagram Version Netlist Raw
GET
/api/v1/diagram-versions/netlist/csv
Get Diagram Version Netlist CSV
GET
/api/v1/harnesses/list
List Harnesses
GET
/api/v1/harnesses/raw
Get Harness Raw Data
GET
/api/v1/harnesses/bom/raw
Get Harness BOM Table Raw
GET
/api/v1/harnesses/bom/csv
Get Harness BOM Table CSV
GET
/api/v1/harnesses/plmxml
Get Harness NX PLMXML
GET
/api/v1/library
Get Library

Data Model Reference

When using the /raw endpoints, responses contain the full diagram structure. Here is a reference for the key types.

Node Types

TypeDescriptionKey Data Fields
deviceNodeECU, sensor, switch, terminal, or design blockreference_name, part_name, ports[], symbol_name, origin_data
connectorNodeStandalone inline connectorports[] (single port with pins)
spliceNodeWire splice pointname, library_item_id
textNodeText annotationtextProps, backgroundColor, borderColor
annotationNodeShaped annotation (diamond, circle, etc.)shape, color, description
imageNodeEmbedded image or PDFimageId, fileName, crop
tableNodeData tablerows[], columnWidths[]
ghostNodeUnconnected wire endpoint
bundledNodeCable bundle split point
arrowNodeArrow annotationstartCap, endCap, edgeType, label

Edge (Wire) Fields

FieldTypeDescription
reference_namestringWire identifier (W1, W2, ...)
part_namestringWire part name from library
wire_gaugestringWire gauge value
wire_gauge_unitAWG | MCMGauge unit system
insulationstringInsulation color
lengthnumberWire length
length_unitstringin, ft, cm, m, mm
harnessstringHarness this wire belongs to
library_item_idstringReference to cable/wire library item
child_idsstring[]For cables: IDs of bundled wire edges
accessoriesarrayAttached accessories (backshells, etc.)
toolsarrayRequired tooling
procurement_dataobjectPurchasing metadata (see below)

Procurement Data

Can appear on library items, ports, pins, and edges. All fields are optional.

FieldTypeDescription
internal_part_numberstringYour internal part number
supplier_part_numberstringSupplier's catalog number
manufacturer_part_numberstringManufacturer's part number
supplierstringSupplier name
manufacturerstringManufacturer name
lead_timenumberExpected lead time
lead_time_unitstringdays, weeks, months
unit_costnumberCost per unit
inventory_quantitynumberQuantity in stock
inventory_unitstringunits, meters, feet

Error Handling

All error responses return a JSON body with a single error field:

{ "error": "Description of what went wrong" }

Status Codes

CodeMeaningCommon Causes
200OKSuccessful request
400Bad RequestMissing/invalid parameter, malformed UUID, invalid unit value
401UnauthorizedMissing, invalid, or expired API key
404Not FoundResource doesn't exist or doesn't belong to your organization
500Internal Server ErrorUnexpected server failure — contact support

Netlist Naming Specification

Each step in a netlist trace is formatted as a dot-separated label built from the node, port, and pin information. The showPinName and showPinFunction parameters control which pin-level segments appear. When both are off, the label stops at the port level and duplicate traces are collapsed.

Label format by node type

Node TypeBoth pins onPin name only (default)Both pins off (port level)
DeviceECU.J1.Pin1.SIGNALECU.J1.Pin1ECU.J1
↳ with mating connectorECU.X1.Pin1.SIG, ECU.J1.Pin1.SIGECU.X1.Pin1, ECU.J1.Pin1ECU.X1, ECU.J1
ConnectorX123.Pin1.SIGNALX123.Pin1X123
SymbolGND1.Pin1.GNDGND1.Pin1GND1
Design BlockPowerModule.J1.Pin1.12VPowerModule.J1.Pin1PowerModule.J1
↳ with mating connectorPowerModule.X1.Pin1.12VPowerModule.X1.Pin1PowerModule.X1
SpliceSP1SP1SP1

When a device port has a mating connector, the trace produces two adjacent steps: the first uses the mating connector reference name as the port spec, and the second uses the base port name. This mirrors how both members of a mated inline connector pair appear as separate steps. For design blocks with a mating connector, only the mating connector step appears — the base port is already visible as the first entry of the internal sub-trace.

Design block internal traces

When traceDesignBlocks=true, the trace continues through the internal wiring of each design block. Internal steps are prefixed with the design block diagram name in square brackets, indicating which sub-diagram the step belongs to. For nested design blocks, prefixes stack to show the full hierarchy:

// A trace that enters a design block "PowerModule" and passes through
// its internal components, then exits:
[
  "ECU.X1.Pin1",                                       // top-level device (mating connector)
  "ECU.J1.Pin1",                                       // top-level device (base port)
  "PowerModule.X2.Pin1",                               // design block boundary (mating connector)
  "[Power Distribution] J1.Pin1",                      // sub-trace starts at base port
  "[Power Distribution] Fuse1.Input",                  // inside "Power Distribution" sub-diagram
  "[Power Distribution] Fuse1.Output",
  "[Power Distribution] RelayBlock.X1.Pin1",           // nested design block boundary
  "[Power Distribution] [Relay Module] K1.Coil.Pin1",  // inside nested sub-diagram
  "[Power Distribution] [Relay Module] K1.Coil.Pin2",
  "[Power Distribution] RelayBlock.X2.Pin2",
  "[Power Distribution] J2.Pin3",                      // sub-trace exit at base port
  "PowerModule.X3.Pin3",                               // back at top-level boundary
  "Sensor.X1.SIG",                                     // top-level destination (mating connector)
  "Sensor.Port1.SIG"                                   // top-level destination (base port)
]

The showPinName and showPinFunction options apply uniformly to all steps, including those inside design blocks.