Skip to main content
GET
/
videos
List videos
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch('https://api.phaseo.app/v1/videos', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
{
  "object": "list",
  "data": [
    {
      "id": "<string>",
      "polling_url": "<string>",
      "websocket_url": "<string>",
      "model": "<string>",
      "request_id": "<string>",
      "session_id": "<string>",
      "cancel_url": "<string>",
      "generation_id": "<string>",
      "native_video_id": "<string>",
      "created_at": 123,
      "started_at": 123,
      "completed_at": 123,
      "object": "video",
      "poll_after_seconds": 20,
      "provider": "<string>",
      "seconds": 123,
      "size": "<string>",
      "audio": true,
      "content_url": "<string>",
      "download_url": "<string>",
      "expires_at": 123,
      "progress": 123,
      "progress_source": "<string>",
      "asset": {
        "id": "<string>",
        "mime_type": "<string>",
        "bytes": 123,
        "sha256": "<string>",
        "width": 123,
        "height": 123,
        "duration_seconds": 123
      },
      "outputs": [
        {
          "index": 123,
          "mime_type": "<string>",
          "bytes_available": true,
          "content_url": "<string>",
          "download_url": "<string>",
          "expires_at": 123
        }
      ],
      "billing": {
        "currency": "<string>",
        "estimated_provider_cost": "<string>",
        "estimated_user_cost": "<string>",
        "settled_provider_cost": "<string>",
        "settled_user_cost": "<string>",
        "billable": true,
        "total_nanos": 123,
        "estimated_nanos": 123,
        "reserved_nanos": 123,
        "reservation_id": "<string>",
        "reservation_status": "<string>",
        "charge_reason": "<string>",
        "charged": true,
        "billed_at": "<string>"
      },
      "webhook": {
        "url": "<string>",
        "events": [
          "<string>"
        ],
        "has_secret": true,
        "delivery": {
          "total_attempts": 123,
          "delivered_events": 123,
          "delivered_event_types": [
            "video.completed"
          ],
          "pending_retries": 123,
          "next_retry_at": "<string>",
          "last_attempt_at": "<string>",
          "last_response_status": 123,
          "last_delivered_at": "<string>",
          "last_failure_at": "<string>",
          "last_error_message": "<string>"
        },
        "attempts": [
          {
            "id": "<string>",
            "delivery_key": "video.completed",
            "event_type": "video.completed",
            "attempt_number": 123,
            "max_attempts": 123,
            "tried_at": "<string>",
            "delivered_at": "<string>",
            "next_retry_at": "<string>",
            "response_status": 123,
            "error_message": "<string>",
            "response_body_preview": "<string>"
          }
        ]
      },
      "next_webhook_retry_at": "<string>",
      "last_webhook_progress": 123,
      "last_webhook_progress_at": "<string>",
      "last_webhook_dispatched_at": "<string>",
      "usage": {
        "cost": 123,
        "is_byok": true
      },
      "error": null
    }
  ],
  "first_id": "<string>",
  "last_id": "<string>",
  "has_more": true
}
Returns the authenticated workspace’s owned video jobs in reverse chronological order.
The public video routes are currently mounted but temporarily disabled, so this route currently returns 501 not_implemented.
Use query parameters to narrow the response:
  • limit to cap the number of returned jobs
  • repeated status values to filter by lifecycle state
The response is a standard list envelope whose data array contains the same public video objects returned by POST /videos and GET /videos/{video_id}. This is useful for building:
  • async job dashboards
  • recent-generation history views
  • status-filtered polling views for completed, failed, or in-progress jobs

Authorizations

Authorization
string
header
required

Bearer token authentication

Query Parameters

limit
integer

Maximum number of video jobs to return. Defaults to 50 and caps at 200.

Required range: 1 <= x <= 200
status
string[]

Video lifecycle status filter. Repeat the parameter or provide comma-separated values.

Response

200 - application/json

Video list response

object
string
Example:

"list"

data
object[]
first_id
string | null
last_id
string | null
has_more
boolean
Last modified on May 19, 2026