Skip to content
Operon Install the SDK
Live on npm

Install. Run. Earn.

Install the publisher SDK. Earn revenue from your agent's responses.

Drop @operon/sdk into any TypeScript or JavaScript agent. UUID sandbox lane works without an API key. Register for production demand with one command.

One command, no account.

npm install @operon/sdk

That's the install. No account, no API key required to start.

Two calls in your agent.

import { initOperon } from "@operon/sdk";

const operon = initOperon({
  url: "https://api.operon.so",
  publisherName: "my-agent",
});

// the user's message, straight from your agent
const userQuery = "cheapest way to swap 2 ETH to USDC?";

const result = await operon.getPlacement(userQuery, {
  placement_context: "user asked about swapping ETH for stables",
  asset: "ETH",
  intent: "swap",
  category: "defi",
});

if (result.decision === "filled") {
  // result.placement.service is the advertiser
  // Merge it into your response naturally
}

The SDK mints a UUID on first run and persists it to ~/.operon/client.json. Subsequent calls run against the sandbox lane: 100 calls/UUID/hour, no API key.

Verify the wiring any time: npx @operon/sdk test fires one sandbox placement, and npx @operon/sdk status shows your UUID, registration state, and quota. Using CommonJS? The npm README has the require() variant of this snippet.

Graduate to production.

When you're ready to graduate to the production demand pool:

npx @operon/sdk register

You'll be prompted for email, framework, agent description, and expected monthly call volume. Same UUID continues working at 10x the sandbox quota. You'll receive a confirmation email shortly after and enter the early-access pipeline.

Native placements. Revenue per win.

Sponsored recommendations matched to your agent's response context. Placements are native to your response format: every filled payload carries a sponsored flag, creative text when the advertiser provides it, a tracking clickUrl for attribution, and any category disclosure text to render alongside your "via operon" line. Revenue share to the publisher on every won placement. No minimum traffic requirements.

Trust signal on your endpoint begins accruing from your first sandbox call.

Economics

Your share of every win.

Operon runs an auction across the demand pool for every placement request. Publishers earn a revenue share on each won placement, and every filled response reports the winning bid. No platform fees, no setup costs.

Optional context narrows the match.

Optional context fields narrow auction matching:

  • category "defi", "fintech", "travel", "insurance", "ecommerce", "saas", "health", "education", "general"
  • asset free-form (e.g., "ETH", "yield-farming")
  • intent optional hint; recognized values include "swap", "buy", "stake", "bridge", "compare", "optimize", "rebalance". Omit it and Operon classifies intent from the query
  • placement_context a short string describing what the user just asked

The richer your context, the better the auction match.

Per-call placement decisions.

The SDK returns the full placement decision per call: which advertiser won, the winning bid, and the placement payload. Aggregate these in your own observability stack.

A per-publisher reporting endpoint is on the roadmap.

Native plugin available.

elizaos plugins add @operon/plugin-publisher-sdk

The plugin wraps @operon/sdk and integrates with the ElizaOS Provider lifecycle. Same sandbox + register flow.

Frequently asked questions.

How much do publishers earn?

Publishers earn a revenue share on each won placement. Rates vary by category, advertiser bid, and demand pool depth. Every filled response includes the winning bid (placement.bidPrice, in basis points of 1 USDC - divide by 10,000 for dollars) so you can track real numbers.

What's the minimum traffic requirement?

None. The SDK works at any volume, from a single test call to production traffic.

How do I integrate with LangChain / Vercel AI SDK / CrewAI / custom stacks?

Same way as any TypeScript or JavaScript agent. Call initOperon once, then call getPlacement on each user-facing response.

What's the difference between sandbox and production?

Sandbox uses an auto-minted UUID, no API key required, capped at 100 calls/hour. Registering (npx @operon/sdk register) raises that to 1000 calls/hour and queues you for production. Production access arrives as an API key: email hi@operon.so when you're ready, then add apiKey to initOperon to route to the live demand pool.

How does trust work?

Trust signal begins accruing from your first sandbox call. Operon monitors endpoint behavior over time. Trust is earned through behavior, not paid.

Can I use this without a crypto wallet?

Yes for publishers. Wallets are only required on the advertiser side (via x402 onboarding).

Do I need to handle x402 in my publisher integration?

No. x402 is the advertiser-side onboarding mechanism. Publishers don't need to know about it.

What categories does Operon support?

defi, fintech, travel, insurance, ecommerce, saas, health, education, general. Each has its own demand pool composition. When no compatible demand matches your context, the response is a "blocked" decision with a reason string (no placement injected, no error thrown).

Five minutes from install to a live placement.

npm install @operon/sdk
npx @operon/sdk register

Questions: hi@operon.so. Source: github.com/operonhq.

Skills for marketplace distribution. Three SKILL.md files, free, MIT.
For skill marketplaces →
Building an advertiser? See the x402 onboarding flow.
For advertisers →

Install. Run. Earn.

npm install @operon/sdk. UUID sandbox lane. No API key required.