hosting
POST /v1/index-monitoring
Monitor another page, or a whole site hosted elsewhere.
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 POST https://api.zinndigital.com/v1/index-monitoring \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "fqdn": <string> }'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
Creates one monitored target. `kind` decides which product and therefore which allowance it consumes, and the two are **not** interchangeable: a `section` needs a `path` and consumes `indexing_targets`; an `external_site` takes no `path` and consumes `external_index_sites`. Does **not** check the target. The next scheduled sweep does, on this account's normal cadence — so creating a target costs nothing, and a typo costs nothing. Answers `409` when the same page is already monitored, rather than succeeding silently: a duplicate would consume a second allowance slot and a second check every day for the same answer. Answers `422` with `ALLOWANCE_EXCEEDED` when the relevant allowance is full, carrying the limit in `details` and naming the add-on that raises it.
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
kind | string<section, external_site> | No | — |
fqdn | string | Yes | The hostname to monitor, e.g. `example.com`. |
path | string | No | Required for `section`, and rejected for `external_site`. ⛔ An empty path on a section would be the whole site, which every plan already checks free — so it is refused rather th… |
label | string | No | — |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
id | string | Yes | — |
kind | string<section, external_site> | Yes | `section` is a page or path prefix inside a site, on top of the free whole-site check. `external_site` is an entire website hosted somewhere else, billed per site per month. The… |
fqdn | string | Yes | The hostname, lower-cased. |
path | string | Yes | The path prefix without slashes (`blog`, `shop/offers`). Always empty on an `external_site`, and never empty on a `section`. |
label | string | Yes | What the customer calls it, so a list of twelve paths is readable. |
operand | string | Yes | The exact search operand checked, e.g. `example.com/blog`. |
created_at | string | Yes | — |
indexed | boolean | Yes | ⛔ **Three-valued.** `true` and `false` are answers from the provider. `null` means no reading exists yet, **or** this row is beyond the current allowance and is not being checke… |
checked_at | string | Yes | When the reading was taken. `null` when there has never been one. |
monitored | boolean | Yes | Whether the sweep is currently checking this row. `false` with the row still present is the "you have downgraded, this one is paused" state — shown rather than hidden, because t… |
Errors this endpoint can return
401 · 403 · 404 · 409 · 422