OHMBO DEVELOPER API
Start hardware jobs from your software
Use the native job API or supported OpenAI SDK calls, then open the project on Ohmbo for visual review, artifacts and the rest of the hardware workflow.
Compatible with OpenAI SDKs
Base URL
https://mcp.ohmbo.com/v1Use a live or test key from your Ohmbo account. Each environment keeps jobs, usage and credits separate.
Available API surface
Developer API v1 accepts asynchronous PCB design jobs and returns an Ohmbo website URL for the complete result. Each adapter enters the same account, credit and job system.
- /v1/designs
- Canonical create, list, retrieve, revise, cancel, event and artifact operations.
- /v1/responses
- Create, retrieve and cancel background Responses mapped to native Ohmbo jobs.
- /v1/chat/completions
- Submit one asynchronous hardware job through chat clients and relays that support this endpoint.
- /v1/models
- Discover the stable PCB design model exposed to supported SDK and relay clients.
Native API quickstart
The native contract exposes the complete job object, cursor pagination, usage, idempotency and account-authorized website links.
curl https://mcp.ohmbo.com/v1/designs \
-H 'Authorization: Bearer $OHMBO_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: enclosure-controller-v1' \
-d '{"prompt":"Design an ESP32-C3 sensor board with USB-C power"}'OpenAI SDK examples
The tested subset supports model listing, background Responses and short chat admission responses. Unsupported parameters fail explicitly.
Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ['OHMBO_API_KEY'],
base_url='https://mcp.ohmbo.com/v1',
)
response = client.responses.create(
model='ohmbo-pcb-design-1',
input='Design an ESP32-C3 sensor board with USB-C power',
background=True,
)
job_id = response.model_extra['ohmbo_job_id']
print(response.model_extra['website_url'])JavaScript
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.OHMBO_API_KEY,
baseURL: 'https://mcp.ohmbo.com/v1',
});
const response = await client.responses.create({
model: 'ohmbo-pcb-design-1',
input: 'Design an ESP32-C3 sensor board with USB-C power',
background: true,
});
console.log(response.ohmbo_job_id, response.website_url);Asynchronous lifecycle
Hardware work is asynchronous. Admission returns immediately; poll the returned resource or subscribe to signed webhooks.
- 01
Create with an Idempotency-Key. The response includes the job ID, reserved credits and website URL.
- 02
Poll the native job or Responses resource while status is queued or in_progress.
- 03
Open website_url to inspect the full project UI and results available for that stage.
Signed webhooks
Create endpoints in Developer settings or with /v1/webhooks. Verify Ohmbo-Signature against the exact raw body and timestamp before processing the event.
signed = f"{timestamp}.{raw_body.decode()}".encode()
expected = hmac.new(signing_secret.encode(), signed, hashlib.sha256).hexdigest()
hmac.compare_digest(received_v1, expected)Errors, limits and credits
Every authenticated response reports the credential request window. A 429 includes Retry-After. Task admission also applies account-level concurrency, credits and job quotas.
- HTTP 401
- authentication_error
- HTTP 402
- insufficient_credits
- HTTP 409
- idempotency_conflict
- HTTP 422
- invalid_request
- HTTP 429
- rate_limited / quota
- HTTP 5xx
- service unavailable
- X-Request-Id
- X-RateLimit-Limit
- X-RateLimit-Remaining
- X-RateLimit-Reset
- Retry-After