# `Image.Plug.Provider.Cloudinary`
[🔗](https://github.com/elixir-image/image_plug/blob/v0.1.0/lib/image/plug/provider/cloudinary.ex#L1)

Cloudinary URL provider.

Wires `Image.Plug.Provider.Cloudinary.URL` (URL recognition),
`Image.Plug.Provider.Cloudinary.Signing` (optional HMAC verification),
and `Image.Plug.Provider.Cloudinary.Options` (option parsing) into
the `Image.Plug.Provider` behaviour.

Mount under any path. The expected URL shape is:

    <mount>/<account>/image/<delivery>/[s--<sig>--/]<transforms>/<source>

where `<transforms>` may be a single comma-separated stage or
multiple stages joined with `/` (v0.1 flattens multiple stages
into one).

### Options

* `:mount` — string path prefix the plug is mounted under.
  Stripped before treating the rest as the cloudinary path.
  Defaults to `""`.

* `:account` — when set, asserts the URL's account segment
  matches this value. When `nil` (default), any account is
  accepted.

* `:strict?` — `true` (default) rejects unknown cloudinary option
  keys with `:unknown_option`. `false` logs and ignores them.

* `:signing` — `nil` (default; no signing) or
  `%{keys: [...], required?: bool}`. When set, every request URL
  must carry a valid `s--<sig>--` segment. Wire format matches
  Cloudinary's hosted signed URLs (SHA-256, 32 url-safe-base64
  characters). See `Image.Plug.Provider.Cloudinary.Signing`.

### Conformance

See `guides/cloudinary_conformance.md` for the per-option support
matrix and the documented gaps.

---

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