Runway APIrunway.com ↗
Access Runway's blog posts, research publications, and open job listings via 4 structured API endpoints. Filter by category, query, location, and department.
What is the Runway API?
The Runway API provides structured access to runway.com's public content through 4 endpoints covering news posts, individual post content, research publications, and open job listings. The list_news_posts endpoint returns a paginated, filterable catalog of company news, customer stories, engineering updates, and safety articles, each with a slug you can pass directly to get_news_post to retrieve the full body text, block-level content, embedded images, and outbound links.
curl -X GET 'https://api.parse.bot/scraper/4cc9526e-da52-4b46-a7e7-cd6e4e0e9657/list_news_posts?category=research' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace runway-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Runway public portal — news, publications, and careers."""
from parse_apis.runway_com_api import Runway, NewsCategory, PostNotFound
client = Runway()
# Browse recent research posts, capped at 5 items.
for post in client.news_post_summaries.list(category=NewsCategory.RESEARCH, limit=5):
print(post.title, post.date, post.category_label)
# Drill into the first research post for its full body and images.
summary = client.news_post_summaries.list(category=NewsCategory.RESEARCH, limit=1).first()
if summary is not None:
detail = summary.details()
print(detail.title, detail.is_standard_post)
print(detail.description)
for block in detail.blocks[:3]:
print(f" [{block.tag}] {block.text[:80]}")
# Point lookup by slug derived from the summary above.
if summary is not None:
try:
full = client.news_posts.get(slug=summary.slug)
print(full.title, len(full.images), "images")
except PostNotFound:
print("post no longer available")
# List open engineering jobs.
for job in client.jobs.list(department="Engineering", limit=5):
print(job.title, job.location, job.is_remote)
# Browse research publications.
for pub in client.publications.list(limit=3):
print(pub.title, pub.date, pub.paper_url)
print("exercised: news_post_summaries.list / details / news_posts.get / jobs.list / publications.list")
Lists Runway's news/blog posts (company news, customer stories, research, engineering, safety, developers) newest first. One round trip loads the complete post catalog, then an optional category filter, an optional case-insensitive text match over title, excerpt and tags, and page/page_size slicing are applied locally. total_matched is the number of posts matching the filters, total_posts the whole catalog, and has_more tells whether a further page exists; page defaults to 1 and page_size to 20 (max 100). An empty posts array is a valid result when no post matches the query. Each post's slug is the input accepted by get_news_post.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based page number over the filtered, date-sorted list. |
| query | string | Case-insensitive substring matched against post title, excerpt and tags. Omitted = no text filter. |
| category | string | Post category filter (matches a post's primary or additional category). Omitted = all categories. |
| page_size | integer | Posts per page; values above 100 are clamped to 100. |
{
"type": "object",
"fields": {
"page": "integer page returned",
"posts": "array of post summaries: slug (path accepted by get_news_post), title, date (ISO 8601 UTC), url, category (slug) and category_label, additional_categories (array of category slugs), author, excerpt, thumbnail URL, tags (array of strings), featured (boolean)",
"has_more": "boolean, true when a later page exists",
"page_size": "integer effective page size",
"total_posts": "integer size of the whole post catalog",
"total_matched": "integer count of posts matching the filters across all pages"
},
"sample": {
"data": {
"page": 1,
"posts": [
{
"url": "https://runway.com/research/introducing-praxis-1",
"date": "2026-09-30T17:00:00.000Z",
"slug": "research/introducing-praxis-1",
"tags": [],
"title": "Introducing Praxis-1",
"author": "Runway",
"excerpt": "An open-weight world action model that turns Runway's video pretraining into control for real robots.",
"category": "research",
"featured": false,
"thumbnail": "https://d3phaj0sisr2ct.cloudfront.net/site/research/praxis-1/images/praxis-1-card.webp",
"category_label": "Research",
"additional_categories": []
}
],
"has_more": true,
"page_size": 3,
"total_posts": 165,
"total_matched": 30
},
"status": "success"
}
}About the Runway API
News and Blog Content
list_news_posts returns the full post catalog sorted newest first, with each entry exposing a slug, title, date (ISO 8601 UTC), url, category slug, and category_label. You can narrow results with a category filter, a case-insensitive query matched against title, excerpt, and tags, and a page/page_size pair — page_size is clamped to 100. The response includes total_posts, total_matched, and has_more so you can paginate reliably.
Individual Post Detail
get_news_post accepts a slug from the listing response and returns the full article: title, date, description, image (OpenGraph lead image), body_text (plain text with blank-line separators), blocks (an ordered array of {tag, text} objects covering h1–h4, p, li, and blockquote elements), links (external URLs found in the body), and images (all body image URLs). This block structure lets you reconstruct document hierarchy without parsing raw HTML.
Research Publications
list_publications hits the Research > Publications page in a single call and returns all entries at once — no pagination inputs. Each publication object includes title, a display date string as shown on the site (e.g. "September 3, 2026"), an authors array, additional_author_count for abbreviated author lists, abstract, and paper_url. The total field tells you how many publications were returned.
Job Listings
list_jobs returns all open roles with full detail: id, title, department, team, employment_type, location, secondary_locations, workplace_type, remote flag, country, publish timestamp, job page URL, application URL, and the full plain-text job description. You can filter by query (title substring), location (primary location substring), or department (case-insensitive exact match). The response also surfaces departments and locations arrays so you can enumerate valid filter values before querying.
The Runway API is a managed, monitored endpoint for runway.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when runway.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official runway.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor Runway's engineering and safety blog posts by filtering
list_news_postson category to track new publications. - Build a research digest tool that aggregates
list_publicationsresults including abstracts and paper URLs. - Pipe
get_news_postbody blocks into a text pipeline to extract structured content from Runway announcements. - Track new open roles by department or location using
list_jobswith thedepartmentandlocationfilters. - Collect outbound
linksfrom Runway blog posts to identify referenced tools, papers, and partner sites. - Aggregate
authorsandadditional_author_countfrom publications to map Runway's research contributor network. - Alert on new customer story posts by polling
list_news_postswith a category filter and comparing against a storedtotal_matchedcount.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Runway have an official developer API?+
How does filtering work in list_news_posts?+
list_news_posts accepts three independent filters: category matches a post's primary or additional category slug; query does a case-insensitive substring match across title, excerpt, and tags; and page/page_size paginate the filtered result set. All filters are optional and can be combined. The response includes total_matched so you know how many posts satisfy the active filters across all pages.Are author lists always complete in list_publications?+
authors array reflects only the names displayed on the page. The additional_author_count field tells you how many additional authors were omitted from the visible listing. Full author lists are not available through this endpoint.Does the API cover Runway's video generation model outputs or API usage history?+
Can I retrieve the full text of a job description, or just metadata?+
list_jobs returns the full plain-text job description for every role in the response, not just metadata. Each job object also includes application_url, workplace_type, secondary_locations, and publish timestamp alongside title, department, team, and location fields.