Every record,
addressable.

OpenAPI 3.1. Read endpoints are public. Write endpoints require an x-api-key header. CORS is permissive — fetch from any browser origin.

https://ecad.openie.dev/api/v1 openapi.yaml

Three calls.

01   health check
curl https://ecad.openie.dev/api/v1/health
02   list footprints
curl https://ecad.openie.dev/api/v1/footprints | jq '.[0]'
03   search
curl "https://ecad.openie.dev/api/v1/search?q=SOIC"

The full surface.

System

GET
/health
Health check. Returns {status: "ok"}.
public
GET
/stats
Library counts. Returns symbols/footprints/components/total.
public

Footprints

GET
/footprints
List every footprint in the library.
public
GET
/footprints/{id}
Get one footprint by UUID.
public
POST
/footprints
Create a footprint (JSON body).
x-api-key
DELETE
/footprints/{id}
Delete a footprint.
x-api-key

Symbols

GET
/symbols
List every symbol.
public
GET
/symbols/{id}
Get one symbol by UUID.
public
POST
/symbols
Create a symbol (JSON body).
x-api-key
DELETE
/symbols/{id}
Delete a symbol.
x-api-key

Components

GET
/components
List every component (logical part — bundles symbol + footprint).
public
GET
/components/{id}
Get one component by UUID.
public
POST
/components
Create a component.
x-api-key
DELETE
/components/{id}
Delete a component.
x-api-key

Search

GET
/search?q={query}&limit=20
BM25 full-text search across symbols, footprints, components.
public
GET
/parts/search?q={query}&basic_only=false
Cross-reference LCSC/JLCPCB distributor catalogs by MPN.
x-api-key

Generate

GET
/generate/catalog?density=nominal
Generate IPC-7351B footprint catalog. density ∈ {most, nominal, least, a, b, c}.
public

Convert

POST
/convert/parse-sym
Parse .kicad_sym file content (text/plain) → JSON symbols.
public
POST
/convert/write-sym
Write JSON symbols → .kicad_sym (text/plain).
public
POST
/convert/write-mod
Write one JSON footprint → .kicad_mod (text/plain).
public

Ingest

POST
/ingest
Bulk ingest from a JSON payload of components/symbols/footprints.
x-api-key
POST
/scrape/trigger
Kick off the catalog scraper (JLCPCB/LCSC/KiCad libs).
x-api-key

A header, a key.

All read endpoints are open. Write endpoints (create / delete / ingest / parts-search / scrape-trigger) require the x-api-key header.

example · authenticated POST
curl -X POST https://ecad.openie.dev/api/v1/footprints \
  -H "x-api-key: $ECAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d @my-footprint.json

API keys are issued on request. Email [email protected] with what you're building.


The data shapes.

Footprint
{
  id, lib_id, name,
  description,
  keywords: [],
  pads: [{
    number, pad_type,
    shape, position,
    rotation,
    width, height
  }],
  graphics, properties
}
Symbol
{
  id, lib_id, name,
  description,
  keywords: [],
  pins: [{
    number, name,
    pin_type, position,
    rotation, length
  }],
  graphics,
  reference_prefix,
  properties
}
Component
{
  id, name, mpn,
  manufacturer,
  description,
  category,
  keywords: [],
  specifications: {},
  symbol_ids: [],
  footprint_ids: []
}

Positions and dimensions are in nanometers (integer, no float drift on KiCad round-trips).