The execution layer for OpenBB Workspace. OpenBB gives analysts and AI agents world-class financial data — but it can't move a dollar. This backend adds the missing half: screen an asset in OpenBB, then trade it, dollar-cost-average into it, or settle agentic API revenue — all funded and settled in stablecoins, 24/7.
It registers as a standard OpenBB custom backend (serves /widgets.json + /apps.json) and ships a ready-made "Research → Execution" app. Zero-config: it runs on deterministic demo data out of the box, and goes live the moment you set a FurlPay API key.
Maintained by FurlPay · MIT licensed.
Every incumbent in 2026 ships data + MCP and stops there — OpenBB, Morningstar, Bloomberg. None execute. FurlPay is the open-source layer that does. This plugin drops that execution layer directly into the OpenBB canvas an analyst already lives in.
| Widget | Type | What it does |
|---|---|---|
| Research → Execute | markdown | Explains the research→execute loop; shows live/demo mode |
| Portfolio Summary | metric | Total value, invested, USDC cash, unrealized P&L |
| Positions | table | Open positions with cost basis and P&L (green/red) |
| Stablecoin Balances | table | USDC + tokens across Solana and Base |
| x402 Paywall Revenue | table + chart | Per-resource agentic API calls and USDC revenue |
| Recent Payments | table | Latest checkout / card / x402 payments |
| Place Order ⚡ | form | Buy/sell a fractional position, funded in USDC |
| Auto-Invest (DCA) ⚡ | form | Schedule a recurring stablecoin buy |
| Send Stablecoins ⚡ | form | Send USDC/USDT to a wallet or FurlPay handle |
⚡ = action widget — the execution OpenBB itself doesn't have. Each form POSTs to FurlPay and refreshes a blotter table with the result.
pip install -r requirements.txt
uvicorn main:app --reload --port 7777Then in OpenBB Workspace → Apps → Connect backend → Custom backend, add:
http://localhost:7777
The FurlPay — Research to Execution app appears with four tabs (Overview, Investing, Agentic, Execute). Every widget renders immediately on demo data.
cp .env.example .env
# edit .env: FURLPAY_API_KEY=fp_live_sk_...With a key set, reads hit GET https://api.furlpay.com/v1/... and the action forms execute real orders, DCA schedules, and transfers. Without a key the plugin stays in demo mode — every call returns deterministic sample data and the forms simulate (never touching the network), so you can evaluate the whole app safely.
Point at a sandbox with FURLPAY_API_BASE=https://sandbox.api.furlpay.com/v1.
GET /widgets.jsonreturns a dict of widget definitions (OpenBB's required shape).GET /apps.jsonreturns an array with one app; its tabs place widgets on a 40-column grid.- CORS allows
https://pro.openbb.co(+ localhost) so the browser client can reach the backend. - Action widgets use OpenBB's
formparameter: the form POSTs to an execution endpoint; on200the widget auto-refreshes its blotter GET.
docker build -t furlpay-openbb .
docker run -p 7777:7777 -e FURLPAY_API_KEY=fp_live_sk_... furlpay-openbbAny host that exposes port 7777 over HTTPS works as an OpenBB custom backend — Fly, Render, a Vercel Python function, or your own box.
pip install pytest
python -m pytest test_backend.py -q # 12 contract tests
# or, no pytest:
python test_backend.pyThe suite asserts the exact OpenBB contract: widgets.json is a dict and apps.json an array, every widget endpoint has a live route, every app layout references a real widget, every action form POSTs and its blotter reflects the submission, and metric/table/markdown shapes are correct. Green = it will register and render in OpenBB.
This backend orchestrates FurlPay's public API into OpenBB widgets. It does not custody funds or sign transactions itself — execution happens in the FurlPay API, which handles wallets, MPC custody, brokerage (via Alpaca), and x402 settlement. Point it at your own FurlPay account and it operates on your data.
MIT