# `Parlora.Backend`
[🔗](https://github.com/hfiguera/parlora/blob/v0.1.0/lib/parlora/backend.ex#L1)

Contract for application-owned work, independent of the voice provider.

Use a built-in adapter from `Parlora.Backends.Jido`, `Parlora.Backends.Sagents`,
or `Parlora.Backends.Legion`, or implement this behaviour without an agent
framework. Configure the session with `backend: {module, options}`.

Admission and completion are separate: `c:submit/2` admits work, then the adapter
emits correlated events containing the request/task/revision identities from
`Parlora.BackendRequest`. Results carry verified application facts in
`Parlora.BackendResult`. Cancellation may be advisory and never implies an undo.

Your application owns authorization, service timeouts, operation idempotency,
and reconciliation of uncertain external effects. See the
[backend contract](public-interfaces.html#6-parlora-backend) for callbacks and events.

# `cancel`

```elixir
@callback cancel(pid(), String.t(), String.t(), term()) ::
  :ok | {:error, Parlora.Error.t()}
```

# `capabilities`

```elixir
@callback capabilities(pid()) ::
  {:ok, Parlora.Backend.Capabilities.t()} | {:error, Parlora.Error.t()}
```

# `close`

```elixir
@callback close(pid(), String.t(), term()) :: :ok | {:error, Parlora.Error.t()}
```

# `start_link`

```elixir
@callback start_link(Parlora.AdapterInit.t(), keyword()) ::
  {:ok, pid()} | {:error, Parlora.Error.t()}
```

# `submit`

```elixir
@callback submit(pid(), Parlora.BackendRequest.t()) :: :ok | {:error, Parlora.Error.t()}
```

# `update`

```elixir
@callback update(pid(), String.t(), String.t(), Parlora.BackendRequest.t()) ::
  :ok | {:error, Parlora.Error.t()}
```

---

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