.do
Api

Stream API

REST API reference for stream.do - A serverless video platform for uploading, storing, encoding, and delivering live and on-demand video content globally.

Stream API

A serverless video platform for uploading, storing, encoding, and delivering live and on-demand video content globally.

Endpoint

Authentication

All API requests require authentication:

curl https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"

Request

Headers

Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
X-Request-ID: unique-request-id (optional)

Request Body

{
  "operation": "stream",
  "parameters": {
    // Operation-specific parameters
  },
  "options": {
    "timeout": 30000,
    "retries": 3
  }
}

Response

Success Response

{
  "success": true,
  "data": {
    // Response data
  },
  "meta": {
    "requestId": "req_123",
    "timestamp": "2025-01-01T12:00:00Z",
    "duration": 145
  }
}

Error Response

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid parameters",
    "details": {
      // Error details
    }
  },
  "meta": {
    "requestId": "req_123",
    "timestamp": "2025-01-01T12:00:00Z"
  }
}

Operations

create

Create a new video stream.

curl -X POST https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "create",
    "parameters": {}
  }'

upload

Upload video content to the stream.

curl -X POST https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "upload",
    "parameters": {}
  }'

delete

Permanently remove the video stream.

curl -X POST https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "delete",
    "parameters": {}
  }'

getUploadUrl

Generate one-time upload URL for end users.

curl -X POST https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "getUploadUrl",
    "parameters": {}
  }'

getSignedUrl

Generate signed URL for restricted access.

curl -X POST https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "getSignedUrl",
    "parameters": {}
  }'

updateAccess

Change access control settings.

curl -X POST https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "updateAccess",
    "parameters": {}
  }'

addCaptions

Add subtitle or caption track to video.

curl -X POST https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "addCaptions",
    "parameters": {}
  }'

removeCaptions

Remove subtitle or caption track from video.

curl -X POST https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "removeCaptions",
    "parameters": {}
  }'

startLive

Begin live streaming session.

curl -X POST https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "startLive",
    "parameters": {}
  }'

stopLive

End live streaming session.

curl -X POST https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "stopLive",
    "parameters": {}
  }'

getAnalytics

Retrieve viewing metrics and performance data.

curl -X POST https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "getAnalytics",
    "parameters": {}
  }'

getThumbnail

Get or generate video thumbnail.

curl -X POST https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "getThumbnail",
    "parameters": {}
  }'

Examples

cURL

curl -X POST https://api.do/stream \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "stream",
    "parameters": {}
  }'

JavaScript/TypeScript

const response = await fetch('https://api.do/stream', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    operation: 'stream',
    parameters: {},
  }),
})

const data = await response.json()

Python

import requests

response = requests.post(
    'https://api.do/stream',
    headers={
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json',
    },
    json={
        'operation': 'stream',
        'parameters': {}
    }
)

data = response.json()

Rate Limiting

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1609459200

Status Codes

  • 200 OK - Success
  • 400 Bad Request - Invalid request
  • 401 Unauthorized - Missing/invalid API key
  • 403 Forbidden - Insufficient permissions
  • 404 Not Found - Resource not found
  • 429 Too Many Requests - Rate limit exceeded
  • 500 Internal Server Error - Server error
  • 503 Service Unavailable - Service temporarily unavailable

Error Codes

  • VALIDATION_ERROR - Invalid parameters
  • AUTHENTICATION_ERROR - Invalid API key
  • AUTHORIZATION_ERROR - Insufficient permissions
  • NOT_FOUND - Resource not found
  • RATE_LIMIT_EXCEEDED - Too many requests
  • TIMEOUT - Operation timeout
  • INTERNAL_ERROR - Server error

Webhooks

Subscribe to events:

curl -X POST https://api.do/webhooks \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-app.com/webhook",
    "events": ["stream.created", "stream.uploaded", "stream.deleted", "stream.Encoding.started", "stream.Encoding.completed", "stream.Encoding.failed", "stream.viewed", "stream.Live.started", "stream.Live.stopped", "stream.Access.updated", "stream.Captions.added"]
  }'

Best Practices

  1. API Keys - Store securely, never commit to git
  2. Error Handling - Handle all error codes gracefully
  3. Retries - Implement exponential backoff
  4. Rate Limiting - Respect rate limits
  5. Idempotency - Use X-Idempotency-Key header
  6. Logging - Log requests for debugging