---
title: "The Design API · OpenVibe.Design"
canonical: "https://openvibe.design/developers"
updated: null
---

# The Design API · OpenVibe.Design

HTML: [The Design API · OpenVibe.Design](https://openvibe.design/developers)

For developers

# The Design API

The theme catalog is open JSON. A theme is a set of CSS custom properties every OpenVibe site reads; Network keeps which one each person uses.

## The SDK, the files and the versions

openvibe-sdk is the supported client for this platform: the server client, the browser client, their ES modules and their TypeScript declarations. It ships from the OpenVibers/OpenVibe.SDK repository by tag, so a service pins a version rather than floating on a branch.

Add the pin to `package.json`, then install:

~~~~
{ "dependencies": {
    "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.161.0"
} }
~~~~

- `index.js`: The server client: auth, accounts, the async PostgreSQL data layer, events, media, AI runs and tools.
- `browser.js`: The browser client, with the same subpath modules where the browser has them.
- `esm/*.mjs`, `types/*.d.ts`: The ES module entry points and the TypeScript declarations, one pair per subpath export.
- `openvibe-contracts`: v0.419.0, pinned by this site.
- `openvibe-sdk`: v0.161.0, pinned by this site.
- `openvibe-shared`: v4.235.0, pinned by this site.
- `openvibe-publishing`: v1.7.0, pinned by this site.

The deployed release and its file hashes are at [/release.json](/release.json); the whole HTTP API is described by [/openapi.json](/openapi.json); an AI assistant can call it through the MCP server at `POST /mcp`.

## Endpoints

- `POST /api/v1/designs`: Create three variants with {prompt, kind, themeId?, who?}: Claude Opus 5.5 first by default, or who: "compare" for three providers; guests receive a secret edit link.
- `GET /api/v1/designs/:id`: Poll generation status, read each frame, the pick and the version list; guests send X-Design-Key.
- `POST /api/v1/designs/:id/theme`: Change the token theme with {themeId}.
- `POST /api/v1/designs/:id/pick`: Choose the working frame with {variantIndex}; the pick is recorded as one Arena vote.
- `POST /api/v1/designs/:id/edit`: Chat edit the working frame with {instruction}; one paid AI run and a small per-design budget.
- `POST /api/v1/designs/:id/click`: Apply {path, text?, color?, spacing?, align?} to one element; validated paths and theme tokens only.
- `GET /api/v1/designs/:id/versions`: Every saved version with its model/provider provenance; POST /undo and /redo move the pointer.
- `GET /api/v1/tokens/:theme?format=`: A theme as code (OpenVibe Tokens): css, tailwind, compose (Android), swiftui (iOS), flutter, figma or json (W3C DTCG). Its other half comes along unless both=0; download=1 names a file.
- `GET /api/v1/tokens`: The export targets.
- `GET /fonts`: Every self-hosted open font family in its own face, with its weights, licence and CSS.
- `GET /fonts/css2?family=Name:wght@400;700`: The self-hosted fonts as @font-face CSS, the same query shape as Google's css2; a name we do not have is a CSS comment.
- `GET /api/v1/fonts`: The self-hosted families as JSON: family, slug, weights, licence, source. The wider catalogue is /api/v1/fonts/library.
- `GET /api/v1/components`: The components' contract: anatomy and tokens, props, states, a11y, layout, and Compose and SwiftUI reference views.
- `POST /api/v1/components/validate`: Check a kit document ({ doc }): known components and props, typed values, children, size, links. Answers { ok, errors }.
- `POST /mcp`: MCP for AI assistants (Streamable HTTP, protocol 2025-06-18, no auth): openvibe\_design\_list\_themes, openvibe\_design\_get\_theme\_tokens, openvibe\_design\_list\_components, openvibe\_design\_get\_component and openvibe\_design\_validate\_kit\_document, all read-only.
- `GET /api/themes`: Every public OpenVibe theme with its colours (Network's catalog).
- `GET /api/themes/:id`: One theme.
- `GET /api/me/theme`: Your active theme (signed in).
- `PUT /api/me/theme`: Use a theme, with optional custom colours (signed in; from this site only).
- `GET /api/me/theme/history`: Your earlier looks, newest first; POST /api/me/theme/history/:id/restore brings one back.

Themes also export and import as `openvibe-theme@1` files through [Network's theme API](https://openvibe.network/api/themes).
