# Add a Watchdog target > Starts uptime checks and security scans of a website for a customer. Source: https://docs.vigilbase.com/one/api/reference/monitoring/watchdog-targets-create `POST https://api.vigilbase.com/one/v1/customers/{customerId}/watchdog-targets` Starts uptime checks and security scans of a website for a customer. A customer can have each domain once. > Deprecated aliases: `POST https://one.vigilbase.com/api/customers/{id}/watchdog/targets`. They answer with the same bodies, with a `Deprecation` header and a `successor-version` link to this URL. ## Authorizations Send one of these: - `Authorization` (string, header, required): Bearer access token from Vigilbase Identity (`auth.vigilbase.com`), sent as `Authorization: Bearer `. The CLI gets one with `vigilbase login`. Scope: `one:api`. - `Authorization` (string, header, required): Organisation API key (`vb_one_…`) from **Settings → API keys** in Vigilbase One, sent as `Authorization: Bearer vb_one_…`. Needs a key with write access: read-only keys get `403` with the code `read_only_key`. See [organisation API keys](https://docs.vigilbase.com/one/api#organisation-api-keys). - `Authorization` (string, header, required): Vigilbase Identity access token issued to an MCP client (mcp.vigilbase.com). Scope: `one:write`. - Permissions checked: `write:monitoring`, `write:partner_services` ## Path parameters - `customerId` (string, required) ## Header parameters - `Idempotency-Key` (string): A unique key for this write (a UUID is recommended). A retry with the same key and body returns the first answer (draft-ietf-httpapi-idempotency-key-header-08). Min length 1, max length 255. ## Body (application/json) - `domain` (string, required): A public hostname; private and reserved names are refused. Min length 1, max length 255. - `displayName` (string): Max length 255. - `targetUrl` (string): Defaults to https://{domain}. Max length 2048. - `uptimeEnabled` (boolean): Default `true`. - `securityEnabled` (boolean): Default `true`. - `checkType` (string): One of `http`, `https`, `tcp`, `dns`, `icmp`. Default `"https"`. - `checkIntervalSeconds` (integer): Default `60`. Minimum 30, maximum 3600. - `timeoutSeconds` (integer): Default `10`. Minimum 5, maximum 60. - `regions` (string[]): Defaults to the offered ones of nyc, lon and sgp. Max 50 items. - `latencyWarningMs` (integer): Default `2000`. Minimum 100, maximum 30000. - `latencyCriticalMs` (integer): Default `5000`. Minimum 100, maximum 60000. - `scanFrequency` (string): One of `hourly`, `daily`, `weekly`. Default `"daily"`. ## Responses Errors are problem details (`application/problem+json`). See [errors](https://docs.vigilbase.com/one/api#errors). ### 201 (application/json) Success - `id` (string, required) - `domain` (string, required) - `displayName` (string | null, required) - `targetUrl` (string | null, required) - `checkType` (string, required) - `checkIntervalSeconds` (integer, required): Minimum -9007199254740991, maximum 9007199254740991. - `timeoutSeconds` (integer, required): Minimum -9007199254740991, maximum 9007199254740991. - `regions` (string[], required) - `uptimeEnabled` (boolean, required) - `securityEnabled` (boolean, required) - `alertingEnabled` (boolean | null, required) - `scanFrequency` (string | null, required): hourly, daily or weekly. - `latencyWarningMs` (any, required) - `latencyCriticalMs` (any, required) - `source` (string | null, required): manual, cloudflare, import, api, … - `latestGrade` (string | null, required) - `latestScore` (number | null, required) - `lastScanAt` (any, required) - `nextScanAt` (any, required) - `status` (object, required) - `isUp` (boolean | null, required): Null when the last check is stale or unknown. - `lastCheckAt` (any, required) - `uptime24h` (number | null, required) - `uptime7d` (number | null, required) - `uptime30d` (number | null, required) - `avgLatencyMs` (number | null, required) - `sslDaysUntilExpiry` (number | null, required) - `sslExpiryDate` (any, required) - `createdAt` (any, required) - `updatedAt` (any, required) ### 400 (application/problem+json) Problem: `validation_failed`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### 401 (application/problem+json) Problem: `unauthorized`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### 403 (application/problem+json) Problem: `forbidden`, `read_only_key`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### 404 (application/problem+json) Problem: `not_found`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### 409 (application/problem+json) Problem: `conflict`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### 422 (application/problem+json) Problem: `unprocessable_entity`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### 429 (application/problem+json) Problem: `rate_limit_exceeded`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### 503 (application/problem+json) Problem: `service_unavailable`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### default (application/problem+json) Problem details (RFC 9457). - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ## Example request ```bash # Token from `vigilbase login`, or a write API key (vb_one_…) curl --request POST \ --url 'https://api.vigilbase.com/one/v1/customers/{customerId}/watchdog-targets' \ --header "Authorization: Bearer $VIGILBASE_TOKEN" \ --header 'Content-Type: application/json' \ --data '{"domain":"","displayName":"","targetUrl":"","uptimeEnabled":true,"securityEnabled":true,"checkType":"https","checkIntervalSeconds":60,"timeoutSeconds":10,"regions":[""],"latencyWarningMs":2000,"latencyCriticalMs":5000,"scanFrequency":"daily"}' ``` ## Example response (201) ```json { "id": "", "domain": "", "displayName": "", "targetUrl": "", "checkType": "", "checkIntervalSeconds": 123, "timeoutSeconds": 123, "regions": [ "" ], "uptimeEnabled": true, "securityEnabled": true, "alertingEnabled": true, "scanFrequency": "", "latencyWarningMs": "", "latencyCriticalMs": "", "source": "", "latestGrade": "", "latestScore": 123, "lastScanAt": "", "nextScanAt": "", "status": { "isUp": true, "lastCheckAt": "", "uptime24h": 123, "uptime7d": 123, "uptime30d": 123, "avgLatencyMs": 123, "sslDaysUntilExpiry": 123, "sslExpiryDate": "" }, "createdAt": "", "updatedAt": "" } ``` See also the [guide](https://docs.vigilbase.com/one/api/watchdog-and-monitoring).