Build Video Features,
Not Video Infrastructure
You need video in your app. Upload video, get HLS stream, embed anywhere. A few API calls, predictable pricing, focus on your product.
The Build vs Buy Decision
You need video in your app. You have three options:
S3 + FFmpeg + CloudFront + custom player. Weeks of work, ongoing maintenance, encoding edge cases, mobile codec issues.
Brightcove, Kaltura. Enterprise sales cycles, complex SDKs, pricing that requires a spreadsheet.
Upload video, get HLS stream, embed anywhere. A few API calls, predictable pricing, focus on your product.
Castiz is option 3.
Core Requirements
Core Requirements
No SDKs required, works with any language
Users don't wait minutes for processing
Works on any device, any connection
Global delivery without managing infrastructure
No surprise bills from bandwidth spikes
Integration Requirements
Know when transcoding completes
Direct-to-storage from client, no server bottleneck
iframe or JavaScript, your choice
Secure, revocable, scoped access
The Major Players
| Platform | Approach | Pricing Model | Best For |
|---|---|---|---|
| Mux | API-first, developer experience | Per-minute stored + delivered | High-scale UGC, streaming apps |
| Cloudflare Stream | Cloudflare ecosystem | Per-minute stored + delivered | Cloudflare customers |
| api.video | Simple API, global reach | Per-minute + bandwidth | Quick integrations |
| Bunny Stream | CDN-native | Storage + bandwidth | Cost-sensitive apps |
| Castiz | Full-featured hosting API | Storage tiers, unlimited bandwidth | SaaS, course platforms, internal tools |
Pricing Comparison (1,000 videos, 10 min avg, 100K views/month)
| Platform | Storage Cost | Delivery Cost | Total Monthly |
|---|---|---|---|
| Mux | $25 (encoding) + $7 (storage) | ~$50-100 | ~$80-130 |
| Cloudflare Stream | ~$50 | Included | ~$50 |
| Castiz Pro | $49 flat | Included | $49 |
*Costs vary based on actual usage. Castiz advantage: unlimited bandwidth means no delivery cost surprises.
Simple REST API
Authentication
# All requests use Bearer token curl -H "Authorization: Bearer YOUR_API_KEY" \ https://api.castiz.io/v1/videos
API keys are scoped per workspace. Create read-only keys for public endpoints, full-access keys for management.
Upload Flow
# 1. Initialize upload
POST /api/v1/upload/init
{
"filename": "product-demo.mp4",
"size": 104857600,
"content_type": "video/mp4"
}
# Response
{
"video_id": "vid_abc123",
"upload_url": "https://upload.castiz.io/presigned/...",
"expires_in": 3600
}
# 2. Upload directly to storage (client-side OK)
PUT {upload_url}
Content-Type: video/mp4
[binary data]
# 3. Mark upload complete
POST /api/v1/upload/complete
{ "video_id": "vid_abc123" }Transcoding Status
# Poll for status
GET /api/v1/videos/vid_abc123
{
"id": "vid_abc123",
"status": "ready", # pending_upload, processing, ready, failed
"duration_seconds": 342.5,
"hls_url": "https://cdn.castiz.io/.../master.m3u8",
"thumbnail_url": "https://cdn.castiz.io/.../poster.jpg"
}Webhook Events
video.uploadedUpload complete, transcoding starting
video.readyTranscoding complete, ready to play
video.failedTranscoding failed (includes error details)
video.deletedVideo removed
Playback Integration
<!-- Simple iframe embed --> <iframe src="https://player.castiz.io/embed/vid_abc123" width="640" height="360" frameborder="0" allowfullscreen> </iframe>
// Or use HLS.js directly with signed URL
import Hls from 'hls.js';
const video = document.getElementById('video');
const hls = new Hls();
const signedUrl = await fetch('/api/video-url/vid_abc123')
.then(r => r.json())
.then(d => d.url);
hls.loadSource(signedUrl);
hls.attachMedia(video);What We Support
Supported Input Formats
Output Format (HLS)
CDN & Performance
Why Not Just Use S3 + CloudFront?
You can. Here's what you'll build and maintain:
| Component | DIY Effort |
|---|---|
| Upload handling | Presigned URLs, multipart for large files |
| Transcoding | FFmpeg setup, queue management, error handling |
| HLS packaging | Segment generation, manifest files, multiple resolutions |
| Thumbnail generation | Frame extraction, multiple sizes |
| CDN configuration | Cache rules, signed URLs, CORS |
| Player | HLS.js integration, mobile handling, quality switching |
| Monitoring | Encoding failures, CDN errors, cost tracking |
Estimated engineering time: 2-4 weeks for MVP, ongoing maintenance.
Or: use Castiz API, ship today, focus on your actual product.
No Per-Minute Fees
Unlike Mux ($0.007/min stored) or Cloudflare Stream ($0.005/min stored), Castiz uses simple storage tiers. Store 500 GB of video for $49/month, regardless of total minutes.
| Plan | Monthly | Storage | Bandwidth | API Access |
|---|---|---|---|---|
| Free | $0 | 5 GB | 20 GB | |
| Starter | $19 | 100 GB | Unlimited | |
| Pro | $49 | 500 GB | Unlimited | |
| Business | $149 | 2 TB | Unlimited |
No Bandwidth Surprises. Your video goes viral? Great. Your bill stays the same.
API Reference
Full documentation at docs.castiz.io
| Endpoint | Method | Description |
|---|---|---|
| /upload/init | POST | Initialize upload, get presigned URL |
| /upload/complete | POST | Mark upload complete, start transcoding |
| /videos | GET | List videos in workspace |
| /videos/{id} | GET | Get video details and URLs |
| /videos/{id} | PATCH | Update title, description, visibility |
| /videos/{id} | DELETE | Delete video and all files |
| /playback/{id} | GET | Get signed playback URLs |
| /folders | GET/POST | Manage folder organization |
| /webhooks | POST | Configure webhook endpoints |
Frequently Asked Questions
Getting Started
# 1. Sign up at castiz.io (no credit card for free tier) # 2. Get your API key from dashboard # 3. Test the API curl -H "Authorization: Bearer YOUR_API_KEY" \ https://api.castiz.io/v1/videos # 4. Upload your first video (See upload flow above) # 5. Embed and ship