=== URL: https://useapi.net/docs/start-here/setup-runwayml ===
Document URL: https://useapi.net/docs/start-here/setup-runwayml
---
layout: default
title: Setup Runway
parent: Start Here
nav_order: 300
---
# Setup Runway
{: .no_toc }
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
Approximately 2 minutes to complete setup steps.
---
## Create Runway account
You need a [Runway](https://runwayml.com) account. Create a [new account](https://app.runwayml.com/login) if you don't have one already.
Please note even if you have an existing Runway account we are **strongly** recommending creating a separate Runway account specifically designated to be used with useapi.net API.
You can start with a free Runway account and upgrade to a paid account once you feel comfortable with the API offerings.
For free Runway accounts, the following features are unlocked with this experimental API:
* Unlimited number of [Text to Image Preview](../api-runwayml-v1/get-runwayml-text_to_image_preview) generations
* Unlimited number of [Image Upscaler](../api-runwayml-v1/get-runwayml-image_upscaler) generations
* Unlimited number of [Transcribe](../api-runwayml-v1/get-runwayml-transcribe) generations
* Unlimited number of [Super-Slow Motion](../api-runwayml-v1/post-runwayml-super_slow_motion) generations
* Unlimited number of [Frames Describe](../api-runwayml-v1/get-runwayml-frames-describe) generations
When creating a new account, choose the **email option**. The API will not work with accounts created using Sign up with Google, Sign up with Apple, or Use Single Sign-On (SSO) options.

## Configure API
Proceed to [POST /accounts/`email`](../api-runwayml-v1/post-runwayml-accounts-email) and configure the API to use the account created above.
=== URL: https://useapi.net/docs/api-runwayml-v1 ===
Document URL: https://useapi.net/docs/api-runwayml-v1
---
layout: default
title: Runway API v1
nav_order: 5000
has_children: true
permalink: /docs/api-runwayml-v1
---
# Runway API v1
August 8, 2024 (January 23, 2026)
This is [experimental](../../docs/legal) API for for the [Runway AI](https://runwayml.com).
Our API supports **all** the functionality for **Gen-4.5**, Gen-4, Gen-4 Turbo available on the original [Runway AI](https://runwayml.com/) website. This includes [Text](../../docs/api-runwayml-v1/post-runwayml-gen4_5-create)/[Image](../../docs/api-runwayml-v1/post-runwayml-gen4-create)/[Video](../../docs/api-runwayml-v1/post-runwayml-gen4-video)-to-Video, [Act Two](../../docs/api-runwayml-v1/post-runwayml-gen4-act-two), [Aleph](../../docs/api-runwayml-v1/post-runwayml-gen4-video), [Lip Sync](../../docs/api-runwayml-v1/post-runwayml-lipsync-create), [Frames](../../docs/api-runwayml-v1/post-runwayml-frames-create) and more. We're fully committed to bringing all the [Runway AI](https://runwayml.com/) website magic to our API customers.
The [Frames](../../docs/api-runwayml-v1/post-runwayml-frames-create) is Runway's most advanced base model for image generation, offering unprecedented stylistic control and visual fidelity.
The [Lip Sync](../../docs/api-runwayml-v1/post-runwayml-lipsync-create) enables you to use an image or video to create generative videos where the selected face speaks lines from your audio clips or AI-generated voices (28+ languages, model [eleven_multilingual_v2](https://help.elevenlabs.io/hc/en-us/articles/17883183930129-What-models-do-you-offer-and-what-is-the-difference-between-them)).
For **free** Runway accounts, the following features are unlocked with this experimental API:
* Unlimited number of [Image Upscaler](../../docs/api-runwayml-v1/get-runwayml-image_upscaler) generations
* Unlimited number of [Transcribe](../../docs/api-runwayml-v1/get-runwayml-transcribe) generations
* Unlimited number of [Super-Slow Motion](../../docs/api-runwayml-v1/post-runwayml-super_slow_motion) generations
* Unlimited number of [Frames Describe](../../docs/api-runwayml-v1/get-runwayml-frames-describe) generations
[Setup Runway](../../docs/start-here/setup-runwayml)
[Postman collection](https://www.postman.com/useapinet/useapi-net/collection) (January 26, 2026)
[Q&A: How is your experimental Runway API different from the official Runway API?](../../docs/questions-and-answers#how-is-your-experimental-runway-api-different-from-the-official-runway-api)
Articles:
* [Create Runway videos like a Pro](../../docs/articles/runway-bash)
* [Mastering Runway Frames](../../docs/articles/runway-frames-script)
Examples:
* [Gen-4.5 image-to-video](../../blog/260123)
* [Gen-4.5 text-to-video](../../blog/251215)
* [Act Two](../../blog/250722)
* [Act Two voice swap](../../blog/250908)
* [Aleph](../../blog/250804)
Developer Community:
* Discord Server
* Telegram Channel
* r/runwayml_api
=== URL: https://useapi.net/docs/api-runwayml-v1/del-runwayml-accounts-email ===
Document URL: https://useapi.net/docs/api-runwayml-v1/del-runwayml-accounts-email
---
layout: default
title: DEL accounts/email
parent: Runway API v1
nav_order: 400
---
## Delete Runway API account
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
{: .delete }
> **https://api.useapi.net/v1/runwayml/accounts/`email`**
The `email` value should correspond to an account configured previously via a [POST /accounts/`email`](post-runwayml-accounts-email) request.
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Responses
{% tabs del_account_Runwayml_response %}
{% tab del_account_Runwayml_response 204 %}
204 No Content
{% endtab %}
{% tab del_account_Runwayml_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab del_account_Runwayml_response 404 %}
404 Not Found
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
error: string,
errorDetails: string,
code: number
}
```
##### Examples
{% tabs del_account_Runwayml_example %}
{% tab del_account_Runwayml_example Curl %}
``` bash
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer …" \
-X DELETE https://api.useapi.net/v1/runwayml/accounts/
```
{% endtab %}
{% tab del_account_Runwayml_example JavaScript %}
``` javascript
const email = "Previously configured email";
const apiUrl = `https://api.useapi.net/v1/runwayml/accounts/${channnel}`;
const token = "API token";
const data = {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json' }
};
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab del_account_Runwayml_example Python %}
``` python
import requests
email = "Previously configured email"
apiUrl = f"https://api.useapi.net/v1/runwayml/accounts/{email}"
token = "API token"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.delete(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/del-runwayml-assets-assetId ===
Document URL: https://useapi.net/docs/api-runwayml-v1/del-runwayml-assets-assetId
---
layout: default
title: DEL assets/assetId
parent: Runway API v1
nav_order: 1700
---
## Delete asset
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Runway [Assets](https://app.runwayml.com/video-tools/assets).
{: .delete }
> **https://api.useapi.net/v1/runwayml/assets/`assetId`**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Path parameter
- `assetId` is **required**. Specify assetId you want to delete.
##### Responses
{% tabs delete_assets_Runwayml_assets_response %}
{% tab delete_assets_Runwayml_assets_response 200 %}
200 OK
```json
{
"success": true
}
```
{% endtab %}
{% tab delete_assets_Runwayml_assets_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab delete_assets_Runwayml_assets_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab delete_assets_Runwayml_assets_response 404 %}
404 Not Found
```json
{
"error": "Not found."
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
success: boolean,
error: string,
code: number
}
```
##### Examples
{% tabs delete_assets_Runwayml_assets_example %}
{% tab delete_assets_Runwayml_assets_example Curl %}
``` bash
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer …" \
-X DELETE "https://api.useapi.net/v1/runwayml/assets/assetId"
```
{% endtab %}
{% tab delete_assets_Runwayml_assets_example JavaScript %}
``` javascript
const assetId = "assetId to delete";
const apiUrl = `https://api.useapi.net/v1/runwayml/assets/${assetId}`;
const token = "API token";
const data = {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json' }
};
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab delete_assets_Runwayml_assets_example Python %}
``` python
import requests
assetId = "assetId to delete"
apiUrl = f"https://api.useapi.net/v1/runwayml/assets/{assetId}"
token = "API token"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.delete(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/del-runwayml-scheduler-taskId ===
Document URL: https://useapi.net/docs/api-runwayml-v1/del-runwayml-scheduler-taskId
---
layout: default
title: DEL scheduler/taskId
parent: Runway API v1
nav_order: 1800
---
## Cancel task currently being executed by the API
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
{: .delete }
> **https://api.useapi.net/v1/runwayml/scheduler/`taskId`**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Path parameter
- `taskId` is **required**. Specify taskId you want to cancel.
##### Responses
{% tabs delete_scheduler_Runwayml_scheduler_response %}
{% tab delete_scheduler_Runwayml_scheduler_response 204 %}
204 No Content
{% endtab %}
{% tab delete_scheduler_Runwayml_scheduler_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab delete_scheduler_Runwayml_scheduler_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab delete_scheduler_Runwayml_scheduler_response 404 %}
404 Not Found
```json
{
"error": "Unable to locate running taskId "
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
error: string
code: number
}
```
##### Examples
{% tabs delete_scheduler_Runwayml_scheduler_example %}
{% tab delete_scheduler_Runwayml_scheduler_example Curl %}
``` bash
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer …" \
-X DELETE "https://api.useapi.net/v1/runwayml/scheduler/taskId"
```
{% endtab %}
{% tab delete_scheduler_Runwayml_scheduler_example JavaScript %}
``` javascript
const taskId = "taskId to cancel";
const apiUrl = `https://api.useapi.net/v1/runwayml/scheduler/${taskId}`;
const token = "API token";
const data = {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json' }
};
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab delete_scheduler_Runwayml_scheduler_example Python %}
``` python
import requests
taskId = "taskId to cancel"
apiUrl = f"https://api.useapi.net/v1/runwayml/scheduler/{taskId}"
token = "API token"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.delete(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/del-runwayml-tasks-taskId ===
Document URL: https://useapi.net/docs/api-runwayml-v1/del-runwayml-tasks-taskId
---
layout: default
title: DEL tasks/taskId
parent: Runway API v1
nav_order: 2100
---
## Delete task
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
{: .delete }
> **https://api.useapi.net/v1/runwayml/tasks/`taskId`**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Path parameter
- `taskId` is **required**. Specify taskId you want to delete.
##### Responses
{% tabs delete_tasks_Runwayml_tasks_response %}
{% tab delete_tasks_Runwayml_tasks_response 200 %}
200 OK
```json
{
"success": true
}
```
{% endtab %}
{% tab delete_tasks_Runwayml_tasks_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab delete_tasks_Runwayml_tasks_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab delete_tasks_Runwayml_tasks_response 404 %}
404 Not Found
```json
{
"error": "Not found."
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
success: boolean,
error: string,
code: number
}
```
##### Examples
{% tabs delete_tasks_Runwayml_tasks_example %}
{% tab delete_tasks_Runwayml_tasks_example Curl %}
``` bash
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer …" \
-X DELETE "https://api.useapi.net/v1/runwayml/tasks/taskId"
```
{% endtab %}
{% tab delete_tasks_Runwayml_tasks_example JavaScript %}
``` javascript
const taskId = "taskId to delete";
const apiUrl = `https://api.useapi.net/v1/runwayml/tasks/${taskId}`;
const token = "API token";
const data = {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json' }
};
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab delete_tasks_Runwayml_tasks_example Python %}
``` python
import requests
taskId = "taskId to delete"
apiUrl = f"https://api.useapi.net/v1/runwayml/tasks/{taskId}"
token = "API token"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.delete(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-accounts-email ===
Document URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-accounts-email
---
layout: default
title: GET accounts/email
parent: Runway API v1
nav_order: 200
---
## Retrieve Runway API account configuration for `email`
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
{: .get }
> **https://api.useapi.net/v1/runwayml/accounts/`email`**
The `email` value should correspond to an account configured previously via a [POST /accounts/`email`](post-runwayml-accounts-email) request.
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Responses
{% tabs get_account_Runwayml_email_response %}
{% tab get_account_Runwayml_email_response 201 %}
201 Created
```json
{
"email": "user-1@example.com",
"password": "",
"maxJobs": 5,
"jwt": {
"token": "",
"exp": 1734858598.864,
"iat": 1732266598.864,
"id": 123456,
}
}
```
{% endtab %}
{% tab get_account_Runwayml_email_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab get_account_Runwayml_email_response 404 %}
404 Not Found
Configuration not found. To create configuration use [POST /accounts/`email`](https://useapi.net/docs/api-runwayml-v1/post-runwayml-accounts-email).
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
email: string,
password: string,
maxJobs: number,
jwt: {
token: string,
exp: number,
iat: number,
id: number,
}
}
```
##### Examples
{% tabs get_account_Runwayml_email_example %}
{% tab get_account_Runwayml_email_example Curl %}
``` bash
curl https://api.useapi.net/v1/runwayml/accounts/ \
-H "Accept: application/json" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab get_account_Runwayml_email_example JavaScript %}
``` javascript
const token = "API token";
const email = "Previously configured email";
const apiUrl = `https://api.useapi.net/v1/runwayml/accounts/${email}`;
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`,
},
});
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab get_account_Runwayml_email_example Python %}
``` python
import requests
token = "API token"
email = "Previously configured email"
apiUrl = f"https://api.useapi.net/v1/runwayml/accounts/{email}"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-accounts ===
Document URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-accounts
---
layout: default
title: GET accounts
parent: Runway API v1
nav_order: 100
---
## Retrieve Runway API accounts configuration
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
For your convenience, you can specify your Runway configuration values under your Runway account. If you specify multiple Runway accounts, the API will automatically perform load balancing by randomly selecting an account with available capacity before making calls to Runway.
This endpoint retrieves the complete list of configured API accounts for Runway.
{: .get }
> **https://api.useapi.net/v1/runwayml/accounts**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Responses
{% tabs account_Runway_response %}
{% tab account_Runway_response 200 %}
200 OK
```json
{
"user-1@example.com": {
"email": "user-1@example.com",
"password": ""
"jwt": {
"token": "",
"exp": 1734858598.864,
"iat": 1732266598.864,
"id": 123456,
},
"maxJobs": 5,
},
"user-N@example.com": {
"email": "user-N@example.com",
"password": ""
"jwt": {
"token": "",
"exp": 1744858598.864,
"iat": 1742266598.864,
"id": 78910,
},
"maxJobs": 5,
}
}
```
{% endtab %}
{% tab account_Runway_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab account_Runway_response 404 %}
404 Not Found
Configuration not found. To create configuration use [POST /accounts/`email`](https://useapi.net/docs/api-runwayml-v1/post-runwayml-accounts-email).
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
[email: string]: {
email: string,
password: string,
maxJobs: number,
jwt: {
token: string,
exp: number,
iat: number,
id: number,
}
}
}
```
##### Examples
{% tabs account_Runway_example %}
{% tab account_Runway_example Curl %}
``` bash
curl https://api.useapi.net/v1/runwayml/accounts \
-H "Accept: application/json" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab account_Runway_example JavaScript %}
``` javascript
const token = "API token";
const apiUrl = "https://api.useapi.net/v1/runwayml/accounts";
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`,
},
});
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab account_Runway_example Python %}
``` python
import requests
token = "API token"
apiUrl = "https://api.useapi.net/v1/runwayml/accounts"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-assets-assetId ===
Document URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-assets-assetId
---
layout: default
title: GET assets/assetId
parent: Runway API v1
nav_order: 1400
---
## Retrieve assets
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Runway [Assets](https://app.runwayml.com/video-tools/assets).
{: .get }
> **https://api.useapi.net/v1/runwayml/assets/`assetId`**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Path parameter
- `assetId` is **required**. Specify the assetId you want to retrieve.
##### Responses
{% tabs get_assets_assetId_Runwayml_assets_assetId_response %}
{% tab get_assets_assetId_Runwayml_assets_assetId_response 200 %}
200 OK
```json
{
"assetId": "user:user_id-runwayml:account_email-asset:asset_uuid",
"id": "",
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"name": "Race car.jpg",
"url": "",
"previewUrls": [""],
"mediaType": "image",
"fileCount": 1,
"fileSize": 123456,
"fileExtStandardized": "jpeg",
"isUserUpload": true,
"metadata": null,
"username": "",
"userId": 123456789,
"createdBy": 123456789,
"userPicture": null,
"private": true,
"privateInTeam": true,
"parentAssetGroupId": null,
"favorite": false
}
```
{% endtab %}
{% tab get_assets_assetId_Runwayml_assets_assetId_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab get_assets_assetId_Runwayml_assets_assetId_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab get_assets_assetId_Runwayml_assets_assetId_response 404 %}
404 Not Found
```json
{
"error": "Not found.",
"code": 404
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
assetId: string,
id: string,
createdAt: string,
updatedAt: string,
name: string,
url: string,
previewUrls: string[],
mediaType: string,
mediaSubtype: string,
fileCount: number,
fileSize: number,
fileExtStandardized: string,
isUserUpload: boolean,
metadata: {
frameRate: number,
duration: number,
dimensions: number[],
size: {
width: number,
height: number
}
},
username: string,
userPicture: string,
userId: number,
createdBy: number,
private: boolean,
privateInTeam: boolean,
parentAssetGroupId: string,
taskId: string,
favorite: boolean
}
```
##### Examples
{% tabs get_assets_assetId_Runwayml_assets_assetId_example %}
{% tab get_assets_assetId_Runwayml_assets_assetId_example Curl %}
``` bash
curl "https://api.useapi.net/v1/runwayml/assets/assetId" \
-H "Accept: application/json" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab get_assets_assetId_Runwayml_assets_assetId_example JavaScript %}
``` javascript
const token = "API token";
const assetId = "assetId to retrieve";
const apiUrl = `https://api.useapi.net/v1/runwayml/assets/${assetId}`;
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`,
},
});
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab get_assets_assetId_Runwayml_assets_assetId_example Python %}
``` python
import requests
token = "API token"
assetId = "assetId to retrieve"
apiUrl = f"https://api.useapi.net/v1/runwayml/assets/{assetId}"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-assets ===
Document URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-assets
---
layout: default
title: GET assets
parent: Runway API v1
nav_order: 1300
---
## Retrieve assets
{: .no_toc }
August 8, 2024 (August 4, 2025)
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Runway [Assets](https://app.runwayml.com/video-tools/assets).
{: .get }
> **https://api.useapi.net/v1/runwayml/assets/?…**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Query Parameters
- `email` is optional when only one [account](../api-runwayml-v1/get-runwayml-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**.
- `offset` is **required**. This parameter is used to facilitate pagination.
Valid range 0…1000.
- `limit` is **required**. This parameter is used to facilitate pagination.
Valid range 1…50.
- `mediaType` is optional. Specify which asset media types you want to retrieve.
Supported values: `video`, `image` and `audio`.
##### Responses
{% tabs get_assets_Runwayml_assets_response %}
{% tab get_assets_Runwayml_assets_response 200 %}
200 OK
```json
[
{
"assetId": "user:user_id-runwayml:account_email-asset:asset_uuid",
"id": "",
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"name": "Gen-3 Alpha 35801490234, funny cats jumping over.mp4",
"url": "",
"previewUrls": [""],
"mediaType": "video",
"mediaSubtype": null,
"fileCount": 1,
"fileSize": 1234567,
"fileExtStandardized": "mp4",
"isUserUpload": false,
"metadata": {
"frameRate": 24,
"duration": 10.542,
"width": 1280,
"height": 768,
"hasAlphaChannel": false,
"hasAudio": true
},
"username": "",
"userPicture": null,
"userId": 123456789,
"createdBy": 123456789,
"private": true,
"privateInTeam": true,
"parentAssetGroupId": "",
"taskId": "user:user_id-runwayml:account_email-task:task_uuid",
"favorite": false,
}
]
```
{% endtab %}
{% tab get_assets_Runwayml_assets_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab get_assets_Runwayml_assets_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
assetId: string,
id: string,
createdAt: string,
updatedAt: string,
name: string,
url: string,
previewUrls: string[],
mediaType: string,
mediaSubtype: string,
fileCount: number,
fileSize: number,
fileExtStandardized: string,
isUserUpload: boolean,
metadata: {
frameRate: number,
duration: number,
width: number,
height: number,
hasAlphaChannel: boolean,
hasAudio: boolean
},
username: string,
userPicture: string,
userId: number,
createdBy: number,
private: boolean,
privateInTeam: boolean,
parentAssetGroupId: string,
taskId: string,
favorite: boolean
}[]
```
##### Examples
{% tabs get_assets_Runwayml_assets_example %}
{% tab get_assets_Runwayml_assets_example Curl %}
``` bash
curl "https://api.useapi.net/v1/runwayml/assets/?offset=0&limit=50&email=email" \
-H "Accept: application/json" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab get_assets_Runwayml_assets_example JavaScript %}
``` javascript
const token = "API token";
const email = "Previously configured email";
const apiUrl = `https://api.useapi.net/v1/runwayml/assets/?offset=0&limit=50&email=${email}`;
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`,
},
});
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab get_assets_Runwayml_assets_example Python %}
``` python
import requests
token = "API token"
email = "Previously configured email"
apiUrl = f"https://api.useapi.net/v1/runwayml/assets/?offset=0&limit=50&email={email}"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-features ===
Document URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-features
---
layout: default
title: GET features
parent: Runway API v1
nav_order: 2200
---
## Retrieve the Runway account features
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Retrieve account credits information and other details.
{: .get }
> **https://api.useapi.net/v1/runwayml/features/?…**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Query Parameters
- `email` is optional when only one [account](../api-runwayml-v1/get-runwayml-accounts) configured. However, if you have multiple accounts configured, this parameter becomes required.
##### Responses
{% tabs get_features_Runwayml_features_response %}
{% tab get_features_Runwayml_features_response 200 %}
200 OK
The response below has been omitted for brevity to include only essential fields, the live endpoint will return a much larger response.
```json
{
"permitted": {
"storageGB": 500,
"numPlanCredits": 2250
},
"used": {
"numPlanCredits": 1315
}
}
```
{% endtab %}
{% tab get_features_Runwayml_features_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab get_features_Runwayml_features_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
The model below has been omitted for brevity to include only essential fields, the live endpoint will return many more fields.
```typescript
{ // TypeScript, all fields are optional
permitted: {
storageGB: number,
numPlanCredits: number
},
used: {
numPlanCredits: number
}
}
```
##### Examples
{% tabs get_features_Runwayml_features_example %}
{% tab get_features_Runwayml_features_example Curl %}
``` bash
curl "https://api.useapi.net/v1/runwayml/features/" \
-H "Accept: application/json" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab get_features_Runwayml_features_example JavaScript %}
``` javascript
const token = "API token";
const email = "Previously configured email";
const apiUrl = `https://api.useapi.net/v1/runwayml/features/?email=${email}`;
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`,
},
});
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab get_features_Runwayml_features_example Python %}
``` python
import requests
token = "API token"
email = "Previously configured email"
apiUrl = f"https://api.useapi.net/v1/runwayml/features/?email={email}"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-frames-describe ===
Document URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-frames-describe
---
layout: default
title: GET frames/describe
parent: Runway API v1
nav_order: 870
---
## Get image description
{: .no_toc }
February 24, 2025 (April 28, 2025)
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Extract a text image description that can be adjusted and used as a starting point for the prompt in [POST frames/create](../api-runwayml-v1/post-runwayml-frames-create).
This endpoint is available for all Runway accounts, including free ones.
{: .get }
> **https://api.useapi.net/v1/runwayml/frames/describe/`image_assetId`**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Path parameter
- `image_assetId` is **required**. Specify the image asset. You can upload an image via [POST assets](../api-runwayml-v1/post-runwayml-assets), you can get a list of all image assets via [GET assets](../api-runwayml-v1/get-runwayml-assets).
##### Responses
{% tabs get_Runwayml_frames_describe_response %}
{% tab get_Runwayml_frames_describe_response 200 %}
200 OK
```json
{
"textPrompt": "Subject: A woman wearing an elegant Greco-Roman style ivory silk dress with ornate golden embellishments at the neckline and waist. Multiple golden bangles adorn her wrists as she stands in a graceful pose with one hand extended to touch a column.\n\nScene: Ancient stone columns with weathered surfaces frame a shadowy interior space. The architectural elements suggest a classical temple or palace setting with fluted pillars and worn stone textures visible in the warm lighting.\n\nStyle: Dramatic chiaroscuro lighting creates deep shadows while highlighting the luxurious fabric draping and metallic details. The composition emphasizes classical beauty through careful attention to form, texture, and light interplay. Professional fashion photography meets fine art painting aesthetic. Classical, dramatic lighting, textile-focused, painterly, architectural."
}
```
{% endtab %}
{% tab get_Runwayml_frames_describe_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab get_Runwayml_frames_describe_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
textPrompt: string
error: string
code: number
}
```
##### Examples
{% tabs get_Runwayml_frames_describe_example %}
{% tab get_Runwayml_frames_describe_example Curl %}
``` bash
curl "https://api.useapi.net/v1/runwayml/frames/describe/image_assetId" \
-H "Accept: application/json" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab get_Runwayml_frames_describe_example JavaScript %}
``` javascript
const token = "API token";
const image_assetId = "image_assetId to retrieve";
const apiUrl = `https://api.useapi.net/v1/runwayml/frames/describe/${image_assetId}`;
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`,
},
});
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab get_Runwayml_frames_describe_example Python %}
``` python
import requests
token = "API token"
image_assetId = "image_assetId to retrieve"
apiUrl = f"https://api.useapi.net/v1/runwayml/frames/describe/{image_assetId}"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-image_upscaler ===
Document URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-image_upscaler
---
layout: default
title: GET image_upscaler
parent: Runway API v1
nav_order: 1100
---
## Upscale or Downscale image to specified dimensions
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Runway [AI Tools » Audio tools » Upscale Image](https://app.runwayml.com/video-tools/ai-tools/upscale-image).
This endpoint provides **free** & **unlimited** image upscaling/downscaling services. It works with **free** accounts without any limitations as well.
{: .get }
> **https://api.useapi.net/v1/runwayml/image_upscaler/?…**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Query Parameters
- `email` is optional when only one [account](../api-runwayml-v1/get-runwayml-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**.
- `image_url` is **required**. Image URL should be either the URL provided by [text_to_image_preview](../api-runwayml-v1/get-runwayml-text_to_image_preview) or an asset URL from [GET /assets](../api-runwayml-v1/get-runwayml-assets). You may need to upload the image using [POST /assets](../api-runwayml-v1/post-runwayml-assets) and use the URL provided for this parameter.
- `weight` is **required**. Specify image width.
- `height` is **required**. Specify image height.
##### Responses
{% tabs get_image_upscaler_Runwayml_image_upscaler_response %}
{% tab get_image_upscaler_Runwayml_image_upscaler_response 200 %}
200 OK
Binary response containing a new image.
{% endtab %}
{% tab get_image_upscaler_Runwayml_image_upscaler_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab get_image_upscaler_Runwayml_image_upscaler_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab get_image_upscaler_Runwayml_image_upscaler_response 404 %}
404 Not Found
```json
{
"message": "Image was not found"
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
Binary stream in case of HTTP 200 response.
Otherwise see type provided below:
{ // TypeScript, all fields are optional
error: string,
message: string,
code: number
}
```
##### Examples
{% tabs get_image_upscaler_Runwayml_image_upscaler_example %}
{% tab get_image_upscaler_Runwayml_image_upscaler_example Curl %}
``` bash
curl "https://api.useapi.net/v1/runwayml/image_upscaler/?image_url=https://…image.jpg&width=100&height=100" \
-H "Accept: application/json" \
-o resized_image.jpg
```
{% endtab %}
{% tab get_image_upscaler_Runwayml_image_upscaler_example JavaScript %}
``` javascript
const token = "API token";
const image_url="https://…image.jpg";
const width = 100;
const height = 200;
const apiUrl = `https://api.useapi.net/v1/runwayml/image_upscaler/?image_url=${image_url}&width=${width}&height=${height}`;
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`,
},
});
console.log("response", {response, result});
// response.blob() contains resized image
// • Node.js saving resized image to file:
// response.blob()
// .then(blob => blob.arrayBuffer())
// .then(buffer => fs.writeFile('resized_image.jpg', Buffer.from(buffer)));
// • Displaying response as an image on the webpage, as you see below in Try It section:
// const imageBlob = await response.blob();
// const imageUrl = URL.createObjectURL(imageBlob);
// const imageElement = document.getElementById('your-image-id');
// imageElement.src = imageUrl;
```
{% endtab %}
{% tab get_image_upscaler_Runwayml_image_upscaler_example Python %}
``` python
import requests
# from io import BytesIO
# from PIL import Image
token = "API token"
image_url = "https://…image.jpg"
width = 100
height = 200
api_url = f"https://api.useapi.net/v1/runwayml/image_upscaler/?image_url={image_url}&width={width}&height={height}"
headers = {
"Authorization": f"Bearer {token}",
}
response = requests.get(api_url, headers=headers)
with open('resized_image.jpg', 'wb') as f:
f.write(response.content)
# • Display the image (for example in a Jupyter Notebook)
# image_stream = BytesIO(response.content)
# image = Image.open(image_stream)
# image.show()
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-lipsync-voices ===
Document URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-lipsync-voices
---
layout: default
title: GET lipsync/voices
parent: Runway API v1
nav_order: 900
---
## Retrieve the list of available AI voices
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Runway [AI Tools » Audio tools » Generative Audio](https://app.runwayml.com/video-tools/ai-tools/generative-audio).
Runway [AI Tools » Audio tools » Lip Sync Video](https://app.runwayml.com/video-tools/ai-tools/generative-audio).
{: .get }
> **https://api.useapi.net/v1/runwayml/lipsync/voices/?…**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Query Parameters
- `email` is optional when only one [account](../api-runwayml-v1/get-runwayml-accounts) configured. However, if you have multiple accounts configured, this parameter becomes
##### Responses
{% tabs get_lipsync-voices_Runwayml_lipsync-voices_response %}
{% tab get_lipsync-voices_Runwayml_lipsync-voices_response 200 %}
200 OK
```json
[
{
"voiceId": "pNInz6obpgDQGcFmaJgB",
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"name": "Benjamin",
"description": "",
"labels": {
"accent": "american",
"description": "deep",
"age": "middle aged",
"gender": "male",
"use case": "narration"
},
"privateInTeam": true,
"createdBy": 1234567,
"sample": "https://runwayml.cloudfront.net/app/magic-tools/text-to-speech-voice-samples/Benjamin.mp3"
},
{
"voiceId": "XB0fDUnXU5powFXDhCwa",
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"name": "Claudia",
"description": "",
"labels": {
"accent": "british-swedish",
"description": "seductive",
"age": "young",
"gender": "female",
"use case": "characters"
},
"privateInTeam": true,
"createdBy": 1234567,
"sample": "https://runwayml.cloudfront.net/app/magic-tools/text-to-speech-voice-samples/Claudia.mp3"
}
]
```
{% endtab %}
{% tab get_lipsync-voices_Runwayml_lipsync-voices_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab get_lipsync-voices_Runwayml_lipsync-voices_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
voiceId: string,
createdAt: string,
lastUsedAt: string,
name: string,
description: string,
labels: {
accent: string,
age: string,
gender: string,
use_case: string,
description: string,
descriptive: string,
language: string,
usecase: string,
}
privateInTeam: boolean,
createdBy: number,
sample: string
}
```
##### Examples
{% tabs get_lipsync-voices_Runwayml_lipsync-voices_example %}
{% tab get_lipsync-voices_Runwayml_lipsync-voices_example Curl %}
``` bash
curl "https://api.useapi.net/v1/runwayml/lipsync/voices/" \
-H "Accept: application/json" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab get_lipsync-voices_Runwayml_lipsync-voices_example JavaScript %}
``` javascript
const token = "API token";
const email = "Previously configured email";
const apiUrl = `https://api.useapi.net/v1/runwayml/lipsync/voices/?email=${email}`;
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`,
},
});
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab get_lipsync-voices_Runwayml_lipsync-voices_example Python %}
``` python
import requests
token = "API token"
email = "Previously configured email"
apiUrl = f"https://api.useapi.net/v1/runwayml/lipsync/voices/?email={email}"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-scheduler ===
Document URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-scheduler
---
layout: default
title: GET scheduler
parent: Runway API v1
nav_order: 1700
---
## Retrieve the list of tasks currently being executed by the API
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint retrieves the list of tasks currently being executed by the API. If you want to get all tasks currently being executed including you manually initiated from Runway website use [GET /tasks](../api-runwayml-v1/get-runwayml-tasks).
Example […/tasks/?statuses=PENDING,RUNNING,THROTTLED&offset=0&limit=50](../api-runwayml-v1/get-runwayml-tasks).
{: .get }
> **https://api.useapi.net/v1/runwayml/scheduler/**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Responses
{% tabs get_scheduler_Runwayml_scheduler_response %}
{% tab get_scheduler_Runwayml_scheduler_response 200 %}
200 OK
```json
[
{
"taskId": "user:user_id-runwayml:account_email-task:task_#1_uuid",
"replyUrl": "",
"replyRef": ""
},
{
"taskId": "user:user_id-runwayml:account_email-task:task_#N_uuid",
"replyUrl": "",
"replyRef": ""
}
]
```
{% endtab %}
{% tab get_scheduler_Runwayml_scheduler_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
taskId: string
replyUrl: string
replyRef: string
}[]
```
##### Examples
{% tabs get_scheduler_Runwayml_scheduler_example %}
{% tab get_scheduler_Runwayml_scheduler_example Curl %}
``` bash
curl "https://api.useapi.net/v1/runwayml/scheduler/" \
-H "Accept: application/json" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab get_scheduler_Runwayml_scheduler_example JavaScript %}
``` javascript
const token = "API token";
const apiUrl = `https://api.useapi.net/v1/runwayml/scheduler/`;
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`,
},
});
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab get_scheduler_Runwayml_scheduler_example Python %}
``` python
import requests
token = "API token"
apiUrl = f"https://api.useapi.net/v1/runwayml/scheduler/"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-tasks-taskId ===
Document URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-tasks-taskId
---
layout: default
title: GET tasks/taskId
parent: Runway API v1
nav_order: 2000
---
## Retrieve task
{: .no_toc }
August 8, 2024 (December 15, 2025)
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Use this endpoint to retrieve status and results of
* [gen4_5/create](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen4_5-create)
* [gen4turbo/create](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen4turbo-create)
* [gen4/create](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen4-create)
* [gen4/upscale](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen4-upscale)
* [gen4/act-two](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen4-act-two)
* [gen4/act-two-voice](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen4-act-two-voice)
* [gen4/video](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen4-video)
* [gen3turbo/create](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3turbo-create)
* [gen3turbo/video](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3turbo-video)
* [gen3turbo/extend](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3turbo-extend)
* [gen3turbo/expand](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3turbo-expand)
* [gen3turbo/actone](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3turbo-actone)
* [gen3/create](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-create)
* [gen3/video](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-video)
* [gen3/extend](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-extend)
* [gen3/actone](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-actone)
* [gen3alpha/upscale](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3alpha-upscale)
* [lipsync/create](https://useapi.net/docs/api-runwayml-v1/post-runwayml-lipsync-create)
* [frames/create](https://useapi.net/docs/api-runwayml-v1/post-runwayml-frames-create)
{: .get }
> **https://api.useapi.net/v1/runwayml/tasks/`taskId`**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Path parameter
- `taskId` is **required**. Specify the taskId you want to retrieve.
##### Responses
{% tabs get_tasks_taskId_Runwayml_tasks_taskId_response %}
{% tab get_tasks_taskId_Runwayml_tasks_taskId_response 200 %}
200 OK
```json
{
"taskId": "user:user_id-runwayml:account_email-task:task_uuid"
"id": "",
"name": "Gen-3 Alpha 123456, Slow motion zoom in, cat chasing dog in the kitchen",
"image": null,
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"taskType": "gen3a",
"options": {
"name": "Gen-3 Alpha 123456789, Slow motion zoom in, cat chasing dog in the kitchen",
"seconds": 5,
"text_prompt": "Slow motion zoom in",
"seed": 123456789,
"exploreMode": true,
"watermark": false,
"enhance_prompt": false,
"init_image": "",
"resolution": "720p",
"assetGroupName": "Generative Video",
"recordingEnabled": true
},
"status": "SUCCEEDED",
"error": null,
"progressText": null,
"progressRatio": "1",
"estimatedTimeToStartSeconds": null,
"artifacts": [
{
"assetId": "user:user_id-runwayml:account_email-asset:asset_uuid",
"id": "",
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"userId": 1234567,
"createdBy": 1234567,
"taskId": "user:user_id-runwayml:account_email-task:task_uuid",
"parentAssetGroupId": "",
"filename": "Gen-3 Alpha 123456789, Slow motion zoom in, cat chasing dog in the kitchen",
"url": "",
"fileSize": "12345678",
"isDirectory": false,
"previewUrls": [""],
"private": true,
"privateInTeam": true,
"deleted": false,
"reported": false,
"metadata": {
"frameRate": 24,
"duration": 5.209,
"dimensions": [
1280,
768
],
"size": {
"width": 1280,
"height": 768
}
},
"favorite": false
}
],
"sharedAsset": null
}
```
{% endtab %}
{% tab get_tasks_taskId_Runwayml_tasks_taskId_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab get_tasks_taskId_Runwayml_tasks_taskId_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab get_tasks_taskId_Runwayml_tasks_taskId_response 404 %}
404 Not Found
```json
{
"error": "Not found.",
"code": 404
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
taskId: string,
id: string,
name: string,
image: string,
createdAt: string,
updatedAt: string,
taskType: string,
options: {
name: string,
seconds: number,
gen2Options: {
mode: string,
text_prompt: string,
seed: number,
interpolate: boolean,
upscale: boolean,
watermark: boolean,
motion_score: number,
use_motion_score: boolean,
use_motion_vectors: boolean,
style: string,
width: number,
height: number,
motion_vector: {
x: number,
y: number,
r: number,
z: number,
bg_x_pan: number,
bg_y_pan: number
},
init_video: string,
image_prompt: string,
init_image: string,
keyframes: { image: string, timestamp: number }[],
extended_from_task_id: string
},
gen_audio_options: {
name: string,
text: string,
voice_id: string,
model_id: string
},
paid_user_watermark_override: boolean,
recordingEnabled: boolean,
exploreMode: boolean,
assetGroupName: string,
image: string,
video: string,
image_asset_id: string,
video_asset_id: string,
audio: string,
audio_asset_id: string,
watermark: boolean,
text_prompt: string,
seed: number,
image_as_end_frame: boolean,
init_video: string,
extended_from_task_id: string,
video_prompt: string,
flip: boolean,
width: number,
height: number,
structure_transformation: number
},
status: string,
error: {
errorMessage: string,
reason: string,
message: string,
moderation_category: string,
tally_asimov: boolean
},
progressText: string,
progressRatio: string,
estimatedTimeToStartSeconds: number,
assetId: string,
sharedAsset: any,
artifacts: {
taskId: string,
id: string,
createdAt: string,
updatedAt: string,
userId: number,
createdBy: number,
parentAssetGroupId: string,
filename: string,
url: string,
fileSize: string,
isDirectory: boolean,
previewUrls: string[],
private: boolean,
privateInTeam: boolean,
deleted: boolean,
reported: boolean,
metadata: {
frameRate: number,
duration: number,
dimensions: [number, number],
size: {
width: number,
height: number
}
},
favorite: boolean,
}
}
```
##### Examples
{% tabs get_tasks_taskId_Runwayml_tasks_taskId_example %}
{% tab get_tasks_taskId_Runwayml_tasks_taskId_example Curl %}
``` bash
curl "https://api.useapi.net/v1/runwayml/tasks/taskId" \
-H "Accept: application/json" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab get_tasks_taskId_Runwayml_tasks_taskId_example JavaScript %}
``` javascript
const token = "API token";
const taskId = "taskId to retrieve";
const apiUrl = `https://api.useapi.net/v1/runwayml/tasks/${taskId}`;
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`,
},
});
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab get_tasks_taskId_Runwayml_tasks_taskId_example Python %}
``` python
import requests
token = "API token"
taskId = "taskId to retrieve"
apiUrl = f"https://api.useapi.net/v1/runwayml/tasks/{taskId}"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-tasks ===
Document URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-tasks
---
layout: default
title: GET tasks
parent: Runway API v1
nav_order: 1900
---
## Retrieve tasks
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
{: .get }
> **https://api.useapi.net/v1/runwayml/tasks/?…**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Query Parameters
- `email` is optional when only one [account](../api-runwayml-v1/get-runwayml-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**.
- `offset` is **required**. This parameter is used to facilitate pagination.
Valid range 0…1000.
- `limit` is **required** . This parameter is used to facilitate pagination.
Valid range 1…1000.
- `statuses` is optional. Filter results by a comma-separated list of task statuses, e.g. `PENDING,RUNNING,THROTTLED`.
Supported values: `PENDING`, `RUNNING`, `THROTTLED`, `SUCCEEDED` and `FAILED`.
##### Responses
{% tabs get_tasks_Runwayml_tasks_response %}
{% tab get_tasks_Runwayml_tasks_response 200 %}
200 OK
Retrieving `taskId` […/tasks/?taskId=task_id](https://api.useapi.net/v1/runwayml/tasks/?taskId=task_id)
```json
{
"taskId": "user:user_id-runwayml:account_email-task:task_uuid"
"id": "",
"name": "Gen-3 Alpha 123456, Slow motion zoom in, cat chasing dog in the kitchen",
"image": null,
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"taskType": "gen3a",
"options": {
"name": "Gen-3 Alpha 123456789, Slow motion zoom in, cat chasing dog in the kitchen",
"seconds": 5,
"text_prompt": "Slow motion zoom in",
"seed": 123456789,
"exploreMode": true,
"watermark": false,
"enhance_prompt": false,
"init_image": "",
"resolution": "720p",
"assetGroupName": "Generative Video",
"recordingEnabled": true
},
"status": "SUCCEEDED",
"error": null,
"progressText": null,
"progressRatio": "1",
"estimatedTimeToStartSeconds": null,
"artifacts": [
{
"assetId": "user:user_id-runwayml:account_email-asset:asset_uuid",
"id": "",
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"userId": 1234567,
"createdBy": 1234567,
"taskId": "user:user_id-runwayml:account_email-task:task_uuid",
"parentAssetGroupId": "",
"filename": "Gen-3 Alpha 123456789, Slow motion zoom in, cat chasing dog in the kitchen",
"url": "",
"fileSize": "12345678",
"isDirectory": false,
"previewUrls": [""],
"private": true,
"privateInTeam": true,
"deleted": false,
"reported": false,
"metadata": {
"frameRate": 24,
"duration": 5.209,
"dimensions": [
1280,
768
],
"size": {
"width": 1280,
"height": 768
}
},
"favorite": false
}
],
"sharedAsset": null
}
```
{% endtab %}
{% tab get_tasks_Runwayml_tasks_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab get_tasks_Runwayml_tasks_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
taskId: string,
id: string,
name: string,
image: string,
createdAt: string,
updatedAt: string,
taskType: string,
options: {
name: string,
seconds: number,
gen2Options: {
mode: string,
text_prompt: string,
seed: number,
interpolate: boolean,
upscale: boolean,
watermark: boolean,
motion_score: number,
use_motion_score: boolean,
use_motion_vectors: boolean,
style: string,
width: number,
height: number,
motion_vector: {
x: number,
y: number,
r: number,
z: number,
bg_x_pan: number,
bg_y_pan: number
},
init_video: string,
image_prompt: string,
init_image: string,
extended_from_task_id: string
},
gen_audio_options: {
name: string,
text: string,
voice_id: string,
model_id: string
},
paid_user_watermark_override: boolean,
recordingEnabled: boolean,
exploreMode: boolean,
assetGroupName: string,
image: string,
video: string,
image_asset_id: string,
video_asset_id: string,
audio: string,
audio_asset_id: string
watermark: boolean,
text_prompt: string,
seed: number,
image_as_end_frame: boolean,
init_video: string,
extended_from_task_id: string
},
status: string,
error: {
errorMessage: string,
reason: string,
message: string,
moderation_category: string,
tally_asimov: boolean
},
progressText: string,
progressRatio: string,
estimatedTimeToStartSeconds: number,
assetId: string,
sharedAsset: any,
artifacts: {
taskId: string,
id: string,
createdAt: string,
updatedAt: string,
userId: number,
createdBy: number,
parentAssetGroupId: string,
filename: string,
url: string,
fileSize: string,
isDirectory: boolean,
previewUrls: string[],
private: boolean,
privateInTeam: boolean,
deleted: boolean,
reported: boolean,
metadata: {
frameRate: number,
duration: number,
dimensions: [number, number],
size: {
width: number,
height: number
}
},
favorite: boolean,
}[]
}
```
##### Examples
{% tabs get_tasks_Runwayml_tasks_example %}
{% tab get_tasks_Runwayml_tasks_example Curl %}
``` bash
curl "https://api.useapi.net/v1/runwayml/tasks/?offset=0&limit=50&email=email" \
-H "Accept: application/json" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab get_tasks_Runwayml_tasks_example JavaScript %}
``` javascript
const token = "API token";
const email = "Previously configured email";
const apiUrl = `https://api.useapi.net/v1/runwayml/tasks/?offset=0&limit=50&email=${email}`;
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`,
},
});
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab get_tasks_Runwayml_tasks_example Python %}
``` python
import requests
token = "API token"
email = "Previously configured email"
apiUrl = f"https://api.useapi.net/v1/runwayml/tasks/?offset=0&limit=50&email={email}"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-text_to_image_preview ===
Document URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-text_to_image_preview
---
layout: default
title: GET text_to_image_preview
nav_exclude: true
---
## Text to Image instant generation (Stable Diffusion) (retired)
{: .no_toc }
August 8, 2024 (December 15, 2025)
Runway website no longer supports Gen-2. This endpoint no loner available.
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Important
**Runway retired this endpoint in September 2025.
Please use [POST frames/create](post-runwayml-frames-create) instead.**
Runway [AI Tools » Video tools » Gen-2 Text/Image to Video](https://app.runwayml.com/video-tools/ai-tools/generative-video) page, button.
This endpoint provides **free** & **unlimited** Stable Diffusion text-to-image generations. It works with **free** accounts without any limitations as well. It takes on average between 10 to 60 seconds to complete. You can make multiple requests in parallel.
Please be aware that Runway's moderation system analyzes your prompt and may respond with `403` if the prompt is determined to be offensive. Runway monitors the rate and the number of moderated prompts, which may result in your account being suspended when the internal threshold is exceeded.
{: .get }
> **https://api.useapi.net/v1/runwayml/text_to_image_preview/?…**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Query Parameters
- `email` is optional when only one [account](../api-runwayml-v1/get-runwayml-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**.
- `text_prompt` is **required**. Specify text prompt.
- `prompt_weight` is optional. Specify weight of the prompt.
Valid range 1...30.
- `negative_prompt` is optional. Specify negative prompt.
- `seed` is optional.
Valid range 1…4294967294.
- `style` is optional. If not provided `cinematic` will be used by default.
Supported values: `cinematic`, `abandoned`, `abstract_sculpture`, `advertising`, `anime`, `architectural`, `cartoon`, `cine_lens`, `claymation`, `concept_art`, `digital_art`, `duotone_artistic_photo`, `forestpunk`, `frost`, `graphic_novel`, `graphite`, `impressionist_painting`, `isometric_3d`, `low_poly_3d`, `macro_photography`, `marker_drawing`, `moody_film`, `pixel_art`, `retro_photography`, `sci-fi_art`, `stickers`, `storyboard`, `actor_casting`, `thriller`, `35mm`, `3d_cartoon`, `3d_render`, `80s_vaporwave`.
- `aspect_ratio` is optional. If not provided `16:9` will be used by default.
Supported values: `21:9`,`1:1`, `9:16`, `16:9`, `4:3`, `3:4`
##### Responses
{% tabs get_text_to_image_preview_Runwayml_text_to_image_preview_response %}
{% tab get_text_to_image_preview_Runwayml_text_to_image_preview_response 200 %}
200 OK
```json
{
"url": "",
"seed": 1234567
}
```
{% endtab %}
{% tab get_text_to_image_preview_Runwayml_text_to_image_preview_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab get_text_to_image_preview_Runwayml_text_to_image_preview_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab get_text_to_image_preview_Runwayml_text_to_image_preview_response 403 %}
403 Forbidden
Runway moderation message. Runway monitors the rate and the number of moderated prompts, which may result in your account being suspended when the internal threshold is exceeded.
```json
{
"message": "Text did not pass content moderation.",
"moderation_category": "SEXUALLY_EXPLICIT",
"reason": "SAFETY.INPUT.TEXT",
"tally_asimov": true
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
url: string,
seed: number,
error: string,
message: string,
moderation_category: string,
reason: string,
tally_asimov: boolean,
code: number
}
```
##### Examples
{% tabs get_text_to_image_preview_Runwayml_text_to_image_preview_example %}
{% tab get_text_to_image_preview_Runwayml_text_to_image_preview_example Curl %}
``` bash
curl "https://api.useapi.net/v1/runwayml/text_to_image_preview/?text_prompt=happy cat" \
-H "Accept: application/json" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab get_text_to_image_preview_Runwayml_text_to_image_preview_example JavaScript %}
``` javascript
const token = "API token";
const text_prompt="happy cat";
const apiUrl = `https://api.useapi.net/v1/runwayml/text_to_image_preview/?text_prompt=${text_prompt}`;
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`,
},
});
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab get_text_to_image_preview_Runwayml_text_to_image_preview_example Python %}
``` python
import requests
token = "API token"
text_prompt = "happy cat"
apiUrl = f"https://api.useapi.net/v1/runwayml/text_to_image_preview/?text_prompt={text_prompt}"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-transcribe ===
Document URL: https://useapi.net/docs/api-runwayml-v1/get-runwayml-transcribe
---
layout: default
title: GET transcribe
parent: Runway API v1
nav_order: 1200
---
## Transcribe audio or video to text
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Runway [AI Tools » Audio tools » Transcript](https://app.runwayml.com/video-tools/ai-tools/subtitles).
This endpoint provides **free** and **unlimited** audio/video to text transcription services. It works with **free** accounts without any limitations as well.
{: .get }
> **https://api.useapi.net/v1/runwayml/transcribe/?…**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Query Parameters
- `assetId` is **required**. Specify the audio or video assetId you want to transcribe. Use [GET /assets](../api-runwayml-v1/get-runwayml-assets) to see the list of assets. To upload a new audio/video asset use [POST /assets](../api-runwayml-v1/post-runwayml-assets).
- `language` is **required**. Specify value from table below:
| Value | Title |
| ----- | ------------------------ |
| en | English |
| en_au | English (Australian) |
| en_uk | English (United Kingdom) |
| en_us | English (United States) |
| es | Spanish |
| fr | French |
| de | German |
| it | Italian |
| pt | Portuguese |
| nl | Dutch |
##### Responses
{% tabs get_transcribe_Runwayml_transcribe_response %}
{% tab get_transcribe_Runwayml_transcribe_response 200 %}
200 OK
```json
{
"id": "",
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"userId": 123455,
"mediaUrl": "",
"languageCode": "en",
"words": [
{
"start": 1400,
"end": 1560,
"text": "Hi",
"confidence": 1,
"speaker": null
},
{
"start": 1560,
"end": 1872,
"text": "there",
"confidence": 0.89742,
"speaker": null
}
],
"status": "completed",
"utterances": null
}
```
{% endtab %}
{% tab get_transcribe_Runwayml_transcribe_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab get_transcribe_Runwayml_transcribe_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab get_transcribe_Runwayml_transcribe_response 404 %}
404 Not Found
```json
{
"error": "Not found.",
"code": 404
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
id: string,
createdAt: string,
updatedAt: string,
userId: number,
mediaUrl: string,
languageCode: string,
words: {
start: number,
end: number,
text: string,
confidence: number,
speaker: string
}[],
status: string
}
```
##### Examples
{% tabs get_transcribe_Runwayml_transcribe_example %}
{% tab get_transcribe_Runwayml_transcribe_example Curl %}
``` bash
curl "https://api.useapi.net/v1/runwayml/transcribe/?assetId=user:user_id-runwayml:account_email-asset:asset_uuid&language=en" \
-H "Accept: application/json" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab get_transcribe_Runwayml_transcribe_example JavaScript %}
``` javascript
const token = "API token";
const assetId = "audio or video assetId";
const language = "en";
const apiUrl = `https://api.useapi.net/v1/runwayml/transcribe/?assetId=${assetId}&language=${language}`;
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
});
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab get_transcribe_Runwayml_transcribe_example Python %}
``` python
import requests
token = "API token"
assetId = "audio or video assetId"
language = "en"
apiUrl = f"https://api.useapi.net/v1/runwayml/transcribe/?assetId={assetId}&language={language}";
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-accounts-email ===
Document URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-accounts-email
---
layout: default
title: POST accounts/email
parent: Runway API v1
nav_order: 300
---
## Create or update Runway API account configuration
{: .no_toc }
August 8, 2024
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
For your convenience, you can specify your Runway configuration values under your account. If you specify multiple Runway accounts, the API will automatically perform load balancing by randomly selecting an account with available capacity before making calls to Runway.
{: .post }
> **https://api.useapi.net/v1/runwayml/accounts/`email`**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Request Body
```json
{
"email": "Runway account email",
"password": "Runway account password",
"maxJobs": 1-10,
}
```
- `email`, `password` are **required**. Please see [Setup Runway](../start-here/setup-runwayml) for details.
- `email` value specified in the request body **must match** the email value specified in the URL path https://api.useapi.net/v1/runwayml/accounts/`email`.
- `maxJobs` is **required**. Currently, it should be between 1 and 10. We recommend setting this value to 5.
##### Responses
{% tabs post_account_Runwayml_response %}
{% tab post_account_Runwayml_response 200 %}
200 OK
```json
{
"email": "user-1@example.com",
"password": "",
"maxJobs": 5,
"jwt": {
"token": "",
"exp": 1734858598.864,
"iat": 1732266598.864,
"id": 123456,
}
}
```
{% endtab %}
{% tab post_account_Runwayml_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab post_account_Runwayml_response 401 %}
401 Unauthorized
```json
{
"error":
"Unauthorized",
"Wrong username/password combination.",
"This account has been suspended."
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
email: string,
password: string,
maxJobs: number,
jwt: {
token: string,
exp: number,
iat: number,
id: number,
}
error: string,
errorDetails: string,
code: number
}
```
##### Examples
{% tabs post_account_Runwayml_example %}
{% tab post_account_Runwayml_example Curl %}
``` bash
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer …" \
-X POST https://api.useapi.net/v1/runwayml/accounts/ \
-d '{"email": "…", "password": "…", "maxJobs": …}'
```
{% endtab %}
{% tab post_account_Runwayml_example JavaScript %}
``` javascript
const email = "Runway account email";
const password = "Runway account password";
const apiUrl = `https://api.useapi.net/v1/runwayml/accounts/${email}`;
const token = "API token";
const maxJobs = 5;
const data = {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json' }
};
data.body = JSON.stringify({
email, password, maxJobs
});
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab post_account_Runwayml_example Python %}
``` python
import requests
email = "Runway account email"
password = "Runway account password"
apiUrl = f"https://api.useapi.net/v1/runwayml/accounts/{email}"
token = "API token"
maxJobs = 5
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
body = {
"email": f"{email}",
"password": f"{password}",
"maxJobs": maxJobs
}
response = requests.post(apiUrl, headers=headers, json=body)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-assets ===
Document URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-assets
---
layout: default
title: POST assets
parent: Runway API v1
nav_order: 1500
---
## Upload the asset to your Runway account
{: .no_toc }
August 8, 2024 (July 22, 2025)
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Runway [Assets](https://app.runwayml.com/video-tools/assets).
**IMPORTANT**
If you have multiple accounts configured, you must specify the desired account where assets will be uploaded via the `email` parameter. All API endpoints where an asset is used will use the same account to execute the generation as the one where the asset was uploaded. So, by uploading an asset to the desired account, you effectively select that account for generation with that asset.
[POST raw content using Make.com and similar nocode tools.](../questions-and-answers.html#how-post-raw-content-to-runwaymlassets-and-minimaxfiles-using-makecom-and-similar-nocode-tools)
{: .post }
> **https://api.useapi.net/v1/runwayml/assets/?…**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: select from the table below
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
- `Content-Type` is **required**, select from the table below:
| Content-Type | File Extension |
| ------------------- | -------------- |
| image/png | png |
| image/jpeg | jpeg |
| image/gif | gif |
| image/webp | webp |
| image/mpo | mpo |
| video/mp4 | mp4 |
| video/quicktime | mov |
| video/3gpp | 3gp |
| video/x-matroska | mkv |
| video/x-flv | flv |
| video/mpeg | mpeg |
| video/MP2T | ts |
| video/x-msvideo | avi |
| video/x-motion-jpeg | mjpeg |
| video/webm | webm |
| video/ogg | ogv |
| audio/wav | wav |
| audio/wave | wav |
| audio/mpeg | mp3 |
| audio/flac | flac |
| audio/ogg | ogg |
| audio/webm | webm |
##### Query Parameters
- `email` is optional when only one [account](../api-runwayml-v1/get-runwayml-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**.
- `name` is **required**. Specify the name of the asset.
- `width` is optional. Specify image or video width in pixels.
This value is currently used by the following API endpoints:
* [super_slow_motion](../api-runwayml-v1/post-runwayml-super_slow_motion).
- `height` is optional. Specify image or video height in pixels.
This value is currently used by the following API endpoints:
* [super_slow_motion](../api-runwayml-v1/post-runwayml-super_slow_motion).
##### Request Body
Provide content of the uploaded file as a binary data.
##### Responses
{% tabs post_assets_Runwayml_assets_response %}
{% tab post_assets_Runwayml_assets_response 200 %}
200 OK
```json
{
"assetId": "user:user_id-runwayml:account_email-asset:asset_uuid",
"id": "",
"user": {
"id": 1234567,
"username": "",
"firstName": "",
"lastName": "",
"picture": null,
"teamName": "",
"teamPicture": null
},
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"name": "",
"description": "",
"type": {
"name": "image",
"type": "image",
"isDirectory": false
},
"size": 123456789,
"url": "",
"previewUrls": [""],
"fileCount": 1,
"private": true,
"permissions": {
"read": true,
"write": true,
"admin": true
},
"annotated": false,
"isUserUpload": true,
"sourceApplication": "web",
"createdBy": {
"id": 1234567,
"username": "",
"firstName": "",
"lastName": "",
"picture": null,
"teamName": "",
"teamPicture": null
},
"favorite": false
}
```
{% endtab %}
{% tab post_assets_Runwayml_assets_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab post_assets_Runwayml_assets_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
assetId: string,
id: string,
user: {
id: number,
username: string,
firstName: string,
lastName: string,
picture: string,
teamName: string,
teamPicture: string,
},
createdAt: string,
updatedAt: string,
name: string,
description: string,
type: {
name: string,
type: string,
isDirectory: boolean,
},
size: number,
url: string,
previewUrls: string[],
fileCount: number,
private: boolean,
permissions: {
read: boolean,
write: boolean,
admin: boolean,
},
annotated: boolean,
isUserUpload: boolean,
sourceApplication: string,
createdBy: {
id: number,
username: string,
firstName: string,
lastName: string,
picture: string,
teamName: string,
teamPicture: string,
},
favorite: boolean
}
```
##### Examples
{% tabs post_assets_Runwayml_assets_example %}
{% tab post_assets_Runwayml_assets_example Curl %}
``` bash
curl -X POST "https://api.useapi.net/v1/runwayml/assets/?name=your_file_name" \
-H "Authorization: Bearer …" \
-H "Content-Type: image/jpeg" \
--data-binary /path/to/your/image_or_video_or_audio_file.jpeg
```
{% endtab %}
{% tab post_assets_Runwayml_assets_example JavaScript %}
``` javascript
const token = "API token";
const name = "asset name";
const apiUrl = `https://api.useapi.net/v1/runwayml/assets/?name=${name}`;
let blob;
/*
// Example 1: Fetch image from URL
const imageUrl = "https://upload.wikimedia.org/wikipedia/commons/7/7d/Mona_Lisa_color_restoration.jpg";
const responseImage = await fetch(imageUrl);
blob = await responseImage.blob();
*/
/*
// Example 2: Load image from local file (Blob)
const fsp = require('fs').promises;
const imageFileName = "./cat.png";
blob = new Blob([await fsp.readFile(imageFileName)]);
*/
/*
// Example 3: Load from input file html element
//
const imageFile = document.getElementById(`image-file`);
if (imageFile.files[0])
blob = imageFile.files[0]);
*/
const response = await fetch(apiUrl, {
method: "POST"
headers: {
"Authorization": `Bearer ${token}`,
},
body: blob
});
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab post_assets_Runwayml_assets_example Python %}
``` python
import requests
token = "API token"
name = "asset name"
email = "email"
api_url = f"https://api.useapi.net/v1/runwayml/assets/?name={name}&email={email}"
headers = {
'Authorization': f'Bearer {token}',
'Content-Type': 'image/jpeg'
}
# # Example 1: Fetch image from URL
# image_url = "https://upload.wikimedia.org/wikipedia/commons/7/7d/Mona_Lisa_color_restoration.jpg"
# response_image = requests.get(image_url)
# file_content = response_image.content
# # Example 2: Load image from local file
# image_file_path = "./image.jpg"
# with open(image_file_path, 'rb') as image_file:
# file_content = image_file.read()
response = requests.post(api_url, headers=headers, data=file_content)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-frames-create ===
Document URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-frames-create
---
layout: default
title: POST frames/create
parent: Runway API v1
nav_order: 850
---
## Frames
{: .no_toc }
January 29, 2025 (June 6, 2025)
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Frames is Runway's most advanced base model for image generation, offering unprecedented stylistic control and visual fidelity.
This endpoint will generate 4 high-definition 1080p images in under 20 seconds on average. You can also run several generations in parallel.
[Frames Prompting Guide](https://help.runwayml.com/hc/en-us/articles/35694045317139-Frames-Prompting-Guide).
[References Guide](https://help.runwayml.com/hc/en-us/articles/40042718905875-References-Guide).
You can specify the first, second, and third reference images via the `imageAssetId1`, `imageAssetId2`, and `imageAssetId3` parameters and refer to them in the prompt as `@IMG_1`, `@IMG_2`, and `@IMG_3`. See [example](../../blog/250430).
Please be aware that Runway's moderation system analyzes your image and text prompts and may fail task with moderation message if the prompt is determined to be offensive. Runway monitors the rate and the number of moderated tasks, which may result in your account being suspended when the internal threshold is exceeded.
See article [Mastering Runway Frames](../articles/runway-frames-script) featuring a script for batch-generating images using Runway Frames.
The **account** you use to upload asset(s) via [POST /assets](../api-runwayml-v1/post-runwayml-assets) will also be used to execute the generation. Uploading an asset to a specific account ensures that generation with that asset will occur under the same account.
{: .post }
> **https://api.useapi.net/v1/runwayml/frames/create**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Request Body
```json
{
"email": "Optional Runway API account email",
"text_prompt": "Required text prompt",
"aspect_ratio": "21:9",
"diversity": 5,
"num_images": 4,
"style": "vivid",
"seed": 12345678,
"exploreMode": true,
"replyUrl": "Place your call back URL here",
"replyRef": "Place your reference id here",
"maxJobs": 5
}
```
- `email` is optional, if not provided API will randomly select available [account](../api-runwayml-v1/get-runwayml-accounts).
- `text_prompt` is **required**. Describe your image in detail. [Frames Prompting Guide](https://help.runwayml.com/hc/en-us/articles/35694045317139-Frames-Prompting-Guide).
Maximum length 1000 characters.
- `imageAssetId1`, `imageAssetId2` and `imageAssetId3` are optional. Specify the assetIds of the first, second and third reference images. Use [GET /assets/?mediaType=image](../api-runwayml-v1/get-runwayml-assets) to see the list of image assets. To upload a new image asset use [POST /assets](../api-runwayml-v1/post-runwayml-assets). Parameters can be referred in the prompt as `@IMG_1`, `@IMG_2`, and `@IMG_3`. See [example](../../blog/250430).
- `style` is optional.
Supported values: `vivid`, `vivid-warm`, `vivid-cool`, `high-contrast`, `high-contrast-warm`, `high-contrast-cool`, `bw`, `bw-contrast`, `muted-pastel`, `dreamscape`, `nordic-minimal`, `light-anime`, `dark-anime`, `painted-anime`, `3d-cartoon`, `sketch`, `low-angle`, `in-motion`, `terracotta`.
- `aspect_ratio` is optional.
Supported values: `16:9` (default), `9:16`, `1:1`, `4:3`, `3:4`, `21:9`.
- `diversity` is optional. Aesthetic Range, higher values increase the creative variation between generations in a set.
Valid range: 0…5. Default 2.
- `num_images` is optional.
Supported values: `1` (default), `4`.
- `seed` is optional.
Valid range 1…4294967294.
- `exploreMode` is optional. Set to `true` if you have a Runway [Unlimited plan](https://help.runwayml.com/hc/en-us/articles/18053095835795-Unlimited-plan-details) and wish to execute relaxed generation. You are not charged credits for Explore mode generations.
- `replyUrl` is optional, if not provided value from [useapi.net account](../account-management/get-account) will be used.
Place here your callback URL. API will call the provided `replyUrl` once Runway task completed or failed.
Maximum length 1024 characters.
We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality.
- `replyRef` is optional, place here your reference id which will be stored and returned along with this Runway task response / result.
Maximum length 1024 characters.
- `maxJobs` is optional, if not provided value for referenced by image assetId account will be used.
Valid range: 1…10.
Runway has dynamic query capacity and guarantees that, for a given account, at least one job will run — often two, and very rarely, three. If you have a single account linked, keep adding new jobs until you receive a `429` response. Once you get a `429`, wait for xx seconds or until at least one job completes, then try again. If you need to run more jobs in parallel, simply add more Runway accounts.
##### Responses
{% tabs post_frames-create_Runwayml_response %}
{% tab post_frames-create_Runwayml_response 200 %}
200 OK
Use returned `taskId` to retrieve task status and results using [GET /tasks/`taskId`](../api-runwayml-v1/get-runwayml-tasks-taskId). The generated images can be found in the `artifacts` array of the task with the status `SUCCEEDED`.
If you specify the optional parameter [`replyUrl`](post-runwayml-frames-create#request-body) the API will call the provided `replyUrl` with task progress updates until the task is complete or fails.
```json
{
"taskId": "user:user_id-runwayml:account_email-task:task_uuid",
"id": "",
"name": "",
"image": null,
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"taskType": "text_to_image",
"options": {
"name": "",
"text_prompt": "",
"seed": 12345789,
"exploreMode": true,
"diversity": 2,
"num_images": 4,
"style": "vivid",
"width": 1088,
"height": 1920,
"flip": true,
"assetGroupName": "Text to Image",
"recordingEnabled": true
},
"status": "PENDING",
"error": null,
"progressText": null,
"progressRatio": null,
"estimatedTimeToStartSeconds": 0,
"artifacts": [],
"sharedAsset": null,
"sourceAssetId": null,
"replyUrl": "https://webhook.site/abc",
"replyRef": "",
"code": 200
}
```
{% endtab %}
{% tab post_frames-create_Runwayml_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab post_frames-create_Runwayml_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab post_frames-create_Runwayml_response 412 %}
412 Insufficient credits
You do not have enough credits to run this task.
```json
{
"error": "You do not have enough credits to run this task."
}
```
{% endtab %}
{% tab post_frames-create_Runwayml_response 429 %}
429 Too Many Requests
Wait in a loop for **at least** 10..30 seconds and retry again.
There are two possible cases for API response 429:
* API query is full and can not accept new [frames/create](#frames) requests. Size of query defined by [`maxJobs` optional parameter](#request-body).
```json
{
"error": "Account is busy executing tasks",
"runningTasks": {
"": [
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#1_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
},
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#N_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
}
]
},
"code": 429
}
```
* The API received an HTTP response status 429 from Runway. Runway has dynamic query management and may limit the number of simultaneously executed tasks based on internal service load and policies.
```json
{
"error": "You have too many tasks running or pending. Please wait for some of them to finish before starting more."
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
taskId: string,
id: string,
name: string,
image: string,
createdAt: string,
updatedAt: string,
taskType: string,
options: {
name: string,
text_prompt: string,
diversity: number,
style: string,
seed: number,
exploreMode: boolean,
flip: boolean,
width: number,
height: number,
num_images: number,
assetGroupName: string,
recordingEnabled: boolean
},
status: string,
progressText: string,
progressRatio: number,
estimatedTimeToStartSeconds: number,
artifacts: any[],
sharedAsset: any,
error: {
errorMessage: string,
reason: string,
message: string,
moderation_category: string,
tally_asimov: boolean
},
code: number,
replyUrl: string,
replyRef: string
}
```
##### Examples
{% tabs post_frames-create_Runwayml_example %}
{% tab post_frames-create_Runwayml_example Curl %}
``` bash
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer …" \
-X POST "https://api.useapi.net/v1/runwayml/frames/create" \
-d '{"text_prompt": "…"}'
```
{% endtab %}
{% tab post_frames-create_Runwayml_example JavaScript %}
``` javascript
const text_prompt = "text prompt";
const apiUrl = `https://api.useapi.net/v1/runwayml/frames/create`;
const token = "API token";
const data = {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json' }
};
data.body = JSON.stringify({
text_prompt
});
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab post_frames-create_Runwayml_example Python %}
``` python
import requests
text_prompt = "text prompt"
apiUrl = f"https://api.useapi.net/v1/runwayml/frames/create"
token = "API token"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
body = {
"text_prompt": f"{text_prompt}"
}
response = requests.post(apiUrl, headers=headers, json=body)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen2-create ===
Document URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen2-create
---
layout: default
title: POST gen2/create
nav_order: 600
nav_exclude: true
---
## Create a 4-second-long video using text and/or image prompts
{: .no_toc }
August 8, 2024 (December 15, 2025)
Runway website no longer supports Gen-2. This endpoint no loner available.
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Runway [AI Tools » Audio tools » Text/Image to Video » Gen-2](https://app.runwayml.com/video-tools/ai-tools/generative-video).
Please be aware that Runway's moderation system analyzes your image and text prompts and may fail task with moderation message if the prompt is determined to be offensive. Runway monitors the rate and the number of moderated tasks, which may result in your account being suspended when the internal threshold is exceeded.
The **account** you use to upload asset(s) via [POST /assets](../api-runwayml-v1/post-runwayml-assets) will also be used to execute the generation. Uploading an asset to a specific account ensures that generation with that asset will occur under the same account.
{: .post }
> **https://api.useapi.net/v1/runwayml/gen2/create**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Request Body
```json
{
"email": "Optional Runway API account email",
"text_prompt": "Optional text prompt",
"image_assetId": "Optional assetId of image asset",
"image_preview": "Optional image URL generated by GET /text_to_image_preview",
"upscale": true,
"interpolate": true,
"style": "pixel_art",
"aspect_ratio": "3:4",
"motion": 10,
"horizontal": -10,
"vertical": -5,
"roll": -1,
"zoom": 2,
"pan": 5,
"tilt": 10,
"seed": 12345678,
"exploreMode": true,
"replyUrl": "Place your call back URL here",
"replyRef": "Place your reference id here",
"maxJobs": 5,
}
```
- `email` is optional, if not provided and parameter `image_assetId` is not specified API will randomly select available [account](../api-runwayml-v1/get-runwayml-accounts).
- `text_prompt` is optional. Describe your shot. [Gen-2 prompt tips](https://help.runwayml.com/hc/en-us/articles/17329337959699-Gen-2-prompt-tips).
- `image_assetId` is optional. Specify the image assetId you want to be present in the first frame. Use [GET /assets/?mediaType=image](../api-runwayml-v1/get-runwayml-assets) to see the list of image assets. To upload a new image asset use [POST /assets](../api-runwayml-v1/post-runwayml-assets).
Specify `image_assetId` or `image_preview` but not both.
- `image_preview` is optional. Specify the image you want to be present in the first frame. The image URL must be generated using the [GET /text_to_image_preview](../api-runwayml-v1/get-runwayml-text_to_image_preview).
Specify `image_preview` or `image_assetId` but not both.
- `upscale` is optional. Set to `true` for 2K upscaling, default is `false` is for 720p output.
Supported values: `true`, `false` (default).
- `interpolate` is optional.
Supported values: `true` (default), `false`.
- `style` is optional. If not provided `cinematic` will be used by default.
Supported values: `cinematic`, `abandoned`, `abstract_sculpture`, `advertising`, `anime`, `architectural`, `cartoon`, `cine_lens`, `claymation`, `concept_art`, `digital_art`, `duotone_artistic_photo`, `forestpunk`, `frost`, `graphic_novel`, `graphite`, `impressionist_painting`, `isometric_3d`, `low_poly_3d`, `macro_photography`, `marker_drawing`, `moody_film`, `pixel_art`, `retro_photography`, `sci-fi_art`, `stickers`, `storyboard`, `actor_casting`, `thriller`, `35mm`, `3d_cartoon`, `3d_render`, `80s_vaporwave`.
This parameter can not be used with `image_preview` or `image_assetId`, your output will match the style of your image.
- `aspect_ratio` is optional. If not provided `16:9` will be used by default.
Supported values: `21:9`,`1:1`, `9:16`, `16:9`, `4:3`, `3:4`
This parameter can not be used with `image_preview` or `image_assetId`, your output will match the aspect ratio of your image.
- `motion` is optional. Increase or decrease the intensity of motion in your video. Higher values result in more motion. This parameter is not compatible with other motion parameters below.
Supported values: 1…10.
- `horizontal` is optional. Specify horizontal motion.
Supported values: -10…10.
- `vertical` is optional. Specify vertical motion.
Supported values: -10…10.
- `roll` is optional. Specify roll motion.
Supported values: -10…10.
- `zoom` is optional. Specify zoom motion.
Supported values: -10…10.
- `pan` is optional. Specify pan motion.
Supported values: -10…10.
- `tilt` is optional. Specify tilt motion.
Supported values: -10…10.
- `seed` is optional.
Valid range 1…4294967294.
- `exploreMode` is optional. Set to `true` if you have a Runway [Unlimited plan](https://help.runwayml.com/hc/en-us/articles/18053095835795-Unlimited-plan-details) and wish to execute relaxed generation. You are not charged credits for Explore mode generations.
- `replyUrl` is optional, if not provided value from [useapi.net account](../account-management/get-account) will be used.
Place here your callback URL. API will call the provided `replyUrl` once Runway task completed or failed.
Maximum length 1024 characters.
We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality.
- `replyRef` is optional, place here your reference id which will be stored and returned along with this Runway task response / result.
Maximum length 1024 characters.
- `maxJobs` is optional, if not provided value for referenced by image assetId account will be used.
Valid range: 1…10.
##### Responses
{% tabs post_gen2-create_Runwayml_response %}
{% tab post_gen2-create_Runwayml_response 200 %}
200 OK
Use returned `taskId` to retrieve task status and results using [GET /tasks/`taskId`](../api-runwayml-v1/get-runwayml-tasks-taskId). The generated video `url` can be found in the `artifacts` array of the task with the status `SUCCEEDED`.
If you specify the optional parameter [`replyUrl`](post-runwayml-gen2-create#request-body) the API will call the provided `replyUrl` with task progress updates until the task is complete or fails.
```json
{
"taskId": "user:user_id-runwayml:account_email-task:task_uuid",
"id": "",
"name": "",
"image": null,
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"taskType": "gen2",
"options": {
"name": "",
"seconds": 4,
"gen2Options": {
"mode": "gen2",
"text_prompt": "",
"seed": 45678,
"interpolate": true,
"upscale": true,
"watermark": false,
"motion_score": 6,
"use_motion_score": true,
"use_motion_vectors": false,
"init_image": "",
"width": 1366,
"height": 768
},
"exploreMode": true,
"assetGroupName": "Generative Video",
"recordingEnabled": true
},
"status": "PENDING",
"error": null,
"progressText": null,
"progressRatio": null,
"estimatedTimeToStartSeconds": 0.1,
"artifacts": [],
"sharedAsset": null,
"replyUrl": "https://webhook.site/abc",
"replyRef": "",
"code": 200
}
```
{% endtab %}
{% tab post_gen2-create_Runwayml_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab post_gen2-create_Runwayml_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab post_gen2-create_Runwayml_response 404 %}
404 Not Found
```json
{
"error": "Unable to retrieve assetId (Not found.)",
"code": 404
}
```
{% endtab %}
{% tab post_gen2-create_Runwayml_response 412 %}
412 Insufficient credits
You do not have enough credits to run this task.
```json
{
"error": "You do not have enough credits to run this task."
}
```
{% endtab %}
{% tab post_gen2-create_Runwayml_response 429 %}
429 Too Many Requests
Wait in a loop for **at least** 10..30 seconds and retry again.
There are two possible cases for API response 429:
* API query is full and can not accept new [gen2/create](#create-a-4-second-long-video-using-text-andor-image-prompts) requests. Size of query defined by [`maxJobs` optional parameter](#request-body).
```json
{
"error": "Account is busy executing tasks",
"runningTasks": {
"": [
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#1_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
},
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#N_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
}
]
},
"code": 429
}
```
* The API received an HTTP response status 429 from Runway. Runway has dynamic query management and may limit the number of simultaneously executed tasks based on internal service load and policies.
```json
{
"error": "You have too many tasks running or pending. Please wait for some of them to finish before starting more."
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
taskId: string,
id: string,
name: string,
image: string,
createdAt: string,
updatedAt: string,
taskType: string,
options: {
name: string,
seconds: number,
gen2Options: {
mode: string,
text_prompt: string,
seed: number,
interpolate: boolean,
upscale: boolean,
watermark: boolean,
use_motion_score: boolean,
use_motion_vectors: boolean,
motion_vector: {
x: number,
y: number,
r: number,
z: number,
bg_x_pan: number,
bg_y_pan: number
},
motion_score: number,
init_image: string,
image_prompt: string,
style: string,
width: number,
height: number
},
exploreMode: boolean,
assetGroupName: string,
recordingEnabled: boolean
},
status: string,
progressText: string,
progressRatio: number,
estimatedTimeToStartSeconds: number,
artifacts: any[],
sharedAsset: any,
error: {
errorMessage: string,
reason: string,
message: string,
moderation_category: string,
tally_asimov: boolean
},
code: number,
replyUrl: string,
replyRef: string
}
```
##### Examples
{% tabs post_gen2-create_Runwayml_example %}
{% tab post_gen2-create_Runwayml_example Curl %}
``` bash
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer …" \
-X POST "https://api.useapi.net/v1/runwayml/gen2/create" \
-d '{"image_assetId": "…", "text_prompt": "…"}'
```
{% endtab %}
{% tab post_gen2-create_Runwayml_example JavaScript %}
``` javascript
const image_assetId = "assetId of image asset";
const text_prompt = "text prompt";
const apiUrl = `https://api.useapi.net/v1/runwayml/gen2/create`;
const token = "API token";
const data = {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json' }
};
data.body = JSON.stringify({
image_assetId, text_prompt
});
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab post_gen2-create_Runwayml_example Python %}
``` python
import requests
image_assetId = "assetId of image asset"
text_prompt = "text prompt"
apiUrl = f"https://api.useapi.net/v1/runwayml/gen2/create"
token = "API token"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
body = {
"image_assetId": f"{image_assetId}",
"text_prompt": f"{text_prompt}"
}
response = requests.post(apiUrl, headers=headers, json=body)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen2-extend ===
Document URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen2-extend
---
layout: default
title: POST gen2/extend
nav_order: 700
nav_exclude: true
---
## Extend the video by 4 seconds
{: .no_toc }
August 8, 2024 (December 15, 2025)
Runway website no longer supports Gen-2. This endpoint no loner available.
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Runway [AI Tools » Audio tools » Text/Image to Video » Gen-2 » Extend Video](https://app.runwayml.com/video-tools/ai-tools/generative-video).
[Extending Gen-2 generations](https://help.runwayml.com/hc/en-us/articles/19207770268051-Extending-Gen-2-generations).
{: .post }
> **https://api.useapi.net/v1/runwayml/gen2/extend**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Request Body
```json
{
"assetId": "Required assetId of video asset you want to extend",
"interpolate": true,
"motion": 10,
"horizontal": -10,
"vertical": -5,
"roll": -1,
"zoom": 2,
"pan": 5,
"tilt": 10,
"seed": 12345678,
"exploreMode": true,
"replyUrl": "Place your call back URL here",
"replyRef": "Place your reference id here",
"maxJobs": 5,
}
```
- `assetId` is **required**. Specify the video assetId you want extend. Use [GET /assets/?mediaType=video](../api-runwayml-v1/get-runwayml-assets) to see the list of video assets. To upload a new video asset use [POST /assets](../api-runwayml-v1/post-runwayml-assets).
- `interpolate` is optional.
Supported values: `true` (default), `false`.
- `motion` is optional. Increase or decrease the intensity of motion in your video. Higher values result in more motion. This parameter is not compatible with other motion parameters below.
Supported values: 1…10.
- `horizontal` is optional. Specify horizontal motion.
Supported values: -10…10.
- `vertical` is optional. Specify vertical motion.
Supported values: -10…10.
- `roll` is optional. Specify roll motion.
Supported values: -10…10.
- `zoom` is optional. Specify zoom motion.
Supported values: -10…10.
- `pan` is optional. Specify pan motion.
Supported values: -10…10.
- `tilt` is optional. Specify tilt motion.
Supported values: -10…10.
- `seed` is optional.
Valid range 1…4294967294.
- `exploreMode` is optional. Set to `true` if you have a Runway [Unlimited plan](https://help.runwayml.com/hc/en-us/articles/18053095835795-Unlimited-plan-details) and wish to execute relaxed generation. You are not charged credits for Explore mode generations.
- `replyUrl` is optional, if not provided value from [useapi.net account](../account-management/get-account) will be used.
Place here your callback URL. API will call the provided `replyUrl` once Runway task completed or failed.
Maximum length 1024 characters.
We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality.
- `replyRef` is optional, place here your reference id which will be stored and returned along with this Runway task response / result.
Maximum length 1024 characters.
- `maxJobs` is optional, if not provided value for referenced by video assetId account will be used.
Valid range: 1…10.
##### Responses
{% tabs post_gen2-extend_Runwayml_response %}
{% tab post_gen2-extend_Runwayml_response 200 %}
200 OK
Use returned `taskId` to retrieve task status and results using [GET /tasks/`taskId`](../api-runwayml-v1/get-runwayml-tasks-taskId). The generated video `url` can be found in the `artifacts` array of the task with the status `SUCCEEDED`.
If you specify the optional parameter [`replyUrl`](post-runwayml-gen2-extend#request-body) the API will call the provided `replyUrl` with task progress updates until the task is complete or fails.
```json
{
"taskId": "user:user_id-runwayml:account_email-task:task_uuid",
"id": "",
"name": "",
"image": null,
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"taskType": "gen2",
"options": {
"name": "",
"seconds": 4,
"gen2Options": {
"mode": "gen2",
"seed": 12345678,
"interpolate": true,
"upscale": true,
"watermark": false,
"motion_score": 22,
"use_motion_score": true,
"use_motion_vectors": false,
"init_video": "",
"extended_from_task_id": ""
},
"exploreMode": false,
"assetGroupName": "Generative Video",
"recordingEnabled": true
},
"status": "PENDING",
"error": null,
"progressText": null,
"progressRatio": null,
"estimatedTimeToStartSeconds": 0,
"artifacts": [],
"sharedAsset": null,
"replyUrl": "https://webhook.site/abc",
"replyRef": "",
"code": 200
}
```
{% endtab %}
{% tab post_gen2-extend_Runwayml_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab post_gen2-extend_Runwayml_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab post_gen2-extend_Runwayml_response 404 %}
404 Not Found
```json
{
"error": "Unable to retrieve assetId (Not found.)",
"code": 404
}
```
{% endtab %}
{% tab post_gen2-extend_Runwayml_response 412 %}
412 Insufficient credits
You do not have enough credits to run this task.
```json
{
"error": "You do not have enough credits to run this task."
}
```
{% endtab %}
{% tab post_gen2-extend_Runwayml_response 429 %}
429 Too Many Requests
Wait in a loop for **at least** 10..30 seconds and retry again.
There are two possible cases for API response 429:
* API query is full and can not accept new [gen2/extend](#create-a-4-second-long-video-using-text-andor-image-prompts) requests. Size of query defined by [`maxJobs` optional parameter](#request-body).
```json
{
"error": "Account is busy executing tasks",
"runningTasks": {
"": [
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#1_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
},
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#N_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
}
]
},
"code": 429
}
```
* The API received an HTTP response status 429 from Runway. Runway has dynamic query management and may limit the number of simultaneously executed tasks based on internal service load and policies.
```json
{
"error": "You have too many tasks running or pending. Please wait for some of them to finish before starting more."
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
taskId: string,
id: string,
name: string,
image: any,
createdAt: string,
updatedAt: string,
taskType: string,
options: {
name: string,
seconds: number,
gen2Options: {
mode: string,
seed: number,
interpolate: boolean,
upscale: boolean,
watermark: boolean,
motion_score: number,
use_motion_score: boolean,
use_motion_vectors: boolean,
motion_vector: {
x: number,
y: number,
r: number,
z: number,
bg_x_pan: number,
bg_y_pan: number
},
init_video: string,
extended_from_task_id: string
},
exploreMode: boolean,
assetGroupName: string,
recordingEnabled: boolean
},
status: string,
progressText: any,
progressRatio: any,
estimatedTimeToStartSeconds: number,
artifacts: any[],
sharedAsset: any,
error: {
errorMessage: string,
reason: string,
message: string,
moderation_category: string,
tally_asimov: boolean
},
code: number,
replyUrl: string,
replyRef: string
}
```
##### Examples
{% tabs post_gen2-extend_Runwayml_example %}
{% tab post_gen2-extend_Runwayml_example Curl %}
``` bash
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer …" \
-X POST "https://api.useapi.net/v1/runwayml/gen2/extend" \
-d '{"assetId": "…" }'
```
{% endtab %}
{% tab post_gen2-extend_Runwayml_example JavaScript %}
``` javascript
const assetId = "assetId of video asset";
const apiUrl = `https://api.useapi.net/v1/runwayml/gen2/extend`;
const token = "API token";
const data = {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json' }
};
data.body = JSON.stringify({
assetId
});
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab post_gen2-extend_Runwayml_example Python %}
``` python
import requests
assetId = "assetId of video asset"
apiUrl = f"https://api.useapi.net/v1/runwayml/gen2/extend"
token = "API token"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
body = {
"assetId": f"{assetId}"
}
response = requests.post(apiUrl, headers=headers, json=body)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-actone ===
Document URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-actone
---
layout: default
title: POST gen3/actone
parent: Runway API v1
nav_order: 570
---
## Drive your image or video character performance using simple video and audio inputs.
{: .no_toc }
October 28, 2024 (December 15, 2025)
Runway website no longer supports Gen-3. Consider migrating to Gen-4.x.
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Runway [Generate Video » Gen-3 Alpha » Act-One](https://app.runwayml.com/video-tools/ai-tools/generative-video).
[Creating with Act-One on Gen-3 Alpha and Turbo](https://help.runwayml.com/hc/en-us/articles/33927968552339-Creating-with-Act-One-on-Gen-3-Alpha-and-Turbo).
Please be aware that Runway's moderation system analyzes your image and text prompts and may fail task with moderation message if the prompt is determined to be offensive. Runway monitors the rate and the number of moderated tasks, which may result in your account being suspended when the internal threshold is exceeded.
The **account** you use to upload asset(s) via [POST /assets](../api-runwayml-v1/post-runwayml-assets) will also be used to execute the generation. Uploading an asset to a specific account ensures that generation with that asset will occur under the same account.
{: .post }
> **https://api.useapi.net/v1/runwayml/gen3/actone**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Request Body
```json
{
"driving_assetId": "Required assetId of the video asset you want to use to drive performance",
"character_assetId": "Required assetId of the image or video asset for your character reference",
"exploreMode": true,
"motion_multiplier": 5,
"aspect_ratio": "portrait",
"replyUrl": "Place your call back URL here",
"replyRef": "Place your reference id here",
"maxJobs": 5,
}
```
- `driving_assetId` is **required**. Specify the video asset you want to use to drive performance. Use [GET /assets/?mediaType=video](../api-runwayml-v1/get-runwayml-assets) to see the list of video assets.
- `character_assetId` is **required**. Specify the image or video asset for your character reference. Use [GET /assets/?mediaType=image](../api-runwayml-v1/get-runwayml-assets) to see the list of image or video assets.
- `motion_multiplier` is optional. Higher values allow for more expressive motion while lower values result in more stability.
Valid range: 1…5, default 3.
- `aspect_ratio` is optional. This parameter is only applicable for image `character_assetId`, video `character_assetId` will retain the original format.
Supported values: `landscape` (default), `portrait`.
- `exploreMode` is optional. Set to `true` if you have a Runway [Unlimited plan](https://help.runwayml.com/hc/en-us/articles/18053095835795-Unlimited-plan-details) and wish to execute relaxed generation. You are not charged credits for Explore mode generations.
- `replyUrl` is optional, if not provided value from [useapi.net account](../account-management/get-account) will be used.
Place here your callback URL. API will call the provided `replyUrl` once Runway task completed or failed.
Maximum length 1024 characters.
We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality.
- `replyRef` is optional, place here your reference id which will be stored and returned along with this Runway task response / result.
Maximum length 1024 characters.
- `maxJobs` is optional, if not provided value for referenced by video assetId account will be used.
Valid range: 1…10.
Runway has dynamic query capacity and guarantees that, for a given account, at least one job will run — often two, and very rarely, three. If you have a single account linked, keep adding new jobs until you receive a `429` response. Once you get a `429`, wait for xx seconds or until at least one job completes, then try again. If you need to run more jobs in parallel, simply add more Runway accounts.
##### Responses
{% tabs post_gen3-actone_Runwayml_response %}
{% tab post_gen3-actone_Runwayml_response 200 %}
200 OK
Use returned `taskId` to retrieve task status and results using [GET /tasks/`taskId`](../api-runwayml-v1/get-runwayml-tasks-taskId). The generated video `url` can be found in the `artifacts` array of the task with the status `SUCCEEDED`.
If you specify the optional parameter [`replyUrl`](post-runwayml-gen3-actone#request-body) the API will call the provided `replyUrl` with task progress updates until the task is complete or fails.
```json
{
"taskId": "user:user_id-runwayml:account_email-task:task_uuid",
"id": "",
"name": "",
"image": null,
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"taskType": "gen3a",
"options": {
"name": "",
"driving_video": "",
"character_image": "",
"motion_multiplier": 3,
"seed": 0,
"seconds": 5,
"exploreMode": true,
"watermark": false,
"width": 1280,
"height": 768,
"assetGroupName": "Generative Video",
"recordingEnabled": true
},
"status": "PENDING",
"error": null,
"progressText": null,
"progressRatio": null,
"estimatedTimeToStartSeconds": 0,
"artifacts": [],
"sharedAsset": null,
"replyUrl": "https://webhook.site/abc",
"replyRef": "",
"code": 200
}
```
{% endtab %}
{% tab post_gen3-actone_Runwayml_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab post_gen3-actone_Runwayml_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab post_gen3-actone_Runwayml_response 404 %}
404 Not Found
```json
{
"error": "Unable to retrieve assetId (Not found.)",
"code": 404
}
```
{% endtab %}
{% tab post_gen3-actone_Runwayml_response 412 %}
412 Insufficient credits
You do not have enough credits to run this task.
```json
{
"error": "You do not have enough credits to run this task."
}
```
{% endtab %}
{% tab post_gen3-actone_Runwayml_response 429 %}
429 Too Many Requests
Wait in a loop for **at least** 10..30 seconds and retry again.
There are two possible cases for API response 429:
* API query is full and can not accept new [gen3/actone](#create-a-4-second-long-video-using-text-andor-image-prompts) requests. Size of query defined by [`maxJobs` optional parameter](#request-body).
```json
{
"error": "Account is busy executing tasks",
"runningTasks": {
"": [
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#1_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
},
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#N_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
}
]
},
"code": 429
}
```
* The API received an HTTP response status 429 from Runway. Runway has dynamic query management and may limit the number of simultaneously executed tasks based on internal service load and policies.
```json
{
"error": "You have too many tasks running or pending. Please wait for some of them to finish before starting more."
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
taskId: string
id: string
name: string
image: any
createdAt: string
updatedAt: string
taskType: string
options: {
name: string
seed: number
exploreMode: boolean
watermark: boolean
seconds: number
driving_video: string
character_image: string
character_video: string
motion_multiplier: number
width: number
height: number
flip: boolean
assetGroupName: string
recordingEnabled: boolean
}
status: string
progressText: any
progressRatio: any
estimatedTimeToStartSeconds: number
artifacts: any[]
sharedAsset: any
error: {
errorMessage: string
reason: string
message: string
moderation_category: string
tally_asimov: boolean
}
replyUrl: string
replyRef: string
code: number
}
```
##### Examples
{% tabs post_gen3-actone_Runwayml_example %}
{% tab post_gen3-actone_Runwayml_example Curl %}
``` bash
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer …" \
-X POST "https://api.useapi.net/v1/runwayml/gen3/actone" \
-d '{"driving_assetId": "…", "character_assetId": "…"}'
```
{% endtab %}
{% tab post_gen3-actone_Runwayml_example JavaScript %}
``` javascript
const driving_assetId = "video asset you want to use to drive performance";
const character_assetId = "image or video asset for your character reference";
const apiUrl = `https://api.useapi.net/v1/runwayml/gen3/actone`;
const token = "API token";
const data = {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json' }
};
data.body = JSON.stringify({
driving_assetId, character_assetId
});
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab post_gen3-actone_Runwayml_example Python %}
``` python
import requests
driving_assetId = "video asset you want to use to drive performance"
character_assetId = "image or video asset for your character reference"
apiUrl = f"https://api.useapi.net/v1/runwayml/gen3/actone"
token = "API token"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
body = {
"driving_assetId": f"{driving_assetId}",
"character_assetId": f"{character_assetId}"
}
response = requests.post(apiUrl, headers=headers, json=body)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-create ===
Document URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-create
---
layout: default
title: POST gen3/create
parent: Runway API v1
nav_order: 500
---
## Create a video using text and/or image prompts
{: .no_toc }
August 8, 2024 (December 15, 2025)
Runway website no longer supports Gen-3. Consider migrating to Gen-4.x.
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Runway [Generate Video » Gen-3 Alpha](https://app.runwayml.com/video-tools/ai-tools/generative-video).
[Creating with Gen-3 Alpha](https://help.runwayml.com/hc/en-us/articles/30266515017875-Creating-with-Gen-3-Alpha).
Please take a look at the code provided in the article [Create Runway videos like a Pro](../articles/runway-bash) as it covers all aspects of video generation and downloading of generated videos along with proper handling of corner cases.
Please be aware that Runway's moderation system analyzes your image and text prompts and may fail task with moderation message if the prompt is determined to be offensive. Runway monitors the rate and the number of moderated tasks, which may result in your account being suspended when the internal threshold is exceeded.
The **account** you use to upload asset(s) via [POST /assets](../api-runwayml-v1/post-runwayml-assets) will also be used to execute the generation. Uploading an asset to a specific account ensures that generation with that asset will occur under the same account.
{: .post }
> **https://api.useapi.net/v1/runwayml/gen3/create**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Request Body
```json
{
"email": "Optional Runway API account email",
"image_assetId": "Optional assetId of image asset",
"text_prompt": "Optional text prompt",
"enhance_prompt": true,
"image_as_end_frame": false,
"seconds": 5,
"seed": 12345678
"exploreMode": true,
"replyUrl": "Place your call back URL here",
"replyRef": "Place your reference id here",
"maxJobs": 5
}
```
- `email` is optional, if not provided and parameter `image_assetId` is not specified API will randomly select available [account](../api-runwayml-v1/get-runwayml-accounts).
- `image_assetId` is optional. Specify the image assetId you want to be present in the first frame. Use [GET /assets/?mediaType=image](../api-runwayml-v1/get-runwayml-assets) to see the list of image assets. To upload a new image asset use [POST /assets](../api-runwayml-v1/post-runwayml-assets). Currently Runway only supports image sizes up to `1280x768` maximum. All other images will be cropped to fit `1280x768`. You may want to upscale/downscale your image using [image_upscaler](../api-runwayml-v1/get-runwayml-image_upscaler) to achieve the best results.
- `text_prompt` is optional. Describe your shot. [Gen-3 Alpha Prompting Guide](https://help.runwayml.com/hc/en-us/articles/30586818553107-Gen-3-Alpha-Prompting-Guide).
- `enhance_prompt` is optional.
Supported values: `true` (default), `false`.
- `image_as_end_frame` is optional. Use provided above image as a last frame.
Supported values: `true`, `false` (default).
- `seconds` is optional. Specify desired length of the video in seconds.
Supported values: `5` (default), `10`.
- `seed` is optional.
Valid range 1…4294967294.
- `resolution` is optional.
Supported values: `720p` (default).
- `exploreMode` is optional. Set to `true` if you have a Runway [Unlimited plan](https://help.runwayml.com/hc/en-us/articles/18053095835795-Unlimited-plan-details) and wish to execute relaxed generation. You are not charged credits for Explore mode generations.
- `replyUrl` is optional, if not provided value from [useapi.net account](../account-management/get-account) will be used.
Place here your callback URL. API will call the provided `replyUrl` once Runway task completed or failed.
Maximum length 1024 characters.
We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality.
- `replyRef` is optional, place here your reference id which will be stored and returned along with this Runway task response / result.
Maximum length 1024 characters.
- `maxJobs` is optional, if not provided value for referenced by image assetId account will be used.
Valid range: 1…10.
Runway has dynamic query capacity and guarantees that, for a given account, at least one job will run — often two, and very rarely, three. If you have a single account linked, keep adding new jobs until you receive a `429` response. Once you get a `429`, wait for xx seconds or until at least one job completes, then try again. If you need to run more jobs in parallel, simply add more Runway accounts.
##### Responses
{% tabs post_gen3-create_Runwayml_response %}
{% tab post_gen3-create_Runwayml_response 200 %}
200 OK
Use returned `taskId` to retrieve task status and results using [GET /tasks/`taskId`](../api-runwayml-v1/get-runwayml-tasks-taskId). The generated video `url` can be found in the `artifacts` array of the task with the status `SUCCEEDED`.
If you specify the optional parameter [`replyUrl`](post-runwayml-gen3-create#request-body) the API will call the provided `replyUrl` with task progress updates until the task is complete or fails.
```json
{
"taskId": "user:user_id-runwayml:account_email-task:task_uuid",
"id": "",
"name": "",
"image": null,
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"taskType": "gen3a",
"options": {
"name": "",
"seconds": 10,
"text_prompt": "",
"seed": 12345789,
"exploreMode": true,
"watermark": false,
"enhance_prompt": true,
"image_as_end_frame": true,
"init_image": "",
"width": 1280,
"height": 768,
"assetGroupName": "Generative Video",
"recordingEnabled": true
},
"status": "PENDING",
"error": null,
"progressText": null,
"progressRatio": null,
"estimatedTimeToStartSeconds": 0,
"artifacts": [],
"sharedAsset": null,
"replyUrl": "https://webhook.site/abc",
"replyRef": "",
"code": 200
}
```
{% endtab %}
{% tab post_gen3-create_Runwayml_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab post_gen3-create_Runwayml_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab post_gen3-create_Runwayml_response 404 %}
404 Not Found
```json
{
"error": "Unable to retrieve assetId (Not found.)",
"code": 404
}
```
{% endtab %}
{% tab post_gen3-create_Runwayml_response 412 %}
412 Insufficient credits
You do not have enough credits to run this task.
```json
{
"error": "You do not have enough credits to run this task."
}
```
{% endtab %}
{% tab post_gen3-create_Runwayml_response 429 %}
429 Too Many Requests
Wait in a loop for **at least** 10..30 seconds and retry again.
There are two possible cases for API response 429:
* API query is full and can not accept new [gen3/create](#create-a-video-using-text-andor-image-prompts) requests. Size of query defined by [`maxJobs` optional parameter](#request-body).
```json
{
"error": "Account is busy executing tasks",
"runningTasks": {
"": [
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#1_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
},
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#N_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
}
]
},
"code": 429
}
```
* The API received an HTTP response status 429 from Runway. Runway has dynamic query management and may limit the number of simultaneously executed tasks based on internal service load and policies.
```json
{
"error": "You have too many tasks running or pending. Please wait for some of them to finish before starting more."
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
taskId: string,
id: string,
name: string,
image: string,
createdAt: string,
updatedAt: string,
taskType: string,
options: {
name: string,
seconds: number,
text_prompt: string,
init_image: string,
seed: number,
exploreMode: boolean,
watermark: boolean,
enhance_prompt: boolean,
image_as_end_frame: boolean,
flip: boolean,
width: number,
height: number,
assetGroupName: string,
recordingEnabled: boolean
},
status: string,
progressText: string,
progressRatio: number,
estimatedTimeToStartSeconds: number,
artifacts: any[],
sharedAsset: any,
error: {
errorMessage: string,
reason: string,
message: string,
moderation_category: string,
tally_asimov: boolean
},
code: number,
replyUrl: string,
replyRef: string
}
```
##### Examples
{% tabs post_gen3-create_Runwayml_example %}
{% tab post_gen3-create_Runwayml_example Curl %}
``` bash
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer …" \
-X POST "https://api.useapi.net/v1/runwayml/gen3/create" \
-d '{"image_assetId": "…", "text_prompt": "…"}'
```
{% endtab %}
{% tab post_gen3-create_Runwayml_example JavaScript %}
``` javascript
const image_assetId = "assetId of image asset";
const text_prompt = "text prompt";
const apiUrl = `https://api.useapi.net/v1/runwayml/gen3/create`;
const token = "API token";
const data = {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json' }
};
data.body = JSON.stringify({
image_assetId, text_prompt
});
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab post_gen3-create_Runwayml_example Python %}
``` python
import requests
image_assetId = "assetId of image asset"
text_prompt = "text prompt"
apiUrl = f"https://api.useapi.net/v1/runwayml/gen3/create"
token = "API token"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
body = {
"image_assetId": f"{image_assetId}",
"text_prompt": f"{text_prompt}"
}
response = requests.post(apiUrl, headers=headers, json=body)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-extend ===
Document URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-extend
---
layout: default
title: POST gen3/extend
parent: Runway API v1
nav_order: 550
---
## Extend the Gen-3 Alpha video by 5 or 10 seconds
{: .no_toc }
August 31, 2024 (December 15, 2025)
Runway website no longer supports Gen-3. Consider migrating to Gen-4.x.
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Completed Gen-3 Alpha generations can be extended up to three times to create a longer video to a maximum of 40 seconds given that the original video was 10 seconds.
Runway [Generate Video » Gen-3 Alpha » Extend Video](https://app.runwayml.com/video-tools/ai-tools/generative-video).
[Creating with Text/Image to Video on Gen-3 Alpha and Turbo](https://help.runwayml.com/hc/en-us/articles/30266515017875-Creating-with-Text-Image-to-Video-on-Gen-3-Alpha-and-Turbo)
Please be aware that Runway's moderation system analyzes your image and text prompts and may fail task with moderation message if the prompt is determined to be offensive. Runway monitors the rate and the number of moderated tasks, which may result in your account being suspended when the internal threshold is exceeded.
NOTE: To extent Gen-3 Alpha Turbo use [gen3turbo/extend](../api-runwayml-v1/post-runwayml-gen3turbo-extend).
{: .post }
> **https://api.useapi.net/v1/runwayml/gen3/extend**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Request Body
```json
{
"assetId": "Required assetId of Gen-3 Alpha video asset you want to extend",
"text_prompt": "Optional text prompt",
"seconds": 10,
"seed": 12345678,
"exploreMode": true,
"replyUrl": "Place your call back URL here",
"replyRef": "Place your reference id here",
"maxJobs": 5,
}
```
- `assetId` is **required**. Specify the Gen-3 Alpha video assetId you want extend. Use [GET /assets/?mediaType=video](../api-runwayml-v1/get-runwayml-assets) to see the list of video assets.
- `text_prompt` is optional. Describe your shot. [Gen-3 Alpha Prompting Guide](https://help.runwayml.com/hc/en-us/articles/30586818553107-Gen-3-Alpha-Prompting-Guide).
- `seconds` is optional. How many seconds should the original video be extended by.
Supported values: `5` (default), `10`.
- `seed` is optional.
Valid range 1…4294967294.
- `exploreMode` is optional. Set to `true` if you have a Runway [Unlimited plan](https://help.runwayml.com/hc/en-us/articles/18053095835795-Unlimited-plan-details) and wish to execute relaxed generation. You are not charged credits for Explore mode generations.
- `replyUrl` is optional, if not provided value from [useapi.net account](../account-management/get-account) will be used.
Place here your callback URL. API will call the provided `replyUrl` once Runway task completed or failed.
Maximum length 1024 characters.
We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality.
- `replyRef` is optional, place here your reference id which will be stored and returned along with this Runway task response / result.
Maximum length 1024 characters.
- `maxJobs` is optional, if not provided value for referenced by video assetId account will be used.
Valid range: 1…10.
Runway has dynamic query capacity and guarantees that, for a given account, at least one job will run — often two, and very rarely, three. If you have a single account linked, keep adding new jobs until you receive a `429` response. Once you get a `429`, wait for xx seconds or until at least one job completes, then try again. If you need to run more jobs in parallel, simply add more Runway accounts.
##### Responses
{% tabs post_gen3-extend_Runwayml_response %}
{% tab post_gen3-extend_Runwayml_response 200 %}
200 OK
Use returned `taskId` to retrieve task status and results using [GET /tasks/`taskId`](../api-runwayml-v1/get-runwayml-tasks-taskId). The generated video `url` can be found in the `artifacts` array of the task with the status `SUCCEEDED`.
If you specify the optional parameter [`replyUrl`](post-runwayml-gen3-extend#request-body) the API will call the provided `replyUrl` with task progress updates until the task is complete or fails.
```json
{
"taskId": "user:user_id-runwayml:account_email-task:task_uuid",
"id": "",
"name": "",
"image": null,
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"taskType": "gen3a",
"options": {
"name": "",
"text_prompt": "",
"seed": 123456789,
"seconds": 10,
"exploreMode": true,
"watermark": false,
"init_video": "",
"extended_from_task_id": "",
"image_as_end_frame": false,
"assetGroupName": "Generative Video",
"extended_count": 1,
"recordingEnabled": true
},
"status": "PENDING",
"error": null,
"progressText": null,
"progressRatio": null,
"estimatedTimeToStartSeconds": 0,
"artifacts": [],
"sharedAsset": null,
"replyUrl": "https://webhook.site/abc",
"replyRef": "",
"code": 200
}
```
{% endtab %}
{% tab post_gen3-extend_Runwayml_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab post_gen3-extend_Runwayml_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab post_gen3-extend_Runwayml_response 404 %}
404 Not Found
```json
{
"error": "Unable to retrieve assetId (Not found.)",
"code": 404
}
```
{% endtab %}
{% tab post_gen3-extend_Runwayml_response 412 %}
412 Insufficient credits
You do not have enough credits to run this task.
```json
{
"error": "You do not have enough credits to run this task."
}
```
{% endtab %}
{% tab post_gen3-extend_Runwayml_response 429 %}
429 Too Many Requests
Wait in a loop for **at least** 10..30 seconds and retry again.
There are two possible cases for API response 429:
* API query is full and can not accept new [gen3/extend](#create-a-4-second-long-video-using-text-andor-image-prompts) requests. Size of query defined by [`maxJobs` optional parameter](#request-body).
```json
{
"error": "Account is busy executing tasks",
"runningTasks": {
"": [
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#1_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
},
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#N_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
}
]
},
"code": 429
}
```
* The API received an HTTP response status 429 from Runway. Runway has dynamic query management and may limit the number of simultaneously executed tasks based on internal service load and policies.
```json
{
"error": "You have too many tasks running or pending. Please wait for some of them to finish before starting more."
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
taskId: string,
id: string,
name: string,
image: any,
createdAt: string,
updatedAt: string,
taskType: string,
options: {
name: string,
seed: number,
exploreMode: boolean,
watermark: boolean,
seconds: number,
text_prompt: string,
init_video: string,
extended_from_task_id: string
image_as_end_frame: boolean,
extended_count: number,
assetGroupName: string,
recordingEnabled: boolean
},
status: string,
progressText: any,
progressRatio: any,
estimatedTimeToStartSeconds: number,
artifacts: any[],
sharedAsset: any,
error: {
errorMessage: string,
reason: string,
message: string,
moderation_category: string,
tally_asimov: boolean
},
code: number,
replyUrl: string,
replyRef: string
}
```
##### Examples
{% tabs post_gen3-extend_Runwayml_example %}
{% tab post_gen3-extend_Runwayml_example Curl %}
``` bash
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer …" \
-X POST "https://api.useapi.net/v1/runwayml/gen3/extend" \
-d '{"assetId": "…" }'
```
{% endtab %}
{% tab post_gen3-extend_Runwayml_example JavaScript %}
``` javascript
const assetId = "assetId of video asset";
const apiUrl = `https://api.useapi.net/v1/runwayml/gen3/extend`;
const token = "API token";
const data = {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json' }
};
data.body = JSON.stringify({
assetId
});
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab post_gen3-extend_Runwayml_example Python %}
``` python
import requests
assetId = "assetId of video asset"
apiUrl = f"https://api.useapi.net/v1/runwayml/gen3/extend"
token = "API token"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
body = {
"assetId": f"{assetId}"
}
response = requests.post(apiUrl, headers=headers, json=body)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-video ===
Document URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-video
---
layout: default
title: POST gen3/video
parent: Runway API v1
nav_order: 525
---
## Gen-3 Alpha Video to Video
{: .no_toc }
August 8, 2024 (December 15, 2025)
Runway website no longer supports Gen-3. Consider migrating to Gen-4.x.
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Runway [Generate Video » Gen-3 Alpha » Video to Video](https://app.runwayml.com/video-tools/ai-tools/generative-video).
Please make sure to check official tutorial [Creating with Video to Video](https://help.runwayml.com/hc/en-us/articles/33350169138323-Creating-with-Video-to-Video-on-Gen-3-Alpha-and-Turbo).
Please be aware that Runway's moderation system analyzes your image and text prompts and may fail task with moderation message if the prompt is determined to be offensive. Runway monitors the rate and the number of moderated tasks, which may result in your account being suspended when the internal threshold is exceeded.
The **account** you use to upload asset(s) via [POST /assets](../api-runwayml-v1/post-runwayml-assets) will also be used to execute the generation. Uploading an asset to a specific account ensures that generation with that asset will occur under the same account.
{: .post }
> **https://api.useapi.net/v1/runwayml/gen3/video**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Request Body
```json
{
"assetId": "Required assetId of video asset you want to edit",
"text_prompt": "Required text prompt",
"structure_transformation": 9,
"seconds": 10,
"seed": 12345678,
"exploreMode": true,
"replyUrl": "Place your call back URL here",
"replyRef": "Place your reference id here",
"maxJobs": 5,
}
```
- `assetId` is **required**. Specify the video assetId you want to edit. Use [GET /assets/?mediaType=video](../api-runwayml-v1/get-runwayml-assets) to see the list of video assets. Video to Video currently supports 16:9 aspect ratios. If using a video in a different aspect ratio it will be cropped into the supported 16:9 format.
- `text_prompt` is **required**. Describe desired changes. [Creating with Video to Video](https://help.runwayml.com/hc/en-us/articles/33350169138323-Creating-with-Video-to-Video-on-Gen-3-Alpha-and-Turbo).
- `imageAssetId` is optional. Specify the restyled first frame assetId. Use [GET /assets/?mediaType=image](../api-runwayml-v1/get-runwayml-assets) to see the list of image assets. See official [article](https://help.runwayml.com/hc/en-us/articles/33350169138323-Creating-with-Video-to-Video-on-Gen-3-Alpha-and-Turbo#h_01JMZXC16KYEMAJGMQCCR2W428).
- `structure_transformation` is optional. Higher values result in greater change to your input’s structure, while lower values will be closer to your input.
Valid range: 0…10, default `3`.
- `seconds` is optional. Specify the desired length of the final video in seconds. If not provided, the value will be taken from the asset's `metadata.duration`. If the asset does not have a duration specified, it will default to `10` seconds.
- `resolution` is optional.
Supported values: `720p` (default).
- `seed` is optional.
Valid range 1…4294967294.
- `exploreMode` is optional. Set to `true` if you have a Runway [Unlimited plan](https://help.runwayml.com/hc/en-us/articles/18053095835795-Unlimited-plan-details) and wish to execute relaxed generation. You are not charged credits for Explore mode generations.
- `replyUrl` is optional, if not provided value from [useapi.net account](../account-management/get-account) will be used.
Place here your callback URL. API will call the provided `replyUrl` once Runway task completed or failed.
Maximum length 1024 characters.
We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality.
- `replyRef` is optional, place here your reference id which will be stored and returned along with this Runway task response / result.
Maximum length 1024 characters.
- `maxJobs` is optional, if not provided value for referenced by video assetId account will be used.
Valid range: 1…10.
Runway has dynamic query capacity and guarantees that, for a given account, at least one job will run — often two, and very rarely, three. If you have a single account linked, keep adding new jobs until you receive a `429` response. Once you get a `429`, wait for xx seconds or until at least one job completes, then try again. If you need to run more jobs in parallel, simply add more Runway accounts.
##### Responses
{% tabs post_gen3-video_Runwayml_response %}
{% tab post_gen3-video_Runwayml_response 200 %}
200 OK
Use returned `taskId` to retrieve task status and results using [GET /tasks/`taskId`](../api-runwayml-v1/get-runwayml-tasks-taskId). The generated video `url` can be found in the `artifacts` array of the task with the status `SUCCEEDED`.
If you specify the optional parameter [`replyUrl`](post-runwayml-gen3-video#request-body) the API will call the provided `replyUrl` with task progress updates until the task is complete or fails.
```json
{
"taskId": "user:user_id-runwayml:account_email-task:task_uuid",
"id": "",
"name": "",
"image": null,
"createdAt": "2024-08-01T01:02:03.456Z",
"updatedAt": "2024-08-01T01:02:03.456Z",
"taskType": "gen3a",
"options": {
"name": "",
"video_prompt": "",
"video_prompt_preview_image": "",
"text_prompt": "",
"structure_transformation": 0.9,
"seed": 123456789,
"seconds": 10,
"width": 1280,
"height": 768,
"exploreMode": true,
"watermark": false,
"image_as_end_frame": false,
"enhance_prompt": true,
"assetGroupName": "Generative Video",
"recordingEnabled": true
},
"status": "PENDING",
"error": null,
"progressText": null,
"progressRatio": null,
"estimatedTimeToStartSeconds": 0,
"artifacts": [],
"sharedAsset": null,
"replyUrl": "https://webhook.site/abc",
"replyRef": "",
"code": 200
}
```
{% endtab %}
{% tab post_gen3-video_Runwayml_response 400 %}
400 Bad Request
```json
{
"error": "",
"code": 400
}
```
{% endtab %}
{% tab post_gen3-video_Runwayml_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab post_gen3-video_Runwayml_response 404 %}
404 Not Found
```json
{
"error": "Unable to retrieve assetId (Not found.)",
"code": 404
}
```
{% endtab %}
{% tab post_gen3-video_Runwayml_response 412 %}
412 Insufficient credits
You do not have enough credits to run this task.
```json
{
"error": "You do not have enough credits to run this task."
}
```
{% endtab %}
{% tab post_gen3-video_Runwayml_response 429 %}
429 Too Many Requests
Wait in a loop for **at least** 10..30 seconds and retry again.
There are two possible cases for API response 429:
* API query is full and can not accept new [gen3/video](#create-a-4-second-long-video-using-text-andor-image-prompts) requests. Size of query defined by [`maxJobs` optional parameter](#request-body).
```json
{
"error": "Account is busy executing tasks",
"runningTasks": {
"": [
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#1_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
},
{
"email": "",
"taskId": "user:user_id-runwayml:account_email-task:task_#N_uuid",
"id": "",
"replyUrl": "",
"replyRef": ""
}
]
},
"code": 429
}
```
* The API received an HTTP response status 429 from Runway. Runway has dynamic query management and may limit the number of simultaneously executed tasks based on internal service load and policies.
```json
{
"error": "You have too many tasks running or pending. Please wait for some of them to finish before starting more."
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
taskId: string,
id: string,
name: string,
image: any,
createdAt: string,
updatedAt: string,
taskType: string,
options: {
name: string,
seed: number,
exploreMode: boolean,
watermark: boolean,
seconds: number,
width: number,
height: number,
structure_transformation: number,
text_prompt: string,
video_prompt: string,
enhance_prompt: boolean,
assetGroupName: string,
recordingEnabled: boolean
},
status: string,
progressText: any,
progressRatio: any,
estimatedTimeToStartSeconds: number,
artifacts: any[],
sharedAsset: any,
error: {
errorMessage: string,
reason: string,
message: string,
moderation_category: string,
tally_asimov: boolean
},
code: number,
replyUrl: string,
replyRef: string
}
```
##### Examples
{% tabs post_gen3-video_Runwayml_example %}
{% tab post_gen3-video_Runwayml_example Curl %}
``` bash
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer …" \
-X POST "https://api.useapi.net/v1/runwayml/gen3/video" \
-d '{"assetId": "…", "text_prompt": "…"}'
```
{% endtab %}
{% tab post_gen3-video_Runwayml_example JavaScript %}
``` javascript
const assetId = "assetId of video asset";
const text_prompt = "text prompt";
const apiUrl = `https://api.useapi.net/v1/runwayml/gen3/video`;
const token = "API token";
const data = {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json' }
};
data.body = JSON.stringify({
assetId, text_prompt
});
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab post_gen3-video_Runwayml_example Python %}
``` python
import requests
assetId = "assetId of video asset"
text_prompt = "text prompt"
apiUrl = f"https://api.useapi.net/v1/runwayml/gen3/video"
token = "API token"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {token}"
}
body = {
"assetId": f"{assetId}",
"text_prompt": f"{text_prompt}"
}
response = requests.post(apiUrl, headers=headers, json=body)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3alpha-upscale ===
Document URL: https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3alpha-upscale
---
layout: default
title: POST gen3alpha/upscale
parent: Runway API v1
nav_order: 580
---
## Upscale to 4K the Gen-3 Alpha and Gen-3 Alpha Turbo videos
{: .no_toc }
January 10, 2025 (December 15, 2025)
Runway website no longer supports Gen-3. Consider migrating to Gen-4.x.
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Use this endpoint to Upscale to 4K videos generated by
* [gen3turbo/create](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3turbo-create)
* [gen3turbo/video](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3turbo-video)
* [gen3turbo/extend](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3turbo-extend)
* [gen3turbo/expand](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3turbo-expand)
* [gen3turbo/actone](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3turbo-actone)
* [gen3/create](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-create)
* [gen3/video](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-video)
* [gen3/extend](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-extend)
* [gen3/actone](https://useapi.net/docs/api-runwayml-v1/post-runwayml-gen3-actone)
{: .post }
> **https://api.useapi.net/v1/runwayml/gen3alpha/upscale**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Request Body
```json
{
"assetId": "Required assetId of Gen-3 Alpha or Gen-3 Alpha Turbo video asset you want to upscale",
"exploreMode": true,
"replyUrl": "Place your call back URL here",
"replyRef": "Place your reference id here",
"maxJobs": 5,
}
```
- `assetId` is **required**. Specify the Gen-3 Alpha or Gen-3 Alpha Turbo video assetId you want upscale. Use [GET /assets/?mediaType=video](../api-runwayml-v1/get-runwayml-assets) to see the list of video assets.
- `exploreMode` is optional. Set to `true` if you have a Runway [Unlimited plan](https://help.runwayml.com/hc/en-us/articles/18053095835795-Unlimited-plan-details) and wish to execute relaxed generation. You are not charged credits for Explore mode generations.
- `replyUrl` is optional, if not provided value from [useapi.net account](../account-management/get-account) will be used.
Place here your callback URL. API will call the provided `replyUrl` once Runway task completed or failed.
Maximum length 1024 characters.
We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality.
- `replyRef` is optional, place here your reference id which will be stored and returned along with this Runway task response / result.
Maximum length 1024 characters.
- `maxJobs` is optional, if not provided value for referenced by video assetId account will be used.
Valid range: 1…10.
Runway has dynamic query capacity and guarantees that, for a given account, at least one job will run — often two, and very rarely, three. If you have a single account linked, keep adding new jobs until you receive a `429` response. Once you get a `429`, wait for xx seconds or until at least one job completes, then try again. If you need to run more jobs in parallel, simply add more Runway accounts.
##### Responses
{% tabs post_Runwayml_gen3alpha-upscale_response %}
{% tab post_Runwayml_gen3alpha-upscale_response 200 %}
200 OK
Use returned `taskId` to retrieve task status and results using [GET /tasks/`taskId`](../api-runwayml-v1/get-runwayml-tasks-taskId). The generated video `url` can be found in the `artifacts` array of the task with the status `SUCCEEDED`.
If you specify the optional parameter [`replyUrl`](post-runwayml-gen3alpha-upscale#request-body) the API will call the provided `replyUrl` with task progress updates until the task is complete or fails.
```json
{
"taskId": "user:user_id-runwayml:account_email-task:task_uuid",
"id": "",
"name": "",
"image": null,
"createdAt": "2025-01-10T02:55:10.654Z",
"updatedAt": "2025-01-10T02:55:10.691Z",
"taskType": "harrods",
"options": {
"name": "",
"task_artifact_id": "",
"exploreMode": true,
"asset_url": "https://runway-...mp4",
"asset_type": "video",
"scale_factor": 4,
"video_name": "