# `GenAI.Media.Job`

A handle for an ASYNC (submit -> poll -> download) media generation (ADR-016) —
the shape long-running providers (music/video) return instead of inline bytes.

Defined in genai-core NOW so sync and async share ONE `generate_media/2` return
contract from day one (`{:ok, %{data, mime, meta}}` | `{:ok, %Job{}}` | `{:error, _}`).
The submit/poll/download HARNESS is owned by the audio/video lane (soren); this is
just the contract struct.

# `status`

```elixir
@type status() :: :pending | :running | :succeeded | :failed
```

# `t`

```elixir
@type t() :: %GenAI.Media.Job{
  id: String.t() | nil,
  meta: map(),
  output: %{data: binary(), mime: String.t()} | nil,
  provider: module() | atom() | nil,
  status: status()
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
