Skip to main content
POST
/
videos
/
{video_id}
/
cancel
Cancel video
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};

fetch('https://api.phaseo.app/v1/videos/{video_id}/cancel', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
{
  "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
}
Reserves the public cancel endpoint while provider-level cancellation support is standardized. The endpoint exists today, but currently returns a structured 501 not_implemented_yet error while cancellation behavior is finalized across providers. Treat cancellation as not yet generally available across the public video surface even though the route and SDK method names exist.

Authorizations

Authorization
string
header
required

Bearer token authentication

Path Parameters

video_id
string
required

The internal AI Stats video job ID (G-...).

Response

Video cancellation response

id
string
polling_url
string
websocket_url
string<uri>

WebSocket URL for subscribing to normalized async job lifecycle updates.

model
string
request_id
string
session_id
string
status
enum<string>
Available options:
queued,
processing,
completed,
failed,
cancelled,
expired
lifecycle_status
enum<string>

Normalized async lifecycle status for polling, websocket, and webhook consumers.

Available options:
pending,
running,
completed,
failed,
cancelled,
expired
cancel_url
string<uri> | null
output_access
enum<string>
Available options:
bytes,
signed_url,
both
generation_id
string | null
native_video_id
string | null

Provider-native video/job id when it differs from the gateway-owned id.

created_at
started_at
completed_at
object
string
Example:

"video"

poll_after_seconds
integer
Example:

20

provider
string
seconds
number
size
string
audio
boolean
content_url
string

Present when output_access includes bytes (authenticated endpoint).

download_url
string | null

Signed first-party URL for direct download when status is completed.

expires_at
integer | null

Unix timestamp (seconds) when the signed download_url expires.

progress
integer | null
progress_source
string
asset
object
outputs
object[]
billing
object
webhook
object

Sanitized async webhook configuration plus delivery state. Secrets are never returned; has_secret indicates whether signed deliveries are enabled. Signed deliveries include x-ai-stats-signature, x-ai-stats-timestamp, x-ai-stats-event-id, x-ai-stats-event-type, x-ai-stats-delivery-key, x-ai-stats-attempt, and x-ai-stats-max-attempts headers.

next_webhook_retry_at
string | null

ISO timestamp for the next scheduled user-webhook retry, when queued.

last_webhook_progress
number | null

Most recent coarse progress bucket dispatched to webhook consumers.

last_webhook_progress_at
string | null

ISO timestamp when the most recent webhook progress bucket was dispatched.

last_webhook_dispatched_at
string | null

ISO timestamp for the most recent webhook dispatch attempt.

usage
object
error
unknown
Last modified on May 6, 2026