Docs
Developers

Vectr API Reference

The Vectr API provides REST and SSE endpoints for token discovery, market data, trading quotes, creator fees and AI-agent jobs on Robinhood Chain — the same API the website, Terminal, Swap, CLI and MCP server all run on.

Updated

RESTSSE streamingX-API-KeyJSON
Basics

Base URL, auth and limits

Base URL
https://api.vectr.bot
Format
JSON over HTTPS
Rate limit
200 requests / 1 min / route / IP
Agent auth
X-API-Key: vectr_…
Account auth
X-login session cookie
Key scoping
read-only · IP allowlist · recipient allowlist
Browser CORS
Vectr's own sites only; call from a server
Versioning
Unversioned; see Compatibility below
public

No header needed — all token, price, fee and profile reads above

X-API-Key

Agent job endpoints and signing. Keys are read-write by default — set read-only, IP-allowlist and recipient-allowlist restrictions at creation in your profile

session

Account endpoints (/orders, /security, /api-keys, /files, /agent/memory) use the X-login session, not API keys

Compatibility

Unversioned, additive, logged

There is no version prefix and no version header: the OpenAPI document and this page describe the API as it runs today.

Additive changes
New endpoints, optional parameters, response fields, enum values and stream events can ship at any time, without notice.
Your client
Ignore fields and events you don't recognise instead of failing on them.
Breaking changes
Removing or renaming an endpoint or field, or changing a type, a default or an auth requirement, is recorded on the changelog and marked breaking when it ships, not in advance.
The spec
openapi.json is OpenAPI 3.1 and follows the same policy. Its info.version is the date it was last revised, not an API version.
Quickstart

A job in two calls

Agent endpoints take a prompt, return a job id, and hand any built transaction back unsigned: nothing broadcasts until you submit it.

curl -X POST https://api.vectr.bot/agent/job -H "X-API-Key: vectr_…" -H "Content-Type: application/json" -d '{"prompt": "buy 0.05 ETH of the top token"}'
→ { "success": true, "jobId": "cm…", "threadId": "cm…", "status": "pending" }
curl https://api.vectr.bot/agent/job/cm… -H "X-API-Key: vectr_…"
→ { "status": "completed", "response": "…", "richData": { …the unsigned transaction, or null… } }

The same job in TypeScript

const API = "https://api.vectr.bot";
const headers = { "X-API-Key": process.env.VECTR_API_KEY!, "Content-Type": "application/json" };

const { jobId } = await fetch(`${API}/agent/job`, {
  method: "POST", headers, body: JSON.stringify({ prompt: "what tokens are trending?" }),
}).then((r) => r.json());

let job;
do {
  await new Promise((r) => setTimeout(r, 1500));
  job = await fetch(`${API}/agent/job/${jobId}`, { headers }).then((r) => r.json());
} while (job.status === "pending" || job.status === "processing");

console.log(job.response, job.richData); // richData: the unsigned transaction, if one was built

And in Python

import os, time, requests

API = "https://api.vectr.bot"
headers = {"X-API-Key": os.environ["VECTR_API_KEY"]}

job = requests.post(f"{API}/agent/job", headers=headers, json={"prompt": "what tokens are trending?"}).json()
while True:
    time.sleep(1.5)
    job = requests.get(f"{API}/agent/job/{job['jobId']}", headers=headers).json()
    if job["status"] not in ("pending", "processing"):
        break

print(job["response"], job["richData"])  # richData: the unsigned transaction, if one was built

Tokens & market data

  • Top tokens by market cap (max 200)

  • GET/tokens/:addresspublic

    Token detail — price, mcap, curve state, creator

  • Name or symbol match, up to 10 results

  • GET/tokens/statspublic

    Platform totals — tokens, traders, fees

  • Latest buys and sells across all tokens

  • GET/tokens/:address/activitypublic

    Per-token feed · ?limit, ?before, ?kind=buy|sell

  • GET/tokens/:address/ohlcvpublic

    Candles for charts

  • GET/tokens/portfolio/:walletpublic

    Public holdings of any wallet

  • GET/tokens/created-by/:creatorpublic

    Tokens launched by an address

  • GET/tokens/trades/:wallet?limit=50public

    Public trade history of a wallet

  • GET/quote-assetspublic

    Pairing assets — native coin and Stock Tokens

  • GET/price/nativepublic

    Native coin USD price

  • GET/configpublic

    Chain id, RPC, contract addresses, live fee rates

  • GET/stockspublic

    Stock Tokens available as pairing assets

  • Public agent profiles

  • GET/agent-profiles/:walletpublic

    One agent profile

  • Published agent skills

Quoting & trading

  • GET/tokens/:curve/quote?type=buy&amount=0.1public

    Price a buy or sell before signing — :curve is the token's curveAddress

  • POST/tokens/:curve/build-txpublic

    Build an unsigned buy/sell transaction

Launch & creator fees

  • GET/launch/estimate-fee?from=0x…public

    Estimated gas for a launch

  • GET/launch/fees/:walletpublic

    Accrued, claimable creator fees per asset

  • GET/launch/earnings/:wallet?days=30public

    Creator earnings history and projections

  • GET/launch/daily-limit/:walletpublic

    Launches used / remaining today

AI agent jobs

  • POST/agent/jobX-API-Key

    Submit a prompt — { "prompt": "…", "model"? } → { jobId }

  • GET/agent/job/:idX-API-Key

    Poll status → response · richData (transaction to confirm)

  • POST/agent/job/:id/cancelX-API-Key

    Cancel a running job

Realtime (SSE)

  • GET/tokens/streampublic

    Server-sent events for every indexed trade/price tick

  • GET/tokens/:address/stream?res=5mpublic

    Per-token candle stream — resumable via Last-Event-ID

Errors

One error shape: statusCode, message, code?, path

401 { "statusCode": 401, "message": "X-API-Key header required", "path": "/agent/job" }
401 { "statusCode": 401, "message": "Invalid or revoked API key", "path": "/agent/job" }
403 { "statusCode": 403, "message": "IP 203.0.113.7 is not in this key's allowlist", "path": "/agent/job" }
404 { "statusCode": 404, "message": "Job … not found", "path": "/agent/job/…" }
429 global rate limit (200 req/1min)

Keep going

Read-only endpoints are safe to call from any server or script. Agent jobs only prepare transactions — but a read-write API key can broadcast through /wallet/sign-and-submit, so scope keys down to read-only whenever a key only needs data.