SeedRouter.Dashboard ↗
DEVELOPER DOCUMENTATION / V1

One request.
Your next video.

A simple asynchronous API for native 480p, 720p, and 1080p video. Quote, generate, poll, download.

Access & authentication

Create an account at Revana (sign in with Google), then open the API dashboard to create your key. The API base URL is https://api.revana.si/v1. New accounts start with zero credits; you can create keys and check quotes, but paid generation is not enabled yet.

Keep the key in your server environment. Use it for every /v1/ request, including MP4 downloads. Never embed keys in browser code. API keys are shown once and can be revoked from the dashboard. Payment funding is not available yet.

export SEEDROUTER_BASE_URL="https://api.revana.si/v1"
export SEEDROUTER_API_KEY="YOUR_API_KEY"

From prompt to MP4.

1. Preview the quote

No generation is submitted. A compatible quote does not reserve balance or capacity.

curl "$SEEDROUTER_BASE_URL/route" \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"An orchid unfolding in soft light","resolution":"720p","duration":5}' 
{
  "available": true,
  "quoted_usd": 1.0,
  "quoted_usd_per_output_second": 0.2,
  "estimated_seconds": 380,
  "reserved_usd": 1.695,
  "routes": [
    {"label":"Provider 1", "quoted_usd":1.0, "estimated_seconds":380},
    {"label":"Provider 2", "quoted_usd":1.225, "estimated_seconds":180},
    {"label":"Provider 3", "quoted_usd":1.375, "estimated_seconds":125},
    {"label":"Provider 4", "quoted_usd":1.695, "estimated_seconds":190}
  ]
}

2. Create the job

This call starts a paid generation using existing account credits. Reuse the same idempotency key and identical JSON when retrying this request.

curl "$SEEDROUTER_BASE_URL/videos" \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: orchid-720-v1" \
  -d '{"prompt":"An orchid unfolding in soft light","resolution":"720p","duration":5,"audio":true,"max_cost_usd":1.60}' 
{"id":"vid_example","status":"queued","quoted_usd":1.0,"quoted_usd_per_output_second":0.2}

3. Poll, then download

Save the returned ID. Poll every 10–15 seconds until a terminal status. Download only after succeeded.

JOB_ID="vid_replace_with_returned_id"
curl "$SEEDROUTER_BASE_URL/videos/$JOB_ID" \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY"

# After status becomes succeeded:
curl --fail "$SEEDROUTER_BASE_URL/videos/$JOB_ID/content" \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" -o video.mp4

Request parameters

Send JSON. Unknown fields are rejected. These parameters apply to quote and generation requests.

FieldType / defaultBehavior
promptRequired string1–30,000 characters after trimming.
resolutionRequired enum480p, 720p, or 1080p.
durationInteger · default 54–30 output seconds. Edit mode derives output length from its source.
aspect_ratioEnum · default 16:916:9, 9:16, 1:1, 4:3, 3:4, 21:9, adaptive. Availability depends on input mode.
modegenerate | editDefaults to generate. Edit requires a source video.
audioBoolean · default falseKeep the generated soundtrack when true; strip it when false.
first_frameHTTPS URLExact first-frame mode. Cannot combine with any reference array.
end_frameOptional HTTPS URLClosing frame; requires first_frame. Use adaptive aspect ratio and no reference arrays. Supported routes only; 4–30 seconds at 480p, 720p, or 1080p.
reference_imagesURL array · default []Up to 30 images on compatible routes.
reference_videosURL array · default []Up to 10 videos, 2–30 seconds each, at most 30 seconds total.
reference_audioURL array · default []Up to 10 audio files, 2–30 seconds each, at most 30 seconds total.
reference_video_seconds / reference_audio_secondsOptional positive numbersDuration hints; the deployed API probes actual media lengths.
has_real_faceBoolean · default falseDeclare real-person face inputs. Standard routing is not qualified for them.
tierstandard | economyDefault standard. Economy 480p also requires the opt-in below.
allow_unverified_providerBoolean · default falseExplicit opt-in for Economy 480p with unverified model provenance.
quality_modenativeNative output only. Upscaling cannot be requested.
max_cost_usdPositive numberRequired for customer generation when enabled; at most $100. The highest eligible displayed provider price is reserved. The successful provider’s saved quote is charged, including a 10% markup. More expensive routes are excluded by this cap.
max_wait_sInteger · 1–86400Filters routes by expected latency. This is not a job deadline or cancellation timer.

Bring your references.

