<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reference on Tenpm Uptime Docs</title><link>https://docs.10pmuptime.com/docs/reference/</link><description>Recent content in Reference on Tenpm Uptime Docs</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://docs.10pmuptime.com/docs/reference/index.xml" rel="self" type="application/rss+xml"/><item><title>Monitor API reference</title><link>https://docs.10pmuptime.com/docs/reference/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.10pmuptime.com/docs/reference/api/</guid><description>&lt;h1 id="monitor-api-reference"&gt;Monitor API reference&lt;a class="anchor" href="#monitor-api-reference"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;The JSON API a &lt;code&gt;monitor&lt;/code&gt; agent uses to enroll with a &lt;code&gt;tenpm uptime&lt;/code&gt; server, sync&#10;its assigned check set, and report results and status back. Generated from&#10;&lt;code&gt;docs-site/assets/tenpmuptime-monitor.yaml&lt;/code&gt; — see that file&amp;rsquo;s header for how&#10;it&amp;rsquo;s kept in sync with the code.&lt;/p&gt;&#10;&lt;a href="https://docs.10pmuptime.com/tenpmuptime-monitor.yaml" download class="book-btn"&gt;Download the raw OpenAPI spec (tenpmuptime-monitor.yaml)&lt;/a&gt;&#10;&lt;p&gt;The JSON API a &lt;code&gt;monitor&lt;/code&gt; agent uses to enroll with a &lt;code&gt;tenpm uptime&lt;/code&gt; server, sync its assigned check set, and report results and status back. This is the wire contract described in &lt;code&gt;agent/model&lt;/code&gt; and implemented by &lt;code&gt;internal/server/api_handlers.go&lt;/code&gt;; both binaries build against the same Go structs today, so treat this document as generated-by-hand from that code, not the other way around — if the two disagree, the code is right and this file is stale.&#10;Every route except &lt;code&gt;POST /monitor-api/v1/enroll&lt;/code&gt; requires the monitor's own API key, minted at enrollment. &lt;code&gt;POST /monitor-api/v1/enroll&lt;/code&gt; requires an &lt;em&gt;enrollment token&lt;/em&gt; instead (an org token or a platform token — see the security scheme below), since no monitor exists yet at that point.&#10;Error responses across every endpoint are a &lt;strong&gt;plain-text body&lt;/strong&gt; (one line) with a non-2xx status, not a JSON envelope — the handlers use Go's &lt;code&gt;http.Error&lt;/code&gt;. The &lt;code&gt;4xx&lt;/code&gt;/&lt;code&gt;5xx&lt;/code&gt; responses below document status code and body meaning; there is no shared error schema.&#10;Every route here is rate-limited per client address (about 10 requests a second with a burst of 30) and answers &lt;code&gt;429 rate limit exceeded&lt;/code&gt; beyond that. A monitor that syncs and reports every 45 seconds is nowhere near it.&#10;&lt;strong&gt;Versioning (2026-09-22, path moved again 2026-09-27):&lt;/strong&gt; every path below moved under &lt;code&gt;/api/v1/&lt;/code&gt; in the first pass, then to &lt;code&gt;/monitor-api/v1/&lt;/code&gt; in a second, unrelated to versioning itself - a new, separate customer-facing account API (&lt;code&gt;/account-api/v1/...&lt;/code&gt;, not documented in this file) needed a path of its own and collided with this one's &lt;code&gt;/api/v1/checks&lt;/code&gt; and &lt;code&gt;/api/v1/status&lt;/code&gt;, so the monitor API got a distinct prefix instead of a third segment under a shared one. The rule from here on: a JSON change within &lt;code&gt;v1&lt;/code&gt; is additive only - a removed field or a changed meaning gets a new &lt;code&gt;/monitor-api/v2/&lt;/code&gt; path instead of changing what &lt;code&gt;v1&lt;/code&gt; means.&#10;Neither the fully unversioned form (&lt;code&gt;/api/...&lt;/code&gt;, no version segment at all) nor &lt;code&gt;/api/v1/...&lt;/code&gt; itself exists any more - both were renamed with no permanent alias, since every monitor deployed at each point in time was ours to redeploy. The &lt;code&gt;/api/v1/...&lt;/code&gt; → &lt;code&gt;/monitor-api/v1/...&lt;/code&gt; move was briefly served from both prefixes during the fleet's own migration window; that temporary routing was removed once every deployed monitor (this project's own fleet, and any private monitor a customer runs) was confirmed redeployed on a build calling the new path. Treating a prefix rename as a standing policy a third time should not be expected: the next breaking change bumps the version segment (&lt;code&gt;/monitor-api/v2/...&lt;/code&gt;), not the prefix.&lt;/p&gt;</description></item><item><title>Account API reference</title><link>https://docs.10pmuptime.com/docs/reference/account-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.10pmuptime.com/docs/reference/account-api/</guid><description>&lt;h1 id="account-api-reference"&gt;Account API reference&lt;a class="anchor" href="#account-api-reference"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;The read-only, customer-facing JSON API for a person&amp;rsquo;s own account data —&#10;checks, monitors, results, heartbeats, notification channels, members, and&#10;plan settings — plus a full data-export endpoint. This is a different&#10;surface from the &lt;a href="../api/"&gt;monitor API&lt;/a&gt;: that one is what a&#10;&lt;code&gt;monitor&lt;/code&gt; agent uses to talk to the server, authenticated as a monitor;&#10;this one is what a person (or a script acting on their behalf) uses to&#10;read their own org&amp;rsquo;s data, authenticated with their own bearer token&#10;minted from the organisation settings page. Generated from&#10;&lt;code&gt;docs-site/assets/tenpmuptime-account.yaml&lt;/code&gt; — see that file&amp;rsquo;s header for&#10;how it&amp;rsquo;s kept in sync with the code.&lt;/p&gt;</description></item></channel></rss>