---
title: "Start building"
canonical: "https://openvibe.exchange/start"
updated: null
---

# Start building

HTML: [Start building](https://openvibe.exchange/start)

# Start building

One endpoint, a key, and every answer says which model ran and why.

[Keys and the API](/api)

## The endpoint

`https://api.openvibe.exchange/v1/chat/completions` speaks OpenAI's Chat Completions, and `https://api.openvibe.exchange/v1/messages` speaks Anthropic's Messages API. Point an OpenAI client at `https://api.openvibe.exchange/v1`; the model's page has its own curl and SDK sample.

~~~~
curl https://api.openvibe.exchange/v1/chat/completions \
  -H "Authorization: Bearer $OPENVIBE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"openvibe/auto","messages":[{"role":"user","content":"Hello"}]}'
~~~~

A key is an OpenVibe.Network developer key: make one, name its scope, revoke it any time. It is shown once and never stored here.

[Make a key on Network](https://openvibe.network/developers) [Your own endpoint](/own)

## Four steps

1. **Make a key** at [openvibe.network/developers](https://openvibe.network/developers). It is a developer key for your project, and it is shown once.
2. **Point a client at the endpoint**: `https://api.openvibe.exchange/v1` for OpenAI, or `https://api.openvibe.exchange` for Anthropic's `/v1/messages`.
3. **Send one request** with `model: "openvibe/auto"`, or an exact model id from [Models](/models) to pin one artifact.
4. **Read the receipt**: every answer names the model that ran, its tokens, its exact cost, and why the router chose it. [Why this model](/why) shows how to read it; a run's own page is `https://ai.openvibe.services/runs/<id>` after you sign in with OpenVibe.

## Use the OpenAI SDK you already have

The same request in Python, in Node with streaming, or from an Anthropic client. The answer's `model` names the model that ran.

~~~~
# pip install openai
import os
from openai import OpenAI

client = OpenAI(base_url='https://api.openvibe.exchange/v1',
                api_key=os.environ['OPENVIBE_KEY'])
reply = client.chat.completions.create(
    model='openvibe/auto',          # the router picks; reply.model names the one that ran
    messages=[{'role': 'user', 'content': 'Name three uses for a paperclip.'}],
)
print(reply.model, reply.choices[0].message.content)
~~~~

~~~~
// npm i openai
import OpenAI from 'openai';

const client = new OpenAI({ baseURL: 'https://api.openvibe.exchange/v1', apiKey: process.env.OPENVIBE_KEY });
const stream = await client.chat.completions.create({
    model: 'openvibe/auto', stream: true,
    messages: [{ role: 'user', content: 'Name three uses for a paperclip.' }],
});
for await (const chunk of stream) process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
~~~~

~~~~
export ANTHROPIC_BASE_URL=https://api.openvibe.exchange
export ANTHROPIC_AUTH_TOKEN=$OPENVIBE_KEY
# Claude Code, or any Anthropic client, now speaks to /v1/messages
~~~~

## The six operations, for OpenVibe.AI apps

OpenVibe.AI's own operations stay at `https://ai.openvibe.services` for developer apps: chat, generate, summarize, classify, extract and embed, with JSON output on a schema. They authenticate with an app token from OpenVibe.Network for the audience `openvibe.ai`.

~~~~
TOKEN=$(curl -s -X POST https://openvibe.network/oauth/token \
  -d grant_type=client_credentials -d client_id=$APP -d client_secret=$SECRET \
  -d audience=openvibe.ai | jq -r .access_token)
# a five-minute token for an app (app_<ULID>), scoped to its project
~~~~

~~~~
curl -s -X POST https://ai.openvibe.services/api/v1/chat \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{ "messages": [ { "role": "user", "content": "Name three uses for a paperclip." } ] }'
# → { "run": { "id": "run_…", "status": "succeeded", "output": …, "provenance": …, "explain": … } }
~~~~

The same router answers both: Exchange's endpoint and AI's six operations use one catalog, one set of offers and one explanation. [Create a project and an app](https://openvibe.services/projects) · [API reference](https://openvibe.services/docs/api) · [Developer guide](https://github.com/OpenVibers/OpenVibe.AI#developer-apps).

## Sandbox and production

OpenVibe.AI developer apps run in one of two environments; the token says which one an app is in.

| Limit | Sandbox | Production |
| --- | --- | --- |
| Access to ai.app.run | Every sandbox app, without asking | Once OpenVibe staff add it to the project |
| Models | Free and local capacity only | Free and local capacity; metered models open with project budgets |
| Your project’s own provider | On /v1/chat/completions, keyed by a project secret granted to ai | The same |
| Free allowance | Per project, per provider | Per project, per provider |
| Who can read a run | The project that made it | The project that made it |
| A person’s own provider key | Never used | Never used |

## Keys, endpoints and questions

Part of [OpenVibe Services](https://openvibe.services/): the building blocks every OpenVibe product runs on, with one console, one account and one SDK. 7 models are on sale here right now.

[Keys and the API](/api) [Your own endpoint](/own) [Your own provider keys](https://ai.openvibe.services/you) [Questions](/faq)
