> ## Documentation Index
> Fetch the complete documentation index at: https://docs.motioness.com/llms.txt
> Use this file to discover all available pages before exploring further.

# FAQ

Common questions about how Motioness works in production.

# FAQ

**Why does the first request return 202?**

Generation takes 20-60 seconds. The proxy returns 202 with a `Retry-After` header instead of holding the connection open. Subsequent requests for the same content-addressed URL stream from the edge cache in ~5ms.

    To skip the polling, append `?wait_ms=8000` and the server long-polls up to 8 seconds before falling back to 202.

  **Will the same URL ever return different bytes?**

No. Asset IDs are content-addressed — same `(src, motion, mode, dur, prompt, seed, idem, aspect)` always produces the same `asset_id` and the same bytes. The mp4 is `cache-control: immutable`.

    To intentionally vary output, change `idem` or `seed`. To replace the bytes for an existing `asset_id`, call [regenerate](/guides/regenerate) — same URL, new bytes.

  **How do I stop hot-linking?**

Two options:

    1. **Allowlist mode** — list your origins; requests from elsewhere return 403.
    2. **Signed mode** — embed signed URLs that expire. Without your signing secret, no one can mint new URLs.

    See [allowlist vs signed](/concepts/allowlist-vs-signed).

  **Does Motioness store my source images?**

Only if you upload them via `/api/v1/upload`. Images fetched from public URLs are not persisted — only the generated mp4 + a poster jpg derived from them.

    The vision model sees the source image, then returns a text prompt. Source pixels never round-trip back to disk.

  **What happens when I delete a project?**

Compositions linked to the project get unlinked (`project_id = NULL`) but stay around. Generated assets remain in R2 and are still served by the proxy URLs that point to them. The proxy key is invalidated; new requests with that key return 403.

    To fully purge assets, contact support.

  **Can I bring my own image-to-video model?**

Not today. The model is picked from the project owner's tier — wan-fast / seedance / p-video. Custom models are on the v1.3 roadmap (BYO Replicate API key + model slug).

  **Why does the loop have a visible seam on Free tier?**

Free tier uses `wan-fast`, which doesn't natively support looped output. We crossfade the last 200ms back into the first frame in post — visible if you look closely. Pro+ uses seedance/p-video, which generate native loops with no seam.

    The response carries `X-Motioness-Loop: native | crossfade` so your player can hide the seam (e.g. fade-in cover at the loop point).

  **Can I use Motioness for OG images?**

Yes — request the `.jpg` poster, not the `.mp4`. Posters serve in ~5ms and are static jpg, perfect for `og:image`.

    For animated OG (Twitter player cards, etc.), the mp4 works but make sure your hosting supports `<video>` in OG previews — most don't.

  **Will it work with adblockers?**

Proxy URLs are served from `motioness.com`. If a customer's adblocker blocks `motioness.com`, the mp4 won't load. The poster jpg falls back gracefully.

    No third-party scripts run client-side (the SDK is your code, not ours), so the adblocker surface is minimal.

  **Does it work in email?**

`<video>` doesn't work in most email clients. Use the poster jpg — same URL with `.jpg` instead of `.mp4` — for static fallback.

    For Gmail-style "preview a video", attach the mp4 as a separate URL and let the client render its own player when supported.

  **Why do I see 'webhook secret rotated' but no event?**

Rotating the secret invalidates outstanding signatures. Any webhook delivery in flight will fail signature verification on your endpoint until you update the stored secret. To avoid the gap:

    1. Read both old + new secrets in your verifier during rollover.
    2. Wait for retries to drain (max 2h).
    3. Drop the old secret.

## Still stuck?

[Email us](mailto:hi@motioness.com) with your `X-Request-Id` and we'll find the trace.