Hadrian is experimental alpha software. Do not use in production.
Hadrian

Videos

Asynchronous video generation, remix, edit, extend, and characters using Sora models. OpenAI-compatible.

List video jobs

GET
/api/v1/videos
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Response Body

application/json

curl -X GET "https://loading/api/v1/videos"
{
  "data": [
    {
      "completed_at": 0,
      "created_at": 0,
      "error": {},
      "expires_at": 0,
      "id": "string",
      "model": "string",
      "object": "string",
      "progress": 0,
      "prompt": "string",
      "remixed_from_video_id": "string",
      "seconds": "string",
      "size": "string",
      "status": "queued"
    }
  ],
  "first_id": "string",
  "has_more": true,
  "last_id": "string",
  "object": "string"
}

Create a video generation job

POST
/api/v1/videos
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Request Body

application/json

input_reference?null|
model?string|null

The model to use for video generation (defaults to sora-2).

prompt*string

A text description of the desired video.

seconds?null|VideoSeconds
size?null|VideoSize
sovereignty_requirements?null|

Response Body

application/json

curl -X POST "https://loading/api/v1/videos" \  -H "Content-Type: application/json" \  -d '{    "prompt": "string"  }'
{
  "completed_at": 0,
  "created_at": 0,
  "error": {},
  "expires_at": 0,
  "id": "string",
  "model": "string",
  "object": "string",
  "progress": 0,
  "prompt": "string",
  "remixed_from_video_id": "string",
  "seconds": "string",
  "size": "string",
  "status": "queued"
}
Empty
Empty

Create a character from a reference video

POST
/api/v1/videos/characters
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Request Body

multipart/form-data

model?string|null

Optional model id, used only to resolve the provider (default sora-2).

name*string

Display name for the new character.

Response Body

application/json

curl -X POST "https://loading/api/v1/videos/characters" \  -F name="string"
{
  "created_at": 0,
  "id": "string",
  "name": "string",
  "object": "string"
}

Retrieve a character

GET
/api/v1/videos/characters/{character_id}
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

character_id*string

Character id

Response Body

application/json

curl -X GET "https://loading/api/v1/videos/characters/string"
{
  "created_at": 0,
  "id": "string",
  "name": "string",
  "object": "string"
}

Edit a video into a new job

POST
/api/v1/videos/edits
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Request Body

application/json

prompt*string

Instructions describing the edit.

video*

The source video to edit.

Response Body

application/json

curl -X POST "https://loading/api/v1/videos/edits" \  -H "Content-Type: application/json" \  -d '{    "prompt": "string",    "video": {      "id": "string"    }  }'
{
  "completed_at": 0,
  "created_at": 0,
  "error": {},
  "expires_at": 0,
  "id": "string",
  "model": "string",
  "object": "string",
  "progress": 0,
  "prompt": "string",
  "remixed_from_video_id": "string",
  "seconds": "string",
  "size": "string",
  "status": "queued"
}

Extend a video into a new job

POST
/api/v1/videos/extensions
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Request Body

application/json

prompt*string

Direction for the extended segment.

seconds*string

Additional duration in seconds (4, 8, 12, 16, or 20).

Value in"4" | "8" | "12" | "16" | "20"
video*

The source video to extend.

Response Body

application/json

curl -X POST "https://loading/api/v1/videos/extensions" \  -H "Content-Type: application/json" \  -d '{    "prompt": "string",    "seconds": "4",    "video": {      "id": "string"    }  }'
{
  "completed_at": 0,
  "created_at": 0,
  "error": {},
  "expires_at": 0,
  "id": "string",
  "model": "string",
  "object": "string",
  "progress": 0,
  "prompt": "string",
  "remixed_from_video_id": "string",
  "seconds": "string",
  "size": "string",
  "status": "queued"
}

Retrieve a video job (refreshes status from the provider)

GET
/api/v1/videos/{video_id}
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

video_id*string

Video job id

Response Body

application/json

curl -X GET "https://loading/api/v1/videos/string"
{
  "completed_at": 0,
  "created_at": 0,
  "error": {},
  "expires_at": 0,
  "id": "string",
  "model": "string",
  "object": "string",
  "progress": 0,
  "prompt": "string",
  "remixed_from_video_id": "string",
  "seconds": "string",
  "size": "string",
  "status": "queued"
}
Empty

Delete a video job

DELETE
/api/v1/videos/{video_id}
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

video_id*string

Video job id

Response Body

application/json

curl -X DELETE "https://loading/api/v1/videos/string"
{
  "deleted": true,
  "id": "string",
  "object": "string"
}

Download the rendered asset for a video job

GET
/api/v1/videos/{video_id}/content
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

video_id*string

Video job id

Response Body

curl -X GET "https://loading/api/v1/videos/string/content"
Empty

Remix a video into a new job

POST
/api/v1/videos/{video_id}/remix
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

video_id*string

Source video id

Request Body

application/json

prompt*string

Updated direction for the remixed video.

Response Body

application/json

curl -X POST "https://loading/api/v1/videos/string/remix" \  -H "Content-Type: application/json" \  -d '{    "prompt": "string"  }'
{
  "completed_at": 0,
  "created_at": 0,
  "error": {},
  "expires_at": 0,
  "id": "string",
  "model": "string",
  "object": "string",
  "progress": 0,
  "prompt": "string",
  "remixed_from_video_id": "string",
  "seconds": "string",
  "size": "string",
  "status": "queued"
}