API Reference

Complete reference for all Velora API endpoints.

Interactive API Explorer

Try API calls directly in your browser with full request/response schemas.

Open API Explorer →

Base URL

https://api.velora.tv

Authentication: Most endpoints require a valid access token. Include it in the Authorization header: Authorization: Bearer YOUR_TOKEN

OAuth & Authentication

GET/api/developer/oauth/authorize

Preview authorization (get app info for consent page)

POST/api/developer/oauth/authorize

Complete authorization (exchange consent for code)

POST/api/developer/oauth/token

Exchange code for access token or refresh token

GET/api/developer/oauth/scopes

List all available OAuth scopes

Users

GET/api/users/me

Get current authenticated user

GET/api/users/:username

Get public user profile by username

GET/api/users/search

Search users (query: ?q=term&limit=10)

GET/api/users/:userId/followers

Get user followers

GET/api/users/:userId/following

Get users following

PUT/api/users/me

Update current user profile (requires user:write)

Streams

GET/api/streams/live

Get live streams (public)

GET/api/streams/browse

Browse live streams with filters (public)

GET/api/streams/featured

Get featured streams (public)

GET/api/streams/top

Get top streams by viewers (public)

GET/api/streams/growing

Get fastest growing streams (public)

GET/api/streams/user/:username

Get stream by username (public)

GET/api/streams/user/:username/vods

Get VODs for a channel (public)

Streaming Integration (OAuth)

GET/api/integrations/oauth/stream/setup

Get stream key and ingest URLs (requires stream:key)

GET/api/integrations/oauth/stream/info

Get current stream info (requires stream:read)

PUT/api/integrations/oauth/stream/info

Update stream title/category (requires stream:write)

GET/api/integrations/oauth/stream/categories

List available stream categories

POST/api/integrations/oauth/stream/key/regenerate

Regenerate stream key (requires stream:key)

Chat

GET/api/chat/channels/:channelId/history

Get recent chat messages (public, no auth required - max 100 messages)

GET/api/chat/channels/:channelId/viewersNew

Get current viewer list with usernames, avatars, roles, and anonymous count (public, accepts channelId or username)

GET/api/chat/channels/:channelId/stats

Get live chat statistics for a channel (public)

GET/api/chat/channels/:channelId/policy

Get chat moderation policy and rules (public)

POST/api/integrations/oauth/chat/channels/:channelId/messages

Send a chat message with optional effects (requires chat:write)

POST/api/integrations/oauth/chat/channels/:channelId/moderate

Moderate a user (timeout, ban, delete message - requires chat:moderate)

GET/api/chat/slash-commands

List available slash commands (public)

Emotes

GET/api/emotes

Get all emote collections (global + channel if ?channel=username)

GET/api/emotes/global

Get global emotes only

GET/api/emotes/channel/:username

Get channel emotes by username

GET/api/emotes/resolve

Resolve emote codes to URLs (query: ?codes=emote1,emote2)

Badges

GET/api/badges/catalog

Get global badge catalog (public, query: ?category=event|achievement|system)

GET/api/badges/channel/:username

Get subscription badges for a channel by username (public)

GET/api/badges/user/:usernameNew

Get badges for a user, optionally in a channel context (public, query: ?channel=channelUsername)

Followers

POST/api/users/follow/:userId

Follow a user (requires auth)

DELETE/api/users/follow/:userId

Unfollow a user (requires auth)

GET/api/users/follow-status/:userId

Check if following a user (requires auth)

GET/api/users/:userId/followers

Get user followers (public)

GET/api/users/:userId/following

Get users they follow (public)

Categories

GET/api/categories

List all stream categories (public)

GET/api/categories/search

Search categories (public, query: ?q=term)

Clips

GET/api/clips/:clipId

Get clip by ID (public)

GET/api/streams/:username/clips

Get clips for a channel by username (public)

POST/api/streams/:username/clips

Create a clip (requires auth)

Polls

GET/api/streams/:username/polls/active

Get active poll for a channel (public)

POST/api/streams/:username/polls

Create a poll (requires channel ownership)

POST/api/streams/:username/polls/:pollId/vote

Vote in a poll (requires auth)

POST/api/streams/:username/polls/:pollId/end

End a poll early (requires channel ownership)

Teams

GET/api/teams

List all teams (public)

GET/api/teams/:slug

Get team by slug (public)

GET/api/teams/:slug/members

Get team members (public)

Subscriptions

GET/api/subscriptions/my-subscriptions

Get current user subscriptions (requires subscriptions:read)

GET/api/subscriptions/creator/:creatorId/subscribers

Get creator subscribers (requires subscriptions:read)

GET/api/subscriptions/creator/:creatorId/gift-leaderboard

Get top gifters for creator (public)

POST/api/subscriptions/subscribe

Subscribe to a creator (requires subscriptions:write)

POST/api/subscriptions/gift/direct

Gift subscription to specific user (requires subscriptions:write)

POST/api/subscriptions/gift/random

Gift subscriptions to random community members (requires subscriptions:write)

POST/api/subscriptions/manage

Manage subscription (cancel, update) (requires subscriptions:write)

Notifications

GET/api/notifications

Get user notifications (requires notifications:read)

GET/api/notifications/unread-count

