Import monitors from a config document
Creates monitors from a config document produced by GET /v1/monitors/export (or by a converter from another provider's export). The request body IS that document. Every monitor is created through the same path as the dashboard's create wizard, with the same product-default criteria and the same plan limits. An entry whose name and type already belong to a live monitor is SKIPPED, so re-posting the same document is safe and creates nothing. Send ?dry_run=true first to receive the same per-entry plan without writing anything. If the document would take the project past its plan's monitor limit, nothing is created and the response says so — a partial import that silently stops halfway is worse than a refusal.
Authorization
bearerAuth An uptimely_live_ project API key (Settings → API Keys).
In: header
Query Parameters
When true, nothing is written and the response is the plan an apply would follow. Defaults to false — a POST without it imports.
"false"Value in
- "true"
- "false"
Header Parameters
Optional client-generated key (1-255 visible ASCII characters; a UUID works) making this POST safely retryable. Retrying with the SAME key and byte-identical body within 24h replays the stored first response. The same key with a different body answers 422 idempotency_key_reused; a retry racing the first execution answers 409 idempotency_in_progress. Omitting the header executes normally with no idempotency guarantee.
1 <= length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
A project's monitors as portable, versioned configuration. Contains no ids, secrets, incidents or status history.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/v1/monitors/import" \ -H "Content-Type: application/json" \ -d '{ "version": 1, "monitors": [ { "name": "string", "monitor_type": "string" } ] }'{ "dry_run": true, "created_count": -9007199254740991, "skipped_count": -9007199254740991, "invalid_count": -9007199254740991, "failed_count": -9007199254740991, "unmatched_labels": [ "string" ], "entries": [ { "name": "string", "monitor_type": "string", "outcome": "create", "reason": "string", "monitor_id": "string" } ]}