Authentication
1. Overview
The Firework Public API supports OAuth 2.0 Client Credentials flow for server-to-server authentication. This authentication method is designed for backend applications that need to access Firework APIs without user interaction.
Production Base URL: https://api.firework.com
⚠️ Important:
OAuth apps must be registered and configured by the Firework IS (Internal Systems) team before use
Client credentials are scoped to your business. You can only access resources (videos, channels, live streams) that belong to your business
OAuth apps must be granted specific scopes that determine which API endpoints they can access
Client credentials authentication is only supported for
/api/v1/*Public API endpoints
2. OAuth App Registration
Before using the Client Credentials flow, you must have an OAuth app registered by the Firework IS team.
2.1. Registration Process
Contact the Firework IS team to register your OAuth app. Provide the following information:
Business ID - The Firework business that will own the OAuth app
App Name - A descriptive name for your application
Required Scopes - The specific scopes your app needs (see section 2.2)
The IS team will provide you with:
client_id- Your OAuth app's unique identifierclient_secret- Your OAuth app's secret key (store securely!)
2.2. Available Scopes
OAuth apps must be granted one or more scopes that determine which API endpoints they can access:
POST /api/v1/upload_signatures
videos:write
Get pre-signed credentials for S3 upload
POST /api/v1/upload_multipart/signatures
videos:write
Initiate multipart upload
POST /api/v1/upload_multipart/complete
videos:write
Complete a multipart upload
POST /api/v1/videos
videos:write
Create a video (file, URL, S3 key, or base64)
PATCH /api/v1/videos/:id
videos:write
Update a video
DELETE /api/v1/videos/:id
videos:write
Delete a video
POST /api/v1/videos/:id/archive, /unarchive
videos:write
Archive or unarchive a video
POST /api/v1/videos/:id/publish, /unpublish
videos:write
Publish (optionally scheduled) or unpublish
POST /api/v1/videos/:id/subtitles
videos:write
Add a subtitle
DELETE /api/v1/videos/:id/subtitles/:subtitle_id
videos:write
Remove a subtitle
POST /api/v1/videos/:id/posters
videos:write
Add a poster
DELETE /api/v1/videos/:id/posters/:poster_id
videos:write
Remove a poster
GET /api/v1/videos
videos:read
List videos in a channel
GET /api/v1/videos/:id
videos:read
Read video details
GET /api/v1/videos/imports/:id
videos:read
Get async import job status
GET /api/v1/businesses
businesses:read
List businesses the token can act on
GET /api/v1/channels
channels:read
List channels
PATCH /api/v1/channels/:id
channels:write
Update a channel's metadata
GET /api/v1/business_stores
products:read
List business stores
GET /api/v1/products
products:read
List or search products in a store
GET /api/v1/products/:id
products:read
Get a product
GET /api/v1/products/:product_id/videos
products:read
List videos for a product
POST /api/v1/products
products:write
Upsert (create or update) a product
DELETE /api/v1/products/:product_id
products:write
Delete a product
GET /api/v1/live_streams
livestreams:read
List livestreams of a channel
GET /api/v1/live_streams/:id
livestreams:read
Get live stream details
GET /api/v1/live_streams/:id/detail
livestreams:read
Get viewer-side livestream details
GET /api/v1/live_streams/:id/messages
livestreams:read
List a replay's chat messages
GET /api/v1/live_streams/:id/comments_csv
livestreams:read
Download comments CSV (after end)
GET /api/v1/live_streams/:id/interactions/:interaction_id/responses_csv
livestreams:read
Download interaction responses CSV (after end)
GET /api/v1/live_streams/playlists/:playlist_id/videos
livestreams:read
List videos of a livestream playlist
GET /api/v1/stats/live_streams/:live_stream_id
livestreams:read
Consolidated livestream reporting stats
POST /api/v1/live_streams
livestreams:write
Schedule a livestream
PATCH /api/v1/live_streams/:id
livestreams:write
Update a livestream
PATCH /api/v1/live_streams/:id/end
livestreams:write
End a live stream
POST /api/v1/live_streams/:id/pin_product
livestreams:write
Pin products to live stream
POST /api/v1/live_streams/:id/unpin_product
livestreams:write
Unpin products from live stream
GET /api/v1/playlists
playlists:read
List playlists of a channel
GET /api/v1/playlists/:id/videos
playlists:read
List a playlist's videos
POST /api/v1/playlists
playlists:write
Create a playlist
PATCH /api/v1/playlists/:id
playlists:write
Update a playlist
DELETE /api/v1/playlists/:id
playlists:write
Delete a playlist
POST /api/v1/playlists/:id/videos
playlists:write
Add a video to a playlist
PUT /api/v1/playlists/:id/videos
playlists:write
Reorder a playlist's videos
DELETE /api/v1/playlists/:id/videos/:video_id
playlists:write
Remove a video from a playlist
POST /api/v1/playlists/:id/videos/:video_id/pin, DELETE .../pin
playlists:write
Pin/unpin a video (AI-feed playlists only)
GET /api/v1/insights/videos/:video_id
insights:read
Get insights for a video
GET /api/v1/insights/live_streams/:live_stream_id
insights:read
Get insights for a livestream
GET /api/v1/stats/playlists/:playlist_id/video_views
insights:read
List a playlist's per-video view counts
All Public API endpoints
api:admin
Full administrative access
📝 Note:
Request only the minimum scopes your application needs (principle of least privilege)
The
api:adminscope bypasses all scope checks and should be used sparinglyScopes are set during OAuth app registration and cannot be changed via API
Scope Hierarchy: Write scopes automatically grant read access. For example,
livestreams:writegrants both read and write operations, andvideos:writegrants both read and write access to videos
3. Client Credentials Flow
The authentication process has two steps:
Get Access Token - Exchange client credentials for an access token
Use Access Token - Include token in API requests
4. Endpoint Summary
POST /oauth/token
Get access token
5. Get Access Token
Exchange your client credentials for an access token.
Endpoint: POST /oauth/token
Authentication: None required
Token lifetime: 15 minutes
5.1. Request Parameters
grant_type
string
✅
Must be "client_credentials"
client_id
string
✅
Your OAuth app's Client ID
client_secret
string
✅
Your OAuth app's Client Secret
scope
string
✅
Space-separated list of requested scopes (must be subset of app's allowed scopes)
5.2. Get Access Token Response
Success Response: 200 OK
access_token
string
❌
JWT bearer token for API authentication (contains scope in JWT claims)
expires_in
number
❌
Token lifetime in seconds (900)
5.3. Examples
CURL Request
Example Response
📝 Note: The granted scopes are embedded within the JWT token claims. You can decode the JWT to see the
scopefield which contains the scopes that were granted for this token. The token also includes abid(business ID) claim that scopes the token to your business.
6. Using Access Tokens
Include the access token in the Authorization header for all API requests:
Important:
Client credentials access tokens are only valid for
/api/v1/*Public API endpointsYour OAuth app must have the required scope to access each endpoint
Requests without the required scope will return
403 Forbiddenwith aninsufficient_scopeerror
6.1. Supported Endpoints and Required Scopes
The following Firework Public API v1 endpoints support client credentials authentication:
Video Management (requires videos:read or videos:write scope)
GET /api/v1/videos- List videos in a channel (requiresvideos:read)GET /api/v1/videos/:id- Get video details (requiresvideos:read)GET /api/v1/videos/imports/:id- Get the status of an async import job (requiresvideos:read)POST /api/v1/videos- Create a video from a file, URL, S3 key, or base64 payload (requiresvideos:write)PATCH /api/v1/videos/:id- Update video metadata (requiresvideos:write)DELETE /api/v1/videos/:id- Delete a video (requiresvideos:write)POST /api/v1/videos/:id/archive,POST /api/v1/videos/:id/unarchive- Archive or unarchive a video (requiresvideos:write)POST /api/v1/videos/:id/publish,POST /api/v1/videos/:id/unpublish- Publish (optionally scheduled) or unpublish a video (requiresvideos:write)POST /api/v1/videos/:id/subtitles,DELETE /api/v1/videos/:id/subtitles/:subtitle_id- Add or remove a subtitle (requiresvideos:write)POST /api/v1/videos/:id/posters,DELETE /api/v1/videos/:id/posters/:poster_id- Add or remove a poster (requiresvideos:write)POST /api/v1/upload_signatures- Get pre-signed credentials for S3 upload (requiresvideos:write)POST /api/v1/upload_multipart/signatures- Initiate multipart upload (requiresvideos:write)POST /api/v1/upload_multipart/complete- Complete a multipart upload (requiresvideos:write)
Business Read-Only (requires businesses:read scope)
GET /api/v1/businesses- List the businesses the token can act on
Channel Management (requires channels:read or channels:write scope)
GET /api/v1/channels- List channels for a business (requireschannels:read)PATCH /api/v1/channels/:id- Update a channel's metadata (requireschannels:write)
Product Management (requires products:read or products:write scope)
GET /api/v1/products- List or search products in a store (requiresproducts:read)GET /api/v1/products/:id- Get a product (requiresproducts:read)GET /api/v1/products/:product_id/videos- List videos associated with a product (requiresproducts:read)POST /api/v1/products- Upsert a product (requiresproducts:write)DELETE /api/v1/products/:product_id- Delete a product (requiresproducts:write)
Business Store Management (requires products:read scope)
GET /api/v1/business_stores- List business stores for a business (requiresproducts:read)
Playlist Management (requires playlists:read or playlists:write scope)
GET /api/v1/playlists- List playlists for a channel (requiresplaylists:read)GET /api/v1/playlists/:id/videos- List a playlist's videos (requiresplaylists:read)POST /api/v1/playlists- Create a playlist (requiresplaylists:write)PATCH /api/v1/playlists/:id- Update a playlist (requiresplaylists:write)DELETE /api/v1/playlists/:id- Delete a playlist (requiresplaylists:write)POST /api/v1/playlists/:id/videos- Add a video to a playlist (requiresplaylists:write)PUT /api/v1/playlists/:id/videos- Reorder a playlist's videos (requiresplaylists:write)DELETE /api/v1/playlists/:id/videos/:video_id- Remove a video from a playlist (requiresplaylists:write)POST /api/v1/playlists/:id/videos/:video_id/pin,DELETE /api/v1/playlists/:id/videos/:video_id/pin- Pin or unpin a video, AI-feed playlists only (requiresplaylists:write)
Live Stream Management (requires livestreams:read or livestreams:write scope)
GET /api/v1/live_streams- List livestreams of a channel (requireslivestreams:read)GET /api/v1/live_streams/:id- Get live stream details (requireslivestreams:read)GET /api/v1/live_streams/:id/detail- Get viewer-side livestream details (requireslivestreams:read)GET /api/v1/live_streams/:id/messages- List an ended stream's replay chat messages (requireslivestreams:read)GET /api/v1/live_streams/:id/comments_csv- Download comments as CSV, after the stream ends (requireslivestreams:read)GET /api/v1/live_streams/:id/interactions/:interaction_id/responses_csv- Download interaction (poll/quiz/question) responses as CSV, after the stream ends (requireslivestreams:read)GET /api/v1/live_streams/playlists/:playlist_id/videos- List videos of a livestream playlist (requireslivestreams:read)GET /api/v1/stats/live_streams/:live_stream_id- Consolidated livestream reporting stats (requireslivestreams:read)POST /api/v1/live_streams- Schedule a livestream (requireslivestreams:write)PATCH /api/v1/live_streams/:id- Update a livestream (requireslivestreams:write)PATCH /api/v1/live_streams/:id/end- End a live stream (requireslivestreams:write)POST /api/v1/live_streams/:id/pin_product- Pin products to live stream, max 3 per request (requireslivestreams:write)POST /api/v1/live_streams/:id/unpin_product- Unpin products from live stream, max 3 per request (requireslivestreams:write)
Insights Read-Only (requires insights:read scope)
GET /api/v1/insights/videos/:video_id- Get insights for a videoGET /api/v1/insights/live_streams/:live_stream_id- Get insights for a livestreamGET /api/v1/stats/playlists/:playlist_id/video_views- List active and replay view counts for a playlist's videos
📝 Note:
OAuth apps with the
api:adminscope can access all endpoints regardless of other scope requirementsWrite scopes automatically grant read access. For example,
livestreams:writegrants both read and write operations
6.2. Example API Requests
Create/Upload Video
List Videos for a Product (Read-Only)
Pin Products to Live Stream
Unpin Products from Live Stream
End Live Stream
Get Live Stream Details (Read-Only)
Last updated
Was this helpful?