Nebula speaks the OpenAI chat-completions API. If you already call OpenAI, change the base URL and the key and the rest of your code stays as it is.
One family, one flat rate. Choose the surface that fits the request.
nebula-4.5Adaptive intelligence. Every request is routed across the engine matrix by meaning, cost and learned reputation. You do not pick a tier.
nebula-vVision, image and audio understanding. Screenshots, documents, video frames and speech in one context.
nebula-realtimeLow-latency bidirectional voice, vision and screen over a WebSocket. The engine behind live calls and meetings.
nebula-embedText embeddings for retrieval and RAG.
nebula-imageText-to-image generation.
Secure your API requests with API keys.
Include your API key in the X-API-Key header:
Get started with Nebula in minutes.
curl -X POST https://api.breachline.io/api/v1/llm/v1/chat/completions \
-H "X-API-Key: bl_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "nebula-4.5",
"messages": [
{"role": "system", "content": "You are a security analyst."},
{"role": "user", "content": "Analyze this SQL injection: SELECT * FROM users WHERE id = \'" + input + "\'"}
],
"max_tokens": 2048,
"temperature": 0.3
}'from openai import OpenAI
# Initialize client with Nebula endpoint
client = OpenAI(
api_key="bl_live_xxxxxxxxxxxx",
base_url="https://api.breachline.io/api/v1/llm/v1"
)
# Chat completion
response = client.chat.completions.create(
model="nebula-4.5",
messages=[
{"role": "system", "content": "You are a security expert."},
{"role": "user", "content": "Analyze this vulnerability report..."}
],
max_tokens=2048,
temperature=0.3
)
print(response.choices[0].message.content)import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'bl_live_xxxxxxxxxxxx',
baseURL: 'https://api.breachline.io/api/v1/llm/v1'
});
async function analyzeVulnerability(finding: string) {
const response = await client.chat.completions.create({
model: 'nebula-4.5',
messages: [
{ role: 'system', content: 'You are a security analyst.' },
{ role: 'user', content: `Analyze: ${finding}` }
]
});
return response.choices[0].message.content;
}Enable Nebula to execute functions and interact with external systems.
Tool calling is available on nebula-4.5, and is routed to a tool-capable engine automatically.
from openai import OpenAI
client = OpenAI(
api_key="bl_live_xxxxxxxxxxxx",
base_url="https://api.breachline.io/api/v1/llm/v1"
)
# Define security tools
tools = [
{
"type": "function",
"function": {
"name": "scan_target",
"description": "Perform a security scan on a target",
"parameters": {
"type": "object",
"properties": {
"target": {"type": "string", "description": "URL or IP to scan"},
"scan_type": {"type": "string", "enum": ["quick", "full", "stealth"]}
},
"required": ["target"]
}
}
},
{
"type": "function",
"function": {
"name": "lookup_cve",
"description": "Look up CVE details",
"parameters": {
"type": "object",
"properties": {
"cve_id": {"type": "string", "description": "CVE ID (e.g., CVE-2024-1234)"}
},
"required": ["cve_id"]
}
}
}
]
response = client.chat.completions.create(
model="nebula-4.5",
messages=[{"role": "user", "content": "Scan example.com for vulnerabilities"}],
tools=tools,
tool_choice="auto"
)
# Handle tool calls
if response.choices[0].message.tool_calls:
for tool_call in response.choices[0].message.tool_calls:
print(f"Tool: {tool_call.function.name}")
print(f"Args: {tool_call.function.arguments}")Server-sent events on the standard endpoint: set stream=True and tokens arrive as they are generated.
from openai import OpenAI
# Streaming is server-sent events on the standard endpoint. Set stream=True.
# (There is no separate socket for chat; the only WebSocket we expose is the
# realtime voice/vision plane at /api/v1/llm/v1/realtime.)
client = OpenAI(
api_key="bl_live_xxxxxxxxxxxx",
base_url="https://api.breachline.io/api/v1/llm/v1",
)
stream = client.chat.completions.create(
model="nebula-4.5",
messages=[
{"role": "user", "content": "Write a security audit report for example.com"}
],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)Integrate Nebula with MCP-compatible clients.
Model Context Protocol is how Nebula reaches your tools. Expose a server and it can call it during an engagement. Use Nebula with Claude Desktop, VS Code, and other MCP-compatible clients.
// MCP client configuration (add to your MCP client's config file)
{
"mcpServers": {
"nebula": {
"command": "npx",
"args": ["-y", "@breachline/mcp-server"],
"env": {
"NEBULA_API_KEY": "bl_live_xxxxxxxxxxxx",
"NEBULA_BASE_URL": "https://api.breachline.io/api/v1/llm/v1"
}
}
}
}
// Use with MCP SDK
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
const client = new Client({ name: "my-app", version: "1.0.0" });
await client.connect(transport);
const result = await client.callTool({
name: "nebula_chat",
arguments: {
model: "nebula-4.5",
message: "Analyze security headers for example.com"
}
});Need higher limits? Contact us for enterprise plans.
/api/v1/llm/v1/chat/completionsCreate a chat completion (OpenAI compatible)
/api/v1/llm/v1/completionsSimple text completion endpoint
/api/v1/llm/v1/modelsList available models and pricing
/api/v1/llm/v1/usage/currentGet current usage statistics
Create an API key and start building with Nebula.