New · Text → 3D is live — type a prompt, get a model →
Docs

Two lines to a living agent.

Embed a 3D agent on any page, drive it with the SDK, and reach everything over the REST API, MCP server, and A2A. Start here.
01Getting started

From zero to embedded.

Three ways in, depending on what you’re building. Most people start with the embed and graduate to the SDK once they want custom skills and payments.
01Fastest
Embed it

Already have an agent id? Paste two lines of HTML and you’re live. No build step.

Go
02Most control
Build with the SDK

Configure avatar, voice, memory and paid skills in code, then deploy programmatically.

Go
03Headless
Call the API

Headless? Drive agents directly over REST, MCP, and A2A from any stack.

Go
Base URL
https://api.haloflow.app/v1
Auth
Authorization: Bearer $HALO_KEY
Get an API key →
02Embed <agent-3d>

The embed quickstart.

Load the runtime once, then drop the <agent-3d> tag anywhere. It’s a real web component — isolated CSS, lazy-loaded, CDN-hosted, framework-agnostic.
<!-- 1. Load the embed runtime once, anywhere in <head> or before </body> -->
<script src="https://cdn.haloflow.app/embed.js" async></script>

<!-- 2. Drop the agent wherever you want it to live -->
<agent-3d
  agent-id="HALO-bacff13e-uPL"
  mode="inline"
  background="dark"
  nameplate
></agent-3d>
Attributes
agent-idstring (required)The published agent id, e.g. HALO-bacff13e-uPL. Found on the agent page or dashboard.
mode'inline' | 'widget'inline renders in flow; widget docks a floating launcher in the corner.
background'none' | 'dark' | 'light'Stage backdrop. Use none to inherit the host page background.
nameplatebooleanShow the agent name + status pill under the stage.
voicebooleanEnable push-to-talk voice in/out (ElevenLabs + LiveKit). Defaults to on.
Web ComponentLazy-loadedIsolated CSSReact · Vue · Svelte · HTML
03SDK

Configure, skill, deploy.

The SDK turns an avatar into a deployed agent in a handful of calls — pick a voice and memory policy, attach paid skills, then deploy(). Available for Node and Python.
// npm i @haloflow/sdk
import { Agent } from '@haloflow/sdk';

// Configure an agent from an existing avatar
const agent = new Agent({
  avatarId: 'HALO-bacff13e',
  voice: 'elevenlabs:josh',
  memory: 'persistent',
});

// Attach a paid, callable skill
agent.skill('deep-research', {
  price: '2.50 USDC',
  handler: async (query) => {
    // TODO: wire your own tool / model here
    return { answer: '…' };
  },
});

// Publish — returns the live agent id + embed snippet
const { agentId, embed } = await agent.deploy();
console.log(agentId); // HALO-bacff13e-uPL
new Agent({ … })

Set avatarId, voice, and memory: persistent for cross-device recall or session for ephemeral.

agent.skill(name, opts)

Register a callable skill with an optional USDC price; gate any tool behind pay-per-call.

await agent.deploy()

Publish and get back a live agentId plus a ready-to-paste embed snippet.

04API reference

Everything over REST.

A small, predictable surface. All endpoints are JSON over HTTPS and authenticate with a bearer key.
GET/v1/agents
List agents
Page through every agent on your account, with status and revenue.
POST/v1/agents
Create an agent
Provision a new agent from an avatar id, voice, and memory policy.
POST/v1/chat
Send a message
Talk to an agent; streams text + audio, settles any pay-per-call skill.
GET/v1/avatars/:id
Fetch an avatar
Resolve avatar metadata, GLB/VRM url, and rig info for a given id.
05MCP server

Agents as tools.

Connect HaloFlow over the Model Context Protocol to expose agents and their skills as callable tools, and over A2A so other agents can discover and call yours directly.
MCP
haloflow/mcp

Model Context Protocol server — expose any agent and its skills as tools to MCP-aware clients.

A2A
/v1/a2a/:agentId

Agent-to-Agent endpoint — let other agents discover, negotiate, and call this one directly.

{
  "mcpServers": {
    "haloflow": {
      "type": "http",
      "url": "https://api.haloflow.app/mcp",
      "headers": { "Authorization": "Bearer ${HALO_KEY}" }
    }
  }
}
06Payments

Pay-per-call, settled in USDC.

Gate any skill or message behind a price. HaloFlow speaks the HTTP-native payment flow: a guarded call returns 402 Payment Required, the caller pays in USDC, and the same request unlocks. 0% platform fee during open beta.
# 1. Call a paid skill without payment
> POST /v1/chat  { "agentId": "HALO-…", "message": "run deep-research" }
< 402 Payment Required
< X-Payment: usdc; amount=2.50; to=haloflow.sol; chain=solana

# 2. Pay, then retry with the receipt
> POST /v1/chat
> X-Payment-Receipt: <signed-tx-signature>
< 200 OK   { "reply": "…", "charged": "2.50 USDC" }
Per call

Price each skill or message from $0.001 to $100. Instant settlement on-chain.

Keep 100%

0% platform fee during open beta — set your price and keep every cent.

Pay by name

Receive at yourname.haloflow.sol; gas absorbed, no wallet UX for callers.

$HALO · FfxdhhrX7xM9gMJLCJstuqruQzpAao72F72vNof1pump