Live video on Bitcoin BSV, inside your app.
Create streams for your users, take their video from OBS, any RTMP encoder or a file, and let viewers pay them by the minute. BSVKey publishes every stream's proofs on chain for you, so nothing has to stay open on your side. Use the HTTP API, or connect an AI agent to the hosted MCP server.
Your API keys
Keys come with Pro. Building something bigger? Talk to us about a partner account.
How it works
- Get a key. With Pro, make one above (
lk_…); partners get theirs from us. Keep it on your server. - Add credit. Pay any amount of BSV to the platform address shown by
GET /v1/account, then send us the transaction id. The credit pays the network fees and hosting of your streams. - Create a stream for one of your users, with their Bitcoin BSV address for payouts. You get an RTMP address and key, or an upload address for a video file.
- Send the video. We encrypt it, host it, and publish its header, one proof per window, and an end record on Bitcoin BSV.
- Viewers pay the creator directly, a few cents a minute, through a payment channel their own wallet controls. Free streams work too.
API
Base address https://live.bsvkey.com. Send Authorization: Bearer lk_…. Bodies and answers are JSON.
GET /v1/streams?q=&status=live | Search public streams. No key needed. |
GET /v1/streams/{id} | One stream: status, price, watch and embed links, and its on-chain proofs. With your key, also its RTMP key and upload token. |
POST /v1/streams | Create a stream. title, payoutAddress (required), priceUsdPerMin (0 = free), kind (live or file), preset (tiny, low, sd; hd and fhd for Pro creators), windowSecs (10, 20, 30, 60), description, tags, category, visibility. |
POST /v1/streams/{id}/end | End a live stream. |
GET /v1/account | Your credit, usage, the platform address and today's hosting prices. |
POST /v1/account/credit | { "txid": "…" } of a payment to the platform address. Checked on chain; each payment counts once. |
PUT /v1/account/webhook | { "url": "https://…" }. Returns the secret for checking signatures. |
curl -X POST https://live.bsvkey.com/v1/streams \
-H "Authorization: Bearer lk_..." -H "content-type: application/json" \
-d '{"title":"Friday show","payoutAddress":"1...","priceUsdPerMin":0.01,"kind":"live","preset":"sd"}'
# answer (shortened)
{ "streamId": "…", "watchUrl": "https://live.bsvkey.com/watch/…",
"rtmpUrl": "rtmp://live.bsvkey.com:1935/live", "rtmpKey": "bk_…", "uploadToken": "…",
"proofs": { "headerTxid": null, "windows": [], "endTxid": null } }
For a file, create with "kind": "file", then PUT the file to upload.put and POST to upload.start, both with the header x-upload-token.
Webhooks
We POST JSON to your address for stream.live, stream.anchored (each window's proof, with its transaction id), stream.ended, stream.stopped and credit.low. Check X-BSVKey-Signature: the HMAC-SHA256 of the raw body, made with your webhook secret. We try three times.
MCP server
Point any MCP client at https://live.bsvkey.com/mcp (streamable HTTP). Search and stream details work without a key; add Authorization: Bearer lk_… to create and end streams and read your account.
{ "mcpServers": { "bsvkey-live": { "type": "http", "url": "https://live.bsvkey.com/mcp",
"headers": { "Authorization": "Bearer lk_..." } } } }
Tools: search_streams, get_stream, get_chat, create_stream, end_stream, get_account, add_credit.
Chat bots
A bot is a Bitcoin BSV wallet the creator allows in their chat. The creator opens a video's chat, presses Moderation and adds the bot's address and a name under Bots; its messages then show a BOT tag. If the creator also adds it under Moderators, it can delete messages and time chatters out.
- Read the chat as a live event feed:
GET /api/streams/<id>/chat/events(Server-Sent Events:messageandremoved), or pollGET /api/streams/<id>/chat?after=<ms>. MCP: theget_chattool. - Post with
POST /api/streams/<id>/chatand{"name", "text", "signed"}, wheresignedis the bot wallet's signature over{"streamId", "text", "at"}(JSON, SHA-256, ECDSA:{"msg", "sig", "pubkey"}). - Moderate with
POST /api/streams/<id>/chat/moderateand{"op": "delete" | "timeout" | "ban" | "unban", "target", "signed"}, signed over{"action": "chat-moderate", "streamId", "op", "target", "at"}. The target is a message id (or, to unban, the chatter). - Rules apply to bots as to people, except slow mode. Signatures are valid for 10 minutes.
A working bot that answers !help, !price and !rules and can remove messages with words you list is in our repository at tools/chat-bot.mjs: node tools/chat-bot.mjs --stream <id> --wif-file bot.wif --name Helper.
Fees
Your credit pays the Bitcoin BSV network fee of each proof (a fraction of a cent) and the hosting fee per minute shown by GET /v1/account. On paid streams, BSVKey keeps 10% of what viewers pay; the rest goes straight to the creator's address. See the Terms.