Private preview · invite-only

One API for the leading image and video models.

One key, one request shape and one prepaid balance for models from ByteDance, Google, OpenAI, xAI, MiniMax, Black Forest Labs, Alibaba, Runway, Luma, Recraft, Stability AI, Ideogram and Meta. You pay only for what's produced.

  • REST /v1 · OpenAPI 3.1
  • TypeScript + Python SDKs
  • Webhooks + SSE
Illustration: a video generation moving from queued to succeeded, with its status streamed as Server-Sent Events.

Why RawFrame

Ship generative media without the integration tax.

Every provider has its own auth, request format, job model and bill. We put one contract in front of all of them and handle the parts that are easy to get wrong.

  • One request shape for every model

    POST /v1/generations takes the same fields for images and video, and we map them to each provider. GET /v1/models lists every model's modes, durations, resolutions, aspect ratios, reference limits and price, so you can validate before you send. Requests a model can't do are rejected, never silently changed.

    • model
    • prompt
    • references
    • params.aspect_ratio
    • params.duration_seconds
    • params.resolution
    • params.seed
    • provider_options
  • Pay for what's produced

    Prepaid credits are held when you submit and settled for the seconds or images actually delivered, never more than the estimate.

    Failed generations and blocked requests cost nothing.

  • Results by webhook, stream or SDK

    Signed webhooks (Standard Webhooks, HMAC-SHA256) retried with backoff for about a day, a Server-Sent Events stream per generation, and TypeScript and Python SDKs with wait-for-completion helpers.

  • Per-model availability and fallback routing

    List up to three fallback models and, if one is down or rate-limited, the request runs on the next. You pay for the model that ran. Each model has a circuit breaker, and its availability shows in GET /v1/models. Fallback routing

  • Moderation soon

    Safety and provenance

    Anything a provider's safety filter blocks comes back as content_rejected, uncharged. Outputs are stored exactly as delivered, so embedded C2PA provenance isn't stripped. Our own prompt and output moderation is on the way.

Models

Every model, one request shape

27 models from 13 providers, listed live from GET /v1/models with their modes, availability and starting price.

All model docs

Image18

Models are in preview: access to each depends on its provider's terms and can change, and prices may change before launch. Availability and prices on this page come from the live catalog.

Developers

From key to video in a few lines.

The SDKs are generated from the same OpenAPI spec as the API, and every sample in the docs runs in CI.

  1. 1

    Create a key

    Scoped, shown once, stored hashed and prefixed for secret scanning.

  2. 2

    Send a generation

    Images and video share one async job model. Idempotency keys make retries safe.

  3. 3

    Get the result

    Poll, stream Server-Sent Events, or receive a signed webhook. Outputs come back as signed URLs.

import { RawFrame } from "@rawframe/sdk";

const rf = new RawFrame(); // reads RAWFRAME_API_KEY

const video = await rf.generations.createAndWait({
  model: "bytedance/seedance-2.5",
  prompt: "A paper boat drifting down a rainy gutter, golden hour",
  params: { duration_seconds: 5, aspect_ratio: "16:9", resolution: "720p" },
});

console.log(video.outputs?.[0]?.url, video.charge_micros);

Pricing

Prepaid credits. Pay for output, not attempts.

Top up by card and spend across every model. Each model has its own price list, per second of video or per image, and every generation is billed on what it actually produced.

  1. 01

    Estimate

    Your request's maximum price comes back as price_estimate_micros.

  2. 02

    Hold

    That amount is reserved from your balance. If it can't be covered, nothing is queued.

  3. 03

    Charge

    On success you pay for what was delivered, never more than the hold. The rest is released.

You're not charged for

  • Failed generations, including provider outages
  • Prompts or references blocked before rendering
  • Outputs blocked by a provider's or our checks (by default)
  • Canceling a generation that's still queued

Canceling a running generation follows the model's cancel policy.

  • Auto-recharge below a threshold you set
  • A paid invoice for every top-up
  • Usage by day or model, with CSV export
  • Exact integer micro-USD amounts

How pricing and credits work

Make your first generation.

Access is invite-only during the preview. If you've been invited, sign in with that email.