Skip to main content

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/v1

Use 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.

  1. 01

    Create with an Idempotency-Key. The response includes the job ID, reserved credits and website URL.

  2. 02

    Poll the native job or Responses resource while status is queued or in_progress.

  3. 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