Upload media to directly downloadable HTTPS storage before submitting. Your computer’s local file paths are not accepted. URLs must remain accessible throughout generation. The service measures audio/video duration before routing.

Images + audio at 1080p

{
  "prompt": "Use the character in the images walking through a sunny garden.",
  "resolution": "1080p",
  "duration": 5,
  "reference_images": ["https://your-storage.example/character.jpg"],
  "reference_audio": ["https://your-storage.example/ambience.mp3"],
  "audio": true,
  "max_cost_usd": 4
}

Image and audio support does not guarantee acceptance of every combination. A 20-image plus audio test passed at 720p. Real-person identity matching and audio-only conditioning are not broadly qualified.

Edit existing footage

Set mode: "edit", place the source first in reference_videos, and omit duration. The source must be 4–30 seconds; output follows its duration and aspect ratio. This mode currently has one compatible route, so it has no fallback. Generative subject replacement is not a guarantee of exact face or identity preservation.

{
  "prompt": "Replace the cat with the illustrated dog in the reference image.",
  "resolution": "1080p",
  "mode": "edit",
  "reference_videos": ["https://your-storage.example/source.mp4"],
  "reference_images": ["https://your-storage.example/dog.png"],
  "max_cost_usd": 5
}

Economy 480p

Include "tier": "economy" and "allow_unverified_provider": true. This route’s model provenance is unverified. It does not support exact first-frame requests or currently priced video-reference requests; compatible standard routes can take over.

Prepaid API credits

Add $10, $25, $50, $100, or $1,000 through Stripe Checkout in the dashboard when enabled. $1 paid adds $1 of API credit, and works for every model on Revana. There is no subscription or automatic recharge. Only confirmed payments add credits; refunds and disputes adjust the balance. Generations reserve the highest displayed route price and charge only the successful route’s quote once. Failed requests release their hold.

Jobs, retries, and cost control

Quotes return the compatible routes, cheapest first, numbered Provider 1, Provider 2, and so on. Each contains label, quoted_usd, and estimated_seconds. Primary and recovery routes have different tariffs. The final recovery route adds $0.12 once per job. reserved_usd is the highest enabled route price; quoted_usd is the starting price. Compatibility, availability, and max_cost_usd may leave fewer routes.

After a definitive failure, the next compatible route is attempted. Only the successful route is charged, and the rest of the hold is released. Status responses expose selected_provider, used_backup, and recovery_message, with route labels and provider names. A timeout or uncertain submission is reviewed before another paid generation, since the original may still complete.

StatusMeaning
queuedWaiting for an available generation slot.
runningSubmission, generation, or output processing is in progress.
succeededMP4 ready; result contains URL, dimensions, duration, codec, audio flags, and size.
failedTerminal failure. Inspect error_code before taking further action.
needs_reconciliationSubmission, billing, or output outcome requires operator review. Do not resubmit with a new key.

GET /v1/videos/:id also returns quoted_usd, cost_usd (null until available), timestamps, resolution, mode, duration, and a nullable result object. Customer cost is the successful provider’s saved quote on success and zero on failure. Unresolved jobs keep their hold pending review.

A repeated idempotency key with identical request JSON returns the existing job (HTTP 200). A new job returns HTTP 202. Reusing the key with different request values returns HTTP 409. Keep the same payload, including defaults, when retrying.

Fallback happens after definitive rejection or a failure with a known charge, provided the next compatible estimate fits the remaining cap. An ambiguous submission, timeout after acceptance, or unknown charge stops for review. References and requested resolution are never silently dropped.

There are no cancellation, webhook, or job-list endpoints in this version. Private beta processes two generation jobs concurrently; additional jobs queue.

Handle errors explicitly.

HTTP statusMeaning
400Invalid JSON, unknown/invalid fields, inaccessible media, or incompatible input combination.
401Missing or incorrect bearer key.
404Unknown endpoint or job ID.
409Idempotency payload conflict, or MP4 requested before it is ready.
413Request body exceeds 1 MiB.
422No compatible generation route within the supplied constraints.
500Internal server error. Retry submission only with the original idempotency key.

A quote can return HTTP 200 with available: false and null price fields. Terminal job errors use generation_credit_unavailable, generation_failed, or review_required. Contact the operator for balance or reconciliation issues.

Endpoint reference

MethodPathPurpose
POST/v1/routeCompatible quote; no generation.
POST/v1/videosCreate or retrieve an idempotent generation job.
GET/v1/videos/:idRead job status and result metadata.
GET/v1/videos/:id/contentAuthenticated MP4 download.
GET/v1API information and documentation link; no bearer key required.
Explore pricing ↗