openencoder/API.md at master · alfg/openencoder

Open Encoder API v1

Overview

Early draft of the Open Encoder API. This is in early development and subject to change without notice.

Resources


Authentication

Authentication API resource.

Method Endpoint Description
POST /api/register Register a user.
POST /api/login Login user.

Register

Parameters

Content-Type: application/json
{
    "username": "foo@bar.com",
    "password": "baz"
}

Response

Content-Type: application/json
{
  "user": "foo@bar.com",
  "message": "User registered"
}

Login

Parameters

Content-Type: application/json
{
  "username": "foo@bar.com",
  "password": "baz"
}

Response

Content-Type: application/json
{
  "token": "<jwt token>"
}

Jobs

Jobs API resource.

Method Endpoint Description
POST /api/jobs Create encode job.
GET /api/jobs Get jobs list.
GET /api/jobs/:job_id Get job details.
GET /api/jobs/:job_id/status Get job status.
POST /api/jobs/:job_id/cancel Cancel job.
POST /api/jobs/:job_id/restart Restart job.

Create Job

Parameters

Content-Type: application/json
{
    "preset": "h264_baseline_360p_600",
    "source": "s3:///src/tears-of-steel-2s.mp4",
    "dest": "s3:///dst/tears-of-steel-2s/"
}

Response

Content-Type: application/json
{
  "message": "Job created",
  "status": 200
}

List jobs

Response

Content-Type: application/json
{
  "count": 2,
  "items": [
    {
      "id": 2,
      "guid": "bkl9gbj5bidgus7kjoog",
      "preset": "h264_baseline_360p_600",
      "created_date": "2019-07-14T00:00:00Z"
    },
    {
      "id": 1,
      "guid": "bkl9gb35bidgus7kjoo0",
      "preset": "h264_baseline_360p_600",
      "created_date": "2019-07-14T00:00:00Z"
    }
  ]
}

Get Job

Response

Content-Type: application/json
{
  "id": 2,
  "guid": "bkl9gbj5bidgus7kjoog",
  "preset": "h264_baseline_360p_600",
  "created_date": "2019-07-14t00:00:00z"
}

Get Job Status

GET /api/jobs/:job_id/status

Response

Content-Type: application/json
{
  "status": 200,
  "job_status": "encoding"
}

Cancel Job

POST /api/jobs/:job_id/cancel

Response

Content-Type: application/json

Restart Job

POST /api/jobs/:job_id/restart

Response

Content-Type: application/json

Machines

Machines API resource.

Method Endpoint Description
POST /api/machines Create a machine.
GET /api/machines Get machines list.
DELETE /api/machines/:id Delete a machine by ID.
DELETE /api/machines Delete all machines by tag.
GET /api/machines/regions Get machine regions list.
GET /api/machines/sizes Get machine sizes list.

Create Machine

Parameters

Content-Type: application/json
{
	"provider": "digitalocean",
	"region": "sfo1",
	"size": "s-1vcpu-1gb",
	"count": 1
}

Response

Content-Type: application/json
{
  "machine": [
    {
      "id": 154372950,
      "provider": "digitalocean"
    }
  ]
}

List Machines

Response

Content-Type: application/json
{
  "machines": [
    {
      "id": 154485626,
      "name": "openencoder-worker",
      "status": "new",
      "size_slug": "s-1vcpu-1gb",
      "created_at": "2019-08-11T05:50:26Z",
      "region": "San Francisco 1",
      "tags": [
        "openencoder"
      ],
      "provider": "digitalocean"
    }
  ]
}

Delete Machine

Parameters

Content-Type: application/json

Response

Content-Type: application/json
{
  "machine": {
    "id": 154472730,
    "provider": "digitalocean"
  }
}

Delete All Machines

This will delete all machines tagged with openencoder.

Parameters

Content-Type: application/json

Response

Content-Type: application/json

List Machine Regions

GET /api/machines/regions

Response

Content-Type: application/json
{
  "regions": [
    {
      "name": "New York 1",
      "slug": "nyc1",
      "sizes": [
        "32gb",
        "16gb"
      ],
      "available": true
    }
  ]
}

List Machine Sizes

Response

Content-Type: application/json
{
  "sizes": [
    {
      "slug": "512mb",
      "available": true,
      "price_monthly": 5,
      "price_hourly": 0.007439999841153622
    },
    {
      "slug": "s-1vcpu-1gb",
      "available": true,
      "price_monthly": 5,
      "price_hourly": 0.007439999841153622
    }
  ]
}

Presets

Presets API resource.

Method Endpoint Description
POST /api/presets Create preset.
GET /api/presets Get presets list.
GET /api/presets/:preset_id Get preset details.
PUT /api/presets/:preset_id Update preset.

Create Preset

Parameters

Content-Type: application/json
{
    "name": "preset name",
    "description": "preset description",
    "data": "<json string of ffmpeg preset data>",
    "active": true
}

Response

Content-Type: application/json
{
  "id": 1,
  "name": "preset name",
  "description": "preset description",
  "data": "<json string of ffmpeg preset data>",
  "active": true
}

List Presets

Response

Content-Type: application/json
{
  "count": 2,
  "items": [
    {
      "id": 4,
      "name": "h264_main_1080p_6000",
      "description": "h264_main_1080p_6000",
      "data": "<json data>",
      "active": true
    },
    {
      "id": 3,
      "name": "h264_main_720p_3000",
      "description": "h264_main_720p_3000",
      "data": "<json data>",
      "active": true
    },
  ]
}

Get Preset

GET /api/presets/:preset_id

Response

Content-Type: application/json
{
  "preset": {
    "id": 1,
    "name": "h264_baseline_360p_600",
    "description": "h264_baseline_360p_600",
    "data": "<json data>",
    "output": "h264_baseline_360p_600.mp4",
    "active": true
  },
  "status": 200
}

Update Preset

POST /api/preset/:preset_id

Parameters

Content-Type: application/json
{
    "name": "preset name",
    "description": "preset description",
    "data": "<json string of ffmpeg preset data>",
    "active": true
}

Response

Content-Type: application/json
{
  "id": 1,
  "name": "preset name",
  "description": "preset description",
  "data": "<json string of ffmpeg preset data>",
  "active": true
}