public

GET /v1/plugins/{slug}/download

The installable plugin zip.

All public endpoints

Authentication

Send an API key as a bearer token. This endpoint does not state a specific permission in the specification, so give your key the least it needs and check the response rather than assuming.

This endpoint takes no organisation id. Your key already identifies the organisation it belongs to, and the response is scoped to it.

Try it

Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.

curl -X GET https://api.zinndigital.com/v1/plugins/{slug}/download \
  -H "Authorization: Bearer zdk_live_…"

Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console

Details

The archive itself, over TLS on our own hostname, with its SHA-256 in `X-Zinn-Package-SHA256` so a download is checkable without a second request. ⛔ The bytes are served rather than redirected, and that is a constraint the CLIENT imposes: the self-hosted updater shipped inside these plugins accepts a package only on our own host, so a redirect to a release asset or an object store is refused on every site. An `app-only` plugin is invisible here to an anonymous caller. A site we host reaches it with the **package ticket** (`site`, `exp`, `sig`) that `POST /v1/wp/plugin-update/{siteId}` puts in the `package` URL it returns — WordPress fetches that URL with no headers, so the proof has to travel in the query string. The ticket is bound to one plugin at one version and expires; an invalid one is the same `404` as an unknown plugin.

Parameters

NameTypeRequiredWhat it is
slug (path)stringYesThe plugin's directory name and text domain, e.g. `zinn-cache`.
site (query)stringNoThe site id a package ticket was minted for. Ignored for public plugins.
exp (query)integerNoUnix time the package ticket stops being accepted.
sig (query)stringNoHex HMAC-SHA256 over `slug:version:exp` with the site's own secret.

Errors this endpoint can return

404 · 429