// rest api v1
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
// quickstart
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"
// endpoints
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
// authentication
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.
// schemas
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).