Get unread notification count (requires notifications:read)

POST/api/notifications/:id/read

Mark notification as read (requires notifications:write)

POST/api/notifications/read-all

Mark all notifications as read (requires notifications:write)

Volts (Currency)

GET/api/volts/wallet

Get user wallet balance (requires payments:read)

GET/api/volts/transactions

Get transaction history (requires payments:read)

POST/api/volts/purchase

Purchase Volts (requires payments:write)

POST/api/volts/send

Send Volts to streamer (requires payments:write)

GET/api/volts/leaderboard/:creatorId

Get top tippers for channel (public)

Channel Points

GET/api/channel-points/:channelId/balance

Get user point balance for channel (requires points:read)

GET/api/channel-points/:channelId/items

Get redeemable items for channel (public)

GET/api/channel-points/:channelId/items/with-built-in

Get items including built-in rewards (public)

GET/api/channel-points/:channelId/stream/:streamId/redemptions

Get redemptions for a stream (public)

GET/api/channel-points/:channelId/leaderboard

Get top point earners for channel (public)

POST/api/channel-points/:channelId/redeem/:itemId

Redeem points item (requires points:write)

Giveaways

GET/api/streams/:username/giveaways/active

Get active giveaways for channel (public)

POST/api/streams/:username/giveaways

Create giveaway (requires channel ownership)

POST/api/streams/:username/giveaways/:giveawayId/join

Join giveaway (requires user:write)

POST/api/streams/:username/giveaways/:giveawayId/draw

Draw winner (requires channel ownership)

POST/api/streams/:username/giveaways/:giveawayId/end

End giveaway (requires channel ownership)

Journal

GET/api/users/:username/journals

Get published journal posts for user (public)

GET/api/users/:username/journals/:slug

Get specific journal post (public)

GET/api/journals

Get my journal posts including drafts (requires journal:read)

POST/api/journals

Create journal post (requires journal:write)

PUT/api/journals/:slug

Update journal post (requires journal:write)

DELETE/api/journals/:slug

Delete journal post (requires journal:write)

POST/api/journals/:slug/publish

Publish draft (requires journal:write)

POST/api/journals/:slug/images

Upload image to journal post (requires journal:write)

YouTube Integration

GET/api/youtube/auth/url

Get YouTube OAuth URL (requires youtube:manage)

GET/api/youtube/status

Check YouTube connection status (requires youtube:read)

GET/api/youtube/videos/recent

Get recent synced videos (requires youtube:read)

GET/api/youtube/library

Get YouTube library (requires youtube:read)

GET/api/youtube/playlists

Get YouTube playlists (requires youtube:read)

GET/api/youtube/widgets/:username

Get YouTube widget data for user (public)

POST/api/youtube/disconnect

Disconnect YouTube (requires youtube:manage)

Developer Apps

GET/api/developer/apps

List your applications

POST/api/developer/apps

Create a new application

GET/api/developer/apps/:clientId

Get application details

PATCH/api/developer/apps/:clientId

Update application

DELETE/api/developer/apps/:clientId

Delete application

POST/api/developer/apps/:clientId/rotate-secret

Rotate client secret

GET/api/developer/apps/:clientId/scopes

Get app scope grants

Bot Management

POST/api/developer/apps/:clientId/bot/configure

Configure default bot name and settings (reserves username platform-wide)

GET/api/developer/apps/:clientId/bot/instances

List all bot instances (default + custom names per channel)

GET/api/developer/apps/:clientId/bot/check-name/:botName

Check if bot name is available

POST/api/integrations/oauth/bot/customize

Set custom bot name for user's channel (requires bot:write)

DELETE/api/integrations/oauth/bot/customize

Remove custom name, revert to default (45-day reservation)

GET/api/integrations/oauth/bot/current

Get current bot config for user's channel

Webhooks (Event Subscriptions)

GET/api/developer/apps/:clientId/webhooks

List all webhooks for your app

POST/api/developer/apps/:clientId/webhooks

Create webhook subscription (events: channel.follow, channel.subscribe, channel.gift, channel.raid, channel.volts, channel.points.redeem, stream.online, stream.offline, etc.)

GET/api/developer/apps/:clientId/webhooks/:id

Get webhook details

PATCH/api/developer/apps/:clientId/webhooks/:id

Update webhook (change events, URL, etc.)

DELETE/api/developer/apps/:clientId/webhooks/:id

Delete webhook subscription

POST/api/developer/apps/:clientId/webhooks/:id/rotate-secret

Rotate webhook signing secret for security

HTTP Response Codes

CodeDescription
200Success
201Created successfully
204No content (successful deletion)
400Bad request - Invalid parameters
401Unauthorized - Invalid or expired token
403Forbidden - Insufficient permissions
404Not found - Resource doesn't exist
429Rate limited - Too many requests
500Internal server error

Error Response Format

All error responses follow a consistent format:

{
  "error": "error_code",
  "message": "Human-readable error message",
  "details": {
    // Optional additional error details
  }
}

Pagination

List endpoints support cursor-based pagination:

GET /api/streams?limit=25&cursor=eyJsYXN0X2lkIjoi...
ParameterDescription
limitNumber of items per page (max 100)
cursorCursor from previous response for next page

Getting Started