# `Scrypath.Backend`
[🔗](https://github.com/szTheory/scrypath/blob/v0.3.5/lib/scrypath/backend.ex#L1)

Internal backend behavior for Scrypath runtime adapters.

This behavior is documented so architecture references remain valid, but it is
still considered an internal seam for v1 rather than a stable extension API.

# `delete_documents`

```elixir
@callback delete_documents(module(), [term()], keyword()) ::
  {:ok, term()} | {:error, term()}
```

# `index_name`

```elixir
@callback index_name(
  module(),
  keyword()
) :: String.t()
```

# `name`

```elixir
@callback name() :: atom()
```

# `search`

```elixir
@callback search(module(), Scrypath.Query.t(), keyword()) ::
  {:ok, map()} | {:error, term()}
```

# `search_many`
*optional* 

```elixir
@callback search_many(
  [{module(), Scrypath.Query.t(), keyword()}],
  keyword()
) :: {:ok, map()} | {:error, term()}
```

Optional federated multi-search over multiple schemas in one HTTP round-trip.

Each row is `{schema_module, %Scrypath.Query{}, fed_opts}` where `fed_opts` is a
keyword list that is usually `[]`. In v1.8 only `:federation_weight` is
defined (a finite float) for per-query merge weights on federated backends.

Implementations return **raw** Meilisearch JSON maps (string keys) before
the search layer decorates them into structs.

# `upsert_documents`

```elixir
@callback upsert_documents(module(), [Scrypath.Document.t()], keyword()) ::
  {:ok, term()} | {:error, term()}
```

---

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