Runway SDK needs Node 18 or Python 3.8; Sume SDK is Node 18, no deps

Runway lists Node 18+ and Python 3.8+. Sume's TypeScript SDK 0.2.0 runs on Node 18+, Bun, Deno or Workers, no runtime deps; no Python SDK is documented.

4 min readSume
All posts

Runway publishes SDKs for Node 18+ and Python 3.8+. Sume documents one official client, @sume-com/sdk@0.2.0, for TypeScript runtimes with fetch and WebCrypto: Node 18+, Bun, Deno or Cloudflare Workers. It is MIT licensed and has no runtime dependencies. If you work in Python, the Sume docs describe the REST API at https://api.sume.com/v1 and do not list a Python package, so call it over HTTP.

Side by side

SDK facts, vendor page read 2026-10-05, Sume docs read 2026-10-05
ItemRunwaySume
LanguagesNode 18+, Python 3.8+TypeScript (Node 18+, Bun, Deno, Workers); REST for the rest
Runtime depsNot stated in the text I readNone
Wait helperwaitForTaskOutput, 10 min defaultwaitForJob, 20 min default; waitForRun, subscribeFormatRun
Auth headerNot covered herex-api-key only; sending Authorization as well returns 401

The auth rule that bites

The Sume client sends x-api-key only. The API accepts either x-api-key or Authorization: Bearer on its own, but rejects both at once with 401 unauthorized. If you wrap fetch with your own instrumentation, make sure the wrapper does not add an Authorization header from a gateway or session. Also keep the key on the server: a Sume API key spends credits, and there is no browser-safe variant.

Submit and wait in TypeScript

This is the docs pattern for a generation job: submit with mode: "async" and an idempotency key, then let waitForJob poll. It resolves with the job record from /v1/jobs/:id. Generated operations do not throw on API errors; they resolve with { data, error, response }, so check error yourself.

import { createSumeClient, generateVideoV1, waitForJob } from "@sume-com/sdk";

async function main() {
  const client = createSumeClient({ apiKey: process.env.SUME_API_KEY! });

  const { data: submitted, error } = await generateVideoV1({
    client,
    headers: { "idempotency-key": crypto.randomUUID() },
    body: { prompt: "Slow push-in on a ceramic mug", mode: "async" },
  });
  if (error) throw new Error(JSON.stringify(error));

  const job = await waitForJob(submitted!.data.request_id, {
    client,
    onStatus: (status) => console.log(status),
  });
  console.log(job.status, job.result.artifacts);
}

main();

Choosing

  • Python 3.8 service: use Runway's SDK for Runway and plain HTTP for Sume, following the status and webhook docs.
  • Edge or serverless TypeScript: the Sume SDK's lack of runtime dependencies and Workers support is the relevant fact.
  • Both vendors can change versions. Re-read the pages linked in sources before you pin a runtime.

What a no-dependency client changes

A package with no runtime dependencies has nothing to audit below it and nothing to bundle beyond its own code. The Sume docs say the client needs only fetch and WebCrypto, which is why the same package runs on Node 18+, Bun, Deno and Cloudflare Workers. It also ships verifyWebhook, so signature checks use the same WebCrypto surface.

If you are stuck on an older Node version, the requirement is the first thing to check, since Node 18 is the floor on both sides in the pages I read. Python 3.8 is a Runway-side figure only. For Sume from Python, follow the HTTP examples in the docs, and use the x-api-key header or Authorization: Bearer, never both.

Sources

Related posts

More in Comparisons

All Comparisons posts

Written by Sume