Source: https://docs.signalsitter.com/ # SignalSitter documentation Never let critical work fall through the cracks again. SignalSitter watches your scheduled jobs, pipelines and services, and tells you when one goes quiet or a number crosses a limit you set, so you or your agent can fix it before your customers notice. ## Use a coding agent Let your agent add SignalSitter to your code and run it for you, through the REST API or MCP. - [Agents](/guides/agents): pick how your agent connects and give it the docs. - [REST API](/guides/rest): your agent calls the API directly. - [MCP](/guides/mcp): connect an MCP client with a scoped credential. ```text Read https://docs.signalsitter.com/llms-full.txt, then add a SignalSitter heartbeat to the end of my nightly backup job. ``` ## Integrate directly Send a heartbeat from any job or app with one HTTP request. - [Publish your first heartbeat](/guides/quickstart): from zero to a watched job in a few minutes. - [Publishing heartbeats](/guides/publish): cadence, measurements and limits. - [REST API](/guides/rest): manage monitors, incidents and alerts from code. - [API reference](/reference/api): every operation, with its request and response. ## Use the dashboard Prefer clicking to coding? Do everything in the [dashboard](https://app.signalsitter.com). - [Get started](/dashboard/get-started): sign in and create your first monitor. - [Monitors](/dashboard/monitors): status, history and settings. - [Alerts and notifications](/dashboard/alerts): choose where alerts go. ## Plans and support See [plans and limits](/guides/plans). Questions? Email [support@signalsitter.com](mailto:support@signalsitter.com). Read the [Privacy Statement](https://signalsitter.com/privacy) and [Terms of Service](https://signalsitter.com/terms). ## For agents [llms.txt](/llms.txt) indexes these docs; [llms-full.txt](/llms-full.txt) has every page as Markdown in one file. The full API description is [openapi.json](/openapi.json). --- Source: https://docs.signalsitter.com/guides/quickstart # Publish your first heartbeat Send one HTTP request when your job finishes. If the requests stop, SignalSitter tells you. ## 1. Create a monitor and a credential Open [the dashboard](https://app.signalsitter.com), create a project, then create a monitor. Copy its publish URL. It's an ingest host plus the monitor's ID: ```text https://ingest.signalsitter.com/nightly-backup ``` Then issue a credential. Keep it in an environment variable, `SIGNALSITTER_PUBLISH_CREDENTIAL` below, or in your secret store. A `write` credential sends beats. A `manage` credential can also create and configure monitors from a beat: send to a new ID and the monitor is created. ## 2. Send a beat ```bash curl --request POST \ --url https://ingest.signalsitter.com/nightly-backup \ --header "Authorization: Bearer ${SIGNALSITTER_PUBLISH_CREDENTIAL}" ``` That's a complete beat. No body needed. Add this as the last step of your job. ## 3. Watch it arrive The beat shows up on the monitor in the dashboard. The response says when the next one is due: ```json { "accepted": true, "observation": { "status": "on_time" }, "nextDeadline": "2026-07-28T12:05:30.000Z" } ``` The monitor expects a beat every interval, plus a grace period (60 seconds by default). Miss that deadline and it opens an incident and sends your callback, if you've set one up. No interval set? The monitor learns one from your first five regular beats, then starts watching. Only beats sent with a `manage` credential count toward learning. Until then, silence raises nothing. ## 4. Next steps Set the cadence on the beat: every 5 minutes, with 2 minutes of grace. Configuration headers need a `manage` credential. A `write` credential records the beat and ignores them. ```bash curl --request POST \ --url https://ingest.signalsitter.com/nightly-backup \ --header "Authorization: Bearer ${SIGNALSITTER_PUBLISH_CREDENTIAL}" \ --header "Signalsitter-Interval: 300" \ --header "Signalsitter-Grace: 120" ``` Send measurements as a JSON object: ```bash curl --request POST \ --url https://ingest.signalsitter.com/nightly-backup \ --header "Authorization: Bearer ${SIGNALSITTER_PUBLISH_CREDENTIAL}" \ --header "Content-Type: application/json" \ --data '{"files":42}' ``` To get an incident when a value crosses a limit, see [Numeric rules](/guides/publish#numeric-rules). ## Where to go next - [Publishing heartbeats](/guides/publish): every header, limit and error. - [Agents](/guides/agents): let a coding agent set up monitors for you. - [Publish heartbeat reference](/reference/api/publishheartbeat): the full request and response schema. --- Source: https://docs.signalsitter.com/guides/agents # Agents Coding agents like Claude Code, Cursor and Codex can add SignalSitter to your code or run it for you. They work about as well through any of three routes. Pick whichever your agent already handles. ## CLI The SignalSitter CLI is coming soon. Until then, your agent can run `curl` against the REST API: ```bash curl --fail-with-body \ --header "Authorization: Bearer $SIGNALSITTER_API_KEY" \ "https://api.signalsitter.com/v1/monitors" ``` See the [REST API guide](/guides/rest) for more. ## REST API Your agent calls `https://api.signalsitter.com` directly, with the credential as a Bearer token. - [REST API guide](/guides/rest): authentication, examples and errors. - [API reference](/reference/api): every operation. - [`/openapi.json`](/openapi.json): the full contract in one file. Agents read it well. ## MCP If your agent supports MCP, connect it to `https://api.signalsitter.com/mcp`. It then sees SignalSitter's tools and calls them by name. Tools that change something only run when the agent sends `confirm: true`. [Set up MCP](/guides/mcp) has the config for Claude Code, Codex, VS Code and the TypeScript SDK. ## Give your agent the docs Point your agent at one of these: - [`/llms.txt`](/llms.txt): an index of every page. - [`/llms-full.txt`](/llms-full.txt): all the docs in one file. Then ask for what you want. For example: ```text Read https://docs.signalsitter.com/llms-full.txt, then add a SignalSitter heartbeat to the end of my nightly backup job. ``` ## Credentials Create a credential in the [dashboard](https://app.signalsitter.com). The secret appears once, so copy it straight into your agent's environment as `SIGNALSITTER_API_KEY`. Never paste it into a prompt, a committed file or a URL. Give the agent only what the job needs: | Preset | What it can do | | --- | --- | | `write` | Send beats. Reads nothing. | | `read` | Read monitors, observations, incidents, callbacks and usage. | | `readwrite` | Everything `read` can, plus send beats. | | `manage` | Everything, including creating and configuring monitors, callbacks and credentials. | A job that only sends beats needs `write`. An agent that only looks things up needs `read`. An agent that sets up monitors or callbacks needs `manage`. Give each agent its own credential. Then you can revoke one agent's access in the dashboard without breaking your jobs. Each credential works in one project. To work in another project, create a credential there. --- Source: https://docs.signalsitter.com/guides/plans # Plans and limits Every plan gets heartbeat monitoring and fixed-threshold numeric rules. Plans differ in how much you can use: how many monitors, how often they beat, how many measurements each beat carries, and how much history you keep. ## Plans at a glance | Plan | Monitors | Fastest interval | Measurements per beat | History: raw / 5-minute / hourly | Callback endpoints | API requests/min | MCP requests/min | | --- | ---: | ---: | ---: | --- | ---: | ---: | ---: | | Free | 1 | 5 min | 2 | 7 days / none / none | 1 | 60 | 30 | | Builder | 25 | 1 min | 8 | 30 days / 90 days / 365 days | 5 | 300 | 120 | | Smart | 100 | 1 min | 16 | 30 days / 90 days / 365 days | 20 | 1,200 | 600 | | Scale | 500 | 1 min | 16 | 30 days / 90 days / 365 days | 50 | 6,000 | 3,000 | Free is one complete monitor with a week of raw history. A second service needs a paid plan. ## What each limit means - **Monitors:** how many active monitors you can have. At the limit, creating another is refused. Delete or archive one to free its slot, or upgrade. - **Fastest interval:** how often a monitor's beats are accepted. It isn't a default cadence. A monitor keeps the cadence you set or the one it measures. If that cadence is shorter than your plan allows, the monitor is watched at the plan's interval. See [Publish](/guides/publish). - **Measurements per beat:** the most numeric values one beat can carry. - **History:** how long you can see every individual beat (raw), then five-minute and hourly summaries. "None" means that summary isn't kept. - **Callback endpoints:** how many callback destinations you can configure. - **API and MCP requests/min:** how many requests you can make in one UTC minute, counted separately for the REST API and MCP. A request over a limit gets `signalsitter.rate_limited`. REST problems include a `limit` object naming the limit, your plan, current and attempted usage, and what to do. See [REST](/guides/rest). Check your plan and current usage with [Get entitlements](/reference/api/getorganizationentitlements) or the `signalsitter_get_entitlements` MCP tool. :::note The entitlements response still lists older learned-detection features for compatibility. Production presents heartbeats and fixed-threshold rules only. ::: ## History - **Raw:** every beat exactly as you sent it. - **Five-minute:** after the raw window, beats are summarized into five-minute buckets. - **Hourly:** after that, hourly buckets. How long each is kept depends on your plan; see the table above. A bucket keeps counts, value summaries, statuses, and whether a beat in it contributed to an incident. It doesn't keep the individual beats. History reads and exports return raw beats only by default. Add `includeObservationBuckets=true` to get buckets too. Each bucket has a `resolutionSeconds` of `300` or `3600`. ## Changing plans Only an organization owner can start a checkout or open the billing portal, in the [dashboard](https://app.signalsitter.com). API credentials and MCP clients can't. Any credential with `usage:read` can read billing state, so an agent can explain why a plan changed. ### Downgrades - Your history stays readable. - If you have more monitors than the new plan allows, the oldest are kept, by creation time. The rest are suspended. - Usage above any other new limit is reported as over the limit. Creating new resources is refused until you reduce it. - [List allotment transitions](/reference/api/listbillingallotmenttransitions) shows which monitors were suspended or released, and why. A suspended monitor: - refuses beats with `signalsitter.rate_limited` and the limit `active_monitors`; - keeps every observation it already recorded; - raises no incident while suspended; - resumes on its own when you upgrade or delete or archive another monitor. Restoring an archived monitor needs a free slot. Without one, the restore is refused rather than suspending another monitor. ### Payment grace - A failed payment holds your plan in payment grace until the payment provider stops retrying. - Billing state shows the end of grace as `graceEndsAt`, taken from the provider's own schedule. Your plan continues until then. - A chargeback opens the same grace window instead of suspending service. If the cardholder wins, your organization moves to Free. If the chargeback is decided in our favour, your plan continues. ## Ending a subscription - Your organization moves to Free. Monitoring keeps running under Free's limits. Nothing goes read-only. - [Preview cancellation](/reference/api/getbillingcancellationimpact) first. It shows which monitors Free keeps and what narrows on each. - Free holds one monitor. In the preview, every monitor but your oldest is listed as `suspended_over_allotment`. Those stop accepting beats when the cancellation lands. - Nothing is deleted. Suspended monitors keep their history, stay readable and exportable, and raise no incidents. - They resume on their own when you upgrade, or when you delete or archive the monitor holding the slot. --- Source: https://docs.signalsitter.com/guides/publish # Publishing heartbeats A beat is one `POST` to your monitor's publish URL. Send one each time your job runs. New here? Start with [Publish your first heartbeat](/guides/quickstart). ## The request ```bash curl --request POST \ --url https://ingest.signalsitter.com/nightly-backup \ --header "Authorization: Bearer ${SIGNALSITTER_PUBLISH_CREDENTIAL}" ``` The URL is an ingest host plus the monitor's ID. Copy it from the monitor in [the dashboard](https://app.signalsitter.com), or from `publishUrl` when you create a monitor through the API. Use it as given. | Region | Ingest host | | --- | --- | | Unrestricted | `https://ingest.signalsitter.com` | | European Union | `https://eu.ingest.signalsitter.com` | A monitor's region is fixed when it's created. Keep publishing an existing monitor to its own URL. Authenticate with `Authorization: Bearer `. The credential's level decides what a beat can do: - `manage`: records the beat and applies any configuration headers. Sending to a new ID creates the monitor. - `write` or `readwrite`: records the beat and ignores configuration headers. The response lists them in `configuration.ignoredFields`. - `read`: refused with `403`. ## The body The body is optional. Send one of: - nothing; - a single JSON number, such as `42`; - a flat JSON object with 1 to 16 numeric measurements, plus a few scalar metadata fields. ```bash curl --request POST \ --url https://ingest.signalsitter.com/nightly-backup \ --header "Authorization: Bearer ${SIGNALSITTER_PUBLISH_CREDENTIAL}" \ --header "Content-Type: application/json" \ --data '{"files":42,"source":"nightly","complete":true}' ``` Rules for the body: - Any body needs `Content-Type: application/json`. - Measurement names use lowercase letters, numbers and underscores, and start with a letter. - Numbers must be finite JSON numbers. `"42"` as a string is refused, not converted. - The body can be at most 16 KiB. ### Compressed bodies Send `Content-Encoding: gzip` to compress the body. The 16 KiB limit applies to the decompressed body. Any other encoding is refused with `415`. ## Configure a monitor with headers With a `manage` credential, headers on a beat change the monitor's configuration. The change is saved with the beat. | Header | Sets | Values | | --- | --- | --- | | `Signalsitter-Name` | Display name | Text | | `Signalsitter-Interval` | Expected time between beats | Seconds, 60 to one year | | `Signalsitter-Grace` | Extra time before a beat counts as missing | Seconds, 0 to 7 days. Default 60. Values under 60 become 60 | | `Signalsitter-Heartbeat` | Turns missing-beat alerts off | `disabled`. Send `Signalsitter-Interval` to turn them back on | | `Signalsitter-Callback` | Where incidents are sent | `none`, `default`, `alias:`, or a public `https://` URL | | `Signalsitter-Metric-Type` | How a bare-number body is read | `gauge`, `count`, `rate`, `duration`, `counter`, `size` | | `Signalsitter-Min` / `Signalsitter-Max` | Limits on a bare-number body. A value outside them opens an incident | Finite numbers | ```bash curl --request POST \ --url https://ingest.signalsitter.com/nightly-backup \ --header "Authorization: Bearer ${SIGNALSITTER_PUBLISH_CREDENTIAL}" \ --header "Signalsitter-Name: Nightly backup" \ --header "Signalsitter-Interval: 86400" \ --header "Signalsitter-Grace: 1800" ``` Your plan may set a longer minimum interval. See [Plans and limits](/guides/plans). :::caution[Callback URL secret] The first time you set a callback URL with `Signalsitter-Callback`, the response includes `configuration.callbackSigningSecret`. It's shown once. Save it before you discard the response. ::: For anything the common headers don't cover, send `Signalsitter-Config`: a versioned JSON patch, encoded as unpadded base64url. It takes the same patch as the [update configuration](/reference/api/updatemonitorconfiguration) operation. If a common header and `Signalsitter-Config` set the same field, the values must agree. Older learned-detection settings, such as `Signalsitter-Sensitivity` and `Signalsitter-Mode`, are still accepted for compatibility. This guide doesn't cover them. ## Cadence **Set it.** Send `Signalsitter-Interval`, or set an interval when you create the monitor. Each deadline counts from the latest beat. **Let it learn.** Create the monitor without an interval. It watches your beats and sets the interval itself once five beats in a row arrive at a steady pace, each gap within 20% of the typical gap. Grace is then half the interval, at least 60 seconds, unless you set one. While it's learning: - Silence raises nothing. There's no deadline yet. - Only beats sent with a `manage` credential count. - Each response shows progress: ```json { "heartbeatExpectation": { "state": "automatic", "version": 1 }, "heartbeatLearning": { "status": "collecting", "samples": 3, "requiredSamples": 5 } } ``` `status` is `collecting`, `inconsistent` (beats too irregular, still trying) or `unsupported_cadence` (the measured pace is outside 60 seconds to one year). Accept values you don't recognise, as more may be added. If your job runs irregularly, set the interval. A source that never settles into a steady pace is never watched. To learn again, set the heartbeat expectation back to `{ "state": "automatic", "version": 1 }` in the dashboard, the API or `Signalsitter-Config`. ## Measurement types An object measurement without a type is a `gauge`. | Type | Accepts | | --- | --- | | `gauge` | Any finite number, including negatives | | `count`, `counter` | Non-negative whole numbers | | `rate`, `duration`, `size` | Non-negative numbers | A `counter` is a running total. Its first beat sets the starting point, and each later beat is measured as the increase. A drop counts as a reset. `unit` is a display label only. Nothing is converted. ## Numeric rules Rules are fixed limits on a measurement. A breach opens an incident and sends your callback. For a bare-number body, set the limits with headers: ```bash curl --request POST \ --url https://ingest.signalsitter.com/queue-worker \ --header "Authorization: Bearer ${SIGNALSITTER_PUBLISH_CREDENTIAL}" \ --header "Content-Type: application/json" \ --header "Signalsitter-Min: 0" \ --header "Signalsitter-Max: 100" \ --data '42' ``` | Rule | Fires when | | --- | --- | | `minimum` / `maximum` | The value is below or above the limit. Limits are inclusive | | `zeroExpectation` | The value isn't zero (`"zero"`) or is zero (`"nonzero"`) | | `maximumAbsoluteDelta` | The value moved more than this since the last beat | | `maximumPercentageDelta` | The value moved more than this percentage since the last beat | | `ratio` | This measurement divided by another one is outside `minimum` / `maximum` | To set rules on named measurements in an object body, or any rule beyond a minimum and maximum, use [update configuration](/reference/api/updatemonitorconfiguration), the [rule workbench](/dashboard/rules) in the dashboard, or `Signalsitter-Config` on a beat. Set them with a rule's `"ruleAction": { "mode": "active", "version": 1 }` to make it open incidents; without it, the rule is checked and shown but never alerts. This beat alerts when fewer than one file is backed up: ```bash CONFIG='{"version":1,"patch":{"measurements":{"files":{"minimum":1,"ruleAction":{"mode":"active","version":1}}}}}' CONFIG_HEADER=$(printf '%s' "$CONFIG" | base64 | tr -d '\n=' | tr '+/' '-_') curl --request POST \ --url https://ingest.signalsitter.com/nightly-backup \ --header "Authorization: Bearer ${SIGNALSITTER_PUBLISH_CREDENTIAL}" \ --header "Content-Type: application/json" \ --header "Signalsitter-Config: ${CONFIG_HEADER}" \ --data '{"files":0}' ``` Good to know: - A monitor can have up to 32 rules. - By default, one breaching beat opens a critical incident. Set `rulePolicy` to wait for several beats or a length of time first. - To pause one rule, list its kind in the measurement's `disabledRules`. To remove one, set it to `null`, for example `{ "measurements": { "files": { "maximum": null } } }`. - Try a beat against your rules without recording it with [test a beat](/reference/api/testmonitorbeat). ## The response `200` means the beat and any configuration change are saved. A trimmed example: ```json { "accepted": true, "replayed": false, "monitorKey": "nightly-backup", "observation": { "id": "obs_01234567-89ab-4cde-8fab-0123456789ab", "status": "on_time" }, "configuration": { "status": "applied", "appliedFields": ["grace_seconds", "interval_seconds"], "ignoredFields": [], "warnings": [] }, "nextDeadline": "2026-07-28T12:05:30.000Z" } ``` `observation.status` is `on_time`, `late` (after interval plus grace), `learning`, or `not_expected` when missing-beat alerts are off. Errors use `application/problem+json` with a request ID to quote to support. | Status | Meaning | What to do | | --- | --- | --- | | `400` | Bad monitor ID, header, configuration or body | Fix the request. Don't retry it unchanged | | `401` | Credential missing or invalid | Check the `Authorization` header and the credential | | `403` | Credential can't publish, or publishing is refused for your account | Use a `write`, `readwrite` or `manage` credential, or read the problem detail | | `409` | Idempotency key reused with different content | Use a new key for a new beat | | `410` | Monitor deleted | Deleted monitors can't come back. Create a new monitor with a new ID | | `413` | Body or headers too large | Keep the body to 16 KiB or less, and shorten long headers | | `415` | Body isn't JSON, or uses an encoding other than gzip | Send JSON, uncompressed or gzip | | `429` | Plan limit reached, or beats faster than the cadence allows | Read the problem's limit context. See below for cadence | | `503` | Temporary problem on our side | Retry the same request | ## Retries Retry `503` with the same request. A `200` with `"replayed": true` means the first attempt had already been saved. :::tip[Retrying safely] Add an `Idempotency-Key` header with a unique value, such as the job's run ID, when you might send the same beat twice. A repeat with the same key is recorded once. Without a key, a retry after an unclear failure can record a second beat. ::: ## Publishing faster than the cadence You can publish up to twice per interval, and no more than once every 48 seconds. Ten beats can arrive back to back before that spacing applies. A 5-minute monitor accepts one beat every 2 minutes 30 seconds. Faster beats get `429` with a `Retry-After` and the `beat_cadence` limit. Ignore them or retry after `Retry-After`. Either way nothing is lost, and the monitor stays on time. --- Source: https://docs.signalsitter.com/guides/rest # REST API Manage monitors, rules, incidents and callback endpoints over HTTPS. To send beats, see [Publish a heartbeat](/guides/publish). Every operation is listed in the [API reference](/reference/api). ## Get started - **Origin:** `https://api.signalsitter.com` - **Base path:** `/v1` - **Auth:** `Authorization: Bearer ` - **Contract:** the [OpenAPI document](/openapi.json), also served at `GET /v1/openapi.json` 1. Open [the dashboard](https://app.signalsitter.com), pick a project, and create an API credential. Use `read` for read-only work. Managing callback endpoints needs `manage`. 2. Copy the secret into your secret store. It's shown once. 3. Load it into `SIGNALSITTER_API_KEY` and set the origin: ```bash export SIGNALSITTER_API_BASE=https://api.signalsitter.com ``` List your monitors: ```bash curl --fail-with-body \ --header "Authorization: Bearer $SIGNALSITTER_API_KEY" \ "$SIGNALSITTER_API_BASE/v1/monitors" ``` Create a monitor that expects a beat every day, with ten minutes of grace: ```bash curl --fail-with-body \ --request POST \ --header "Authorization: Bearer $SIGNALSITTER_API_KEY" \ --header "Content-Type: application/json" \ --data '{"name":"Nightly backup","intervalSeconds":86400,"graceSeconds":600,"callback":{"kind":"organization_default"}}' \ "$SIGNALSITTER_API_BASE/v1/monitors" ``` The response carries `publishUrl`, the address to send beats to, and `monitorKey`, the monitor's ID. Use that ID as `{monitorId}` in every other monitor route. ## Projects An API credential belongs to the project it was created in. Every request made with it acts in that project, so there is nothing to send. - To work in another project, create a credential in that project. - A `Signalsitter-Project` header naming a different project is refused with `signalsitter.not_found`. - Signed-in dashboard sessions name their project in `Signalsitter-Project`. Listing projects with an API credential returns only that credential's project. Project names are unique in an organization, ignoring case and extra spaces, so creating a duplicate returns `signalsitter.conflict`. See [List projects](/reference/api/listprojects), [Create project](/reference/api/createproject) and [Rename project](/reference/api/renameproject). ## Common tasks ### Create and configure a monitor Only `name` is required at creation. Also accepted: - `intervalSeconds`: 60 to 31,536,000. Leave it out and the monitor measures its own cadence from the beats it receives. - `graceSeconds`: lateness tolerated after the interval. Values below 60 are raised to 60. - `jurisdiction`: `unrestricted`, `eu`, `us` or `fedramp`. It can't change later. - `callback`: where alerts go. See [callback bindings](#send-notifications-with-callback-endpoints). Then: - Watch for the first beat with [Wait for first beat](/reference/api/getmonitoractivation). It returns `waiting`, then `accepted` with the first acceptance time and next deadline. - Check a sample beat without recording anything with [Test a beat](/reference/api/testmonitorbeat). To change a monitor, read it first. The response's `ETag` header carries its configuration version, such as `"configuration-3"`. Send it back in `If-Match`: ```bash curl --fail-with-body \ --request PATCH \ --header "Authorization: Bearer $SIGNALSITTER_API_KEY" \ --header "Content-Type: application/json" \ --header 'If-Match: "configuration-3"' \ --data '{"patch":{"graceSeconds":900}}' \ "$SIGNALSITTER_API_BASE/v1/monitors/nightly-backup" ``` Fields you leave out of `patch` keep their current values. The callback binding has its own route, below. [Change lifecycle](/reference/api/controlmonitorlifecycle) takes one `action` and the same `If-Match`: - `pause`: beats are still recorded, but no deadlines run and no incidents open. - `resume`: the clock restarts with a full interval plus grace. - `archive`: further beats are refused with `signalsitter.monitor_archived`. History is kept, and the monitor reports `restorableUntil`. - `restore`: counts against your plan's active-monitor allowance. At the limit, free a slot or upgrade first. - `enter_maintenance`: needs a `window` with `startsAt` and `endsAt`, at most 30 days. Missed deadlines inside it don't open incidents. The next deadline moves to the window's end. - `exit_maintenance`: ends the window early and restarts the clock. [Delete monitor](/reference/api/deletemonitor) is permanent. It needs `If-Match`, closes open incidents and cancels pending callbacks. ### Read a monitor and its history | Operation | Returns | | --- | --- | | [List monitors](/reference/api/listmonitors) | Every monitor with live status: lifecycle, last beat, next deadline, open incident | | [Get monitor](/reference/api/getmonitordetail) | Configuration, latest observation and the `ETag` | | [List observations](/reference/api/listmonitorobservations) | Accepted beats, newest first | | [Read series](/reference/api/readmonitorobservationseries) | Graph-ready minimum, maximum and mean per time bucket | | [List changes](/reference/api/listmonitorchanges) | Configuration and lifecycle changes, with who made each one | Observations take optional `since` and `until` timestamps (RFC 3339). The series needs both, up to 365 days apart. On a paid plan, add `includeObservationBuckets=true` to read summarized history beyond 30 days. If the same monitor ID exists in two jurisdictions, a request returns `signalsitter.conflict`. Retry with `?jurisdiction=eu` (or the one you mean). ### Set limits with the rule workbench Set a numeric rule directly with a configuration update. This one opens an incident when `files` drops below 1: ```json { "patch": { "measurements": { "files": { "metricType": "count", "minimum": 1, "mode": "heartbeat", "ruleAction": { "mode": "active", "version": 1 } } } } } ``` The rule kinds are `minimum`, `maximum`, `maximumAbsoluteDelta`, `maximumPercentageDelta`, `zeroExpectation` and `ratio`. The [publish guide](/guides/publish) defines each one. To see what a change would have caught before it goes live, use a draft: 1. [Create draft](/reference/api/createmonitorruleworkbenchdraft). It freezes a window of recent history. 2. [Update draft](/reference/api/updatemonitorruleworkbenchdraft) with the current `expectedDraftVersion`. Set a rule to `null`, or list it in `disabledRules`, to remove it. 3. [Replay draft](/reference/api/replaymonitorruleworkbench) to compare the incidents your current and proposed rules produce over that window. Nothing changes. 4. [Apply draft](/reference/api/applymonitorruleworkbenchdraft) with `confirm: true`, `expectedDraftVersion` and `expectedConfigurationVersion`. If either is stale, you get `signalsitter.precondition_failed`. Re-read and try again. [Cancel draft](/reference/api/cancelmonitorruleworkbenchdraft) closes a draft without touching the monitor. ### Handle incidents List a monitor's open incidents: ```bash curl --fail-with-body \ --header "Authorization: Bearer $SIGNALSITTER_API_KEY" \ "$SIGNALSITTER_API_BASE/v1/monitors/nightly-backup/incidents?state=open" ``` States are `open`, `recovering`, `recovered` and `resolved`. [List all incidents](/reference/api/listincidents) covers every monitor. - [Acknowledge](/reference/api/acknowledgemonitorincident) marks it seen without closing it. - [Annotate](/reference/api/annotatemonitorincident) adds a note to its timeline. - [Resolve](/reference/api/resolvemonitorincident) closes it. Each takes an optional `{"note": "..."}` body. Read what happened with [Get timeline](/reference/api/getmonitorincidenttimeline). Check notifications with [List deliveries](/reference/api/listmonitorincidentdeliveries), and send one again with [Redeliver](/reference/api/redelivermonitorincidentdelivery). ### Send notifications with callback endpoints A callback endpoint is a place alerts go, reusable across monitors: usually a webhook URL. Changing endpoints needs a `manage` credential. ```bash curl --fail-with-body \ --request POST \ --header "Authorization: Bearer $SIGNALSITTER_API_KEY" \ --header "Content-Type: application/json" \ --data '{"alias":"operations","url":"https://hooks.example.com/signalsitter"}' \ "$SIGNALSITTER_API_BASE/v1/callbacks" ``` Alerts can also reach people's phones and messengers through WhooshBang. Set `kind` to `whooshbang_subscriber` and `whooshbang.actorId` to reach one person, or to `whooshbang_group` to reach everyone in your organization. Each person connects their own phone or messenger in the [dashboard](/dashboard/alerts) first. See [Create endpoint](/reference/api/createcallbackendpoint) for the fields. - The URL must be public HTTPS. A host that resolves to a private or reserved address is refused with `signalsitter.callback_destination_rejected`. - The response includes the signing secret once. Store it to verify deliveries. - [Send test delivery](/reference/api/testcallbackendpoint) sends one signed `POST` and reports what your receiver answered. - [Set default endpoint](/reference/api/setorganizationcallbackdefault) with `{"endpointId": "..."}`, or `null` to clear it. - [Update endpoint](/reference/api/updatecallbackendpoint) with `"lifecycle": "disabled"` stops deliveries. `"active"` starts them again. - [Rotate signing secret](/reference/api/rotatecallbackendpointsecret) keeps the old secret valid for `overlapSeconds`, 0 to 900 (default 300). - [Remove endpoint](/reference/api/removecallbackendpoint) is permanent. A monitor's **callback binding** says which endpoint its alerts go to. Set it with [Set monitor binding](/reference/api/setmonitorcallbackbinding): | `binding` | Alerts go to | | --- | --- | | `{"kind":"organization_default"}` | The default endpoint | | `{"kind":"named","alias":"operations"}` | That endpoint | | `{"kind":"inline","url":"https://..."}` | A URL used by this monitor only | | `{"kind":"disabled"}` | Nowhere | An inline URL returns its own signing secret once. Add `"rotateSigningSecret": true` to replace a lost one. [Get monitor binding](/reference/api/getmonitorcallbackbinding) shows where alerts will go today, or why they can't: `no_organization_default`, `alias_not_found`, `endpoint_disabled` or `endpoint_removed`. ### Export your data ```bash curl --fail-with-body \ --header "Authorization: Bearer $SIGNALSITTER_API_KEY" \ --output export.ndjson \ "$SIGNALSITTER_API_BASE/v1/organization/export" ``` - The default is JSON Lines: one record per line, each with a `type`. It holds monitors, observations, incidents, endpoint metadata and usage. It never holds secrets. - `?format=csv` returns observations only, as a flat table. - If the stream stops, pass the `cursor` from the last checkpoint record as `?cursor=`. The last checkpoint has `complete: true`. - `?includeObservationBuckets=true` adds summarized history beyond 30 days on a paid plan. - Usage needs a credential with `usage:read`. Without it, an `omitted` record says so. :::danger[Deleting the organization] Only an owner can delete the organization, in the [dashboard](/dashboard/settings). No API credential can. Access ends at once, including export, so export first. ::: ## Request conventions - **JSON:** send bodies as `application/json`, up to 16 KiB. Gzip-compressed bodies (`Content-Encoding: gzip`) are accepted, and the limit applies after decompression. Other encodings get `415`. - **Pagination:** lists take `limit` (1 to 200, default 50) and return `nextCursor`. Pass it back as `cursor` for the next page. No `nextCursor` means you're on the last page. - **ETags:** reads return an `ETag`, such as `"configuration-3"` or `"callback-endpoint-3"`. Changes to monitors, endpoints, credentials and project names need it in `If-Match`. A stale tag gets `412`. A missing one gets `428`. - **Tracing:** every response has `X-Request-ID`. Send your own `X-Correlation-ID` and it comes back on the response. :::tip[Retrying safely] Add an `Idempotency-Key` header with a unique value to any write you might send twice. A repeat with the same key returns the first result instead of creating a second resource. Reusing the key for a different request returns `signalsitter.idempotency_conflict`. ::: ## Errors Errors are `application/problem+json`: ```json { "type": "/docs/problems/not_found", "title": "Resource not found", "status": 404, "detail": "The requested resource was not found.", "code": "signalsitter.not_found", "correlationId": "example-monitor-1", "retryable": false } ``` Validation failures add `fieldErrors`. Retryable problems add `retryAfterSeconds` and a `Retry-After` header. | Status | `code` | What to do | | --- | --- | --- | | 400 | `signalsitter.validation_failed` | Fix the fields named in `fieldErrors`. | | 401 | `signalsitter.authentication_required` | Send a valid credential. | | 403 | `signalsitter.permission_denied` | Use a credential with the right preset. | | 404 | `signalsitter.not_found` | Check the ID and project. Other organizations' resources also return this. | | 409 | `signalsitter.conflict` | Re-read the resource, or add `?jurisdiction=`. | | 409 | `signalsitter.idempotency_conflict` | Use a new key for a different request. | | 412 | `signalsitter.precondition_failed` | Re-read and send the new `ETag`. | | 413 | `signalsitter.payload_too_large` | Keep the body under 16 KiB. | | 415 | `signalsitter.unsupported_media_type` | Send `application/json`, plain or gzip. | | 428 | `signalsitter.precondition_required` | Add `If-Match`. | | 429 | `signalsitter.rate_limited` | Wait for `Retry-After`. | | 503 | `signalsitter.temporarily_unavailable` | Wait for `Retry-After`, then retry. | Every code has its own page, with what to do: see [error codes](/problems). Retry only when `retryable` is `true`, after `Retry-After`. For a write, retry with the same `Idempotency-Key` you sent the first time. Never mint a new key for a retry. ## Browser use (CORS) The API allows credentialed browser requests only from the SignalSitter dashboard. Call it from your server, not from a browser page. --- Source: https://docs.signalsitter.com/guides/mcp # MCP Connect an MCP client to SignalSitter and your agent can create monitors, read incidents and manage callbacks. - **Endpoint:** `https://api.signalsitter.com/mcp` - **Transport:** Streamable HTTP - **Authentication:** `Authorization: Bearer $SIGNALSITTER_API_KEY` The credential decides which organization and project the agent works in. No tool takes an organization or project argument. ## Connect Create a credential in the [dashboard](https://app.signalsitter.com). Pick the narrowest preset that covers the job: `read` to look things up, `manage` to create and change monitors, callbacks and credentials. The [Agents guide](/guides/agents#credentials) lists every preset. Keep the key in an environment variable or your client's secret prompt. Never put it in a committed file, a URL or a log. ```bash export SIGNALSITTER_API_KEY='sig_v1_...' ``` :::tip[Test it first] Right after you create or rotate a credential, press **Test MCP connection** in the dashboard. It only works while the new secret is still on screen. ::: ### TypeScript SDK ```bash npm install @modelcontextprotocol/client@2.0.0 ``` ```ts import { Client, StreamableHTTPClientTransport, } from "@modelcontextprotocol/client"; const client = new Client( { name: "my-signalsitter-client", version: "1.0.0" }, { versionNegotiation: { mode: "auto" } } ); const transport = new StreamableHTTPClientTransport( new URL("https://api.signalsitter.com/mcp"), { authProvider: { token: async () => process.env.SIGNALSITTER_API_KEY!, }, } ); await client.connect(transport); const { tools } = await client.listTools(); const organization = await client.callTool({ name: "signalsitter_get_organization", }); ``` ### Codex Add this to `config.toml`: ```toml [mcp_servers.signalsitter] url = "https://api.signalsitter.com/mcp" bearer_token_env_var = "SIGNALSITTER_API_KEY" ``` ### Claude Code Add this to `.mcp.json`. Claude Code fills in the variable from your environment: ```json { "mcpServers": { "signalsitter": { "type": "http", "url": "https://api.signalsitter.com/mcp", "headers": { "Authorization": "Bearer ${SIGNALSITTER_API_KEY}" } } } } ``` ### VS Code Add this to `.vscode/mcp.json`. VS Code asks for the key in a masked prompt: ```json { "inputs": [ { "description": "SignalSitter API credential", "id": "signalsitter_api_key", "password": true, "type": "promptString" } ], "servers": { "signalsitter": { "type": "http", "url": "https://api.signalsitter.com/mcp", "headers": { "Authorization": "Bearer ${input:signalsitter_api_key}" } } } } ``` ## Current tools Every tool production offers today: | Tool | Purpose | | --- | --- | | `signalsitter_get_organization` | Read the organization and MCP principal derived from the verified API credential. The organization cannot be selected in tool input. | | `signalsitter_get_entitlements` | Read the verified organization's versioned plan, enforced entitlements, current allotment usage, service access, and lease freshness. The organization cannot be selected in tool input. | | `signalsitter_get_usage` | Read bounded usage totals, projection freshness, and E6-01 entitlement alignment for the verified organization. Usage is eventually reconciled and is not exact global quota enforcement. The organization cannot be selected in tool input. | | `signalsitter_get_billing` | Read the verified organization's plan, subscription status, chargeback state, and payment-grace boundary. Read-only: an agent can explain why service is degraded and cannot start a checkout, open a billing portal, or change a plan. Carries no payment method, amount, invoice, or provider identifier, and the organization cannot be selected in tool input. | | `signalsitter_list_billing_allotment_transitions` | List the verified organization's customer-readable monitor suspensions and releases caused by plan transitions, newest transition first. The organization cannot be selected in tool input, and provider or operator audit identifiers are never returned. | | `signalsitter_get_default_jurisdiction` | Read where this organization's monitors are created when a create names no jurisdiction, and which jurisdictions this deployment can actually serve. Read this before creating a monitor and offer only what it reports as available: the contract vocabulary is wider than any deployment routes, so a create naming an unrouted jurisdiction is refused rather than stranded. A stored default outside the available set is a real state and is reported rather than corrected. | | `signalsitter_create_monitor` | Create a monitor and return the jurisdiction it was created in and the URL to publish its beats to. Important action: read the default jurisdiction and the requested cadence, then set confirm to true. Omit jurisdiction to use the organization's default; naming one applies to this monitor only. Where a monitor lives is written once at creation and can never be changed afterwards, and only jurisdictions this deployment routes are accepted. The idempotency key is the monitor's identity rather than a retry nonce: the same key always names the same monitor, and a different key creates a second one. | | `signalsitter_get_monitor` | Read one authoritative monitor by its immutable public monitor ID, including the cadence, monitor-allowance enforcement, placement metadata, and latest accepted observation. The optional jurisdiction disambiguates the rare case where this organization owns that ID in more than one placement. Organization identity comes only from the verified API credential. | | `signalsitter_update_monitor_configuration` | Change one monitor's expected interval, grace period, name, measurement definitions, or flapping policy. Destructive action: read the monitor first, then send its current configuration version as expectedConfigurationVersion and set confirm to true. A stale version is refused rather than applied. Shortening the interval can make the next deadline immediately overdue. | | `signalsitter_control_monitor_lifecycle` | Pause, resume, archive, or restore one monitor, or open and close a maintenance window. Destructive action: pausing and archiving stop missing-beat detection, so read the monitor first, then send its current configuration version as expectedConfigurationVersion and set confirm to true. Archiving also refuses further beats and keeps history for the retention period. A maintenance window suppresses new incidents while still accepting beats. | | `signalsitter_delete_monitor` | Irreversibly delete one monitor, permanently consume its key, terminate open incidents, abandon pending callback work, and cancel scheduled work. Destructive action: read the monitor first, then send its current configuration version as expectedConfigurationVersion and set confirm to true. A stale version is refused rather than applied. | | `signalsitter_list_projects` | List the projects of the verified organization. A project holds one client's monitors, credentials and callback endpoints, keeping them separate from every other client in the same organization. This is the one project call answered from the organization rather than from one project, so it works whichever project the credential was issued into. Monitors, incidents and endpoints returned by every other tool belong to that credential's own project, which this list names. | | `signalsitter_get_project` | Read the project this credential acts in, including its name and current version. It takes no arguments: a credential's project is fixed when the credential is issued, so there is nothing to name. Read the version here before renaming. | | `signalsitter_create_project` | Create a project in the verified organization, to hold one client's monitors, credentials and callback endpoints apart from every other client's. Important secret action: inspect the name, then set confirm to true. The name must be unique within the organization, compared ignoring case and surrounding or repeated spaces; a name already taken is refused rather than duplicated, which is also what a retry of a call that already succeeded will see. This credential keeps acting in its own project afterwards — a credential's project is fixed when it is issued — so give the new project a credential of its own before working in it. | | `signalsitter_rename_project` | Rename the project this credential acts in. Important secret action: inspect the new name, then set confirm to true. It takes no project argument, because a credential's project is fixed when the credential is issued. The identifier does not change, so nothing that refers to the project breaks. Supply expectedVersion from a read to be refused rather than overwrite a rename somebody else made in the meantime. | | `signalsitter_control_project_lifecycle` | Archive or restore the project this credential acts in. Project identity comes only from the credential. Destructive administrative action: read the project, supply its expectedVersion and an idempotency key, then set confirm to true. The last active project cannot be archived. | | `signalsitter_delete_project` | Permanently erase the project this credential acts in and everything below it. Project identity comes only from the credential. Irreversible administrative action: inspect the project and deletion counts, supply its expectedVersion and an idempotency key, then set confirm to true. Cleanup is bounded and the receipt reports progress; the last active project cannot be deleted. | | `signalsitter_list_callback_endpoints` | List the reusable callback endpoints of the verified organization. Signing secrets are never returned by a read. | | `signalsitter_get_callback_endpoint` | Read one callback endpoint, including whether it is active and therefore receiving deliveries. | | `signalsitter_create_callback_endpoint` | Create a reusable callback endpoint for the verified organization. Important secret action: inspect the destination, then set confirm to true. Choose a kind: a webhook posts a signed request to a URL you operate, a whooshbang_subscriber destination notifies one person on this organization through the messenger they connected, and a whooshbang_group destination notifies everybody on the organization who has connected one. Neither notification kind asks for a credential; this product holds the account. A webhook returns its signing secret once and an idempotent replay never reveals it again; a notification destination returns none, because this product issues it no secret. The endpoint is active immediately and can be selected by a monitor or made the organization default straight away. | | `signalsitter_update_callback_endpoint` | Change a callback endpoint's alias, destination, or lifecycle using its current generation. Externally visible action: read the endpoint, then set confirm to true. Change a webhook's destination with url, a whooshbang_subscriber destination's with whooshbang, and a whooshbang_group destination's with whooshbangGroup, naming only the members you are replacing; an endpoint never changes kind. Set lifecycle to disabled to stop deliveries and to active to start them again; a changed destination takes effect on the next delivery. | | `signalsitter_disable_callback_endpoint` | Switch a callback endpoint off using its current generation. Destructive action: read the endpoint, then set confirm to true. Monitors bound to it stop receiving deliveries and it cannot remain the organization default, but nothing is destroyed: switch it back on with signalsitter_update_callback_endpoint and lifecycle active. To destroy it, use signalsitter_remove_callback_endpoint. | | `signalsitter_remove_callback_endpoint` | Permanently remove a callback endpoint using its current generation. Irreversible destructive action: read the endpoint, confirm with the customer that they want it destroyed rather than switched off, then set confirm to true. The endpoint, its signing secret, and its idempotency history are deleted, its alias becomes reusable, the organization default is cleared if it pointed here, and monitors bound to it report that the endpoint was removed. Use signalsitter_disable_callback_endpoint instead when deliveries should only pause. | | `signalsitter_rotate_callback_secret` | Replace a webhook callback endpoint's signing secret using its current generation. Destructive secret action: read the endpoint, then set confirm to true. The replacement is returned once and the previous secret keeps verifying signatures for the bounded overlap you request. A notification destination has no signing secret this product issued and is refused. | | `signalsitter_test_callback_endpoint` | Send one test delivery to the endpoint and report what came back. Externally visible action, so set confirm to true: for a webhook this makes a real signed HTTPS request to the customer destination, and for a WhooshBang destination it sends a real WhooshBang message that notifies a real person on their own device. The message says it is a test. The result is a diagnostic only: it is not stored on the endpoint and it neither allows nor blocks any delivery. | | `signalsitter_get_callback_default` | Read the callback endpoint that monitors inherit when their binding selects the organization default. | | `signalsitter_set_callback_default` | Select or clear the organization default callback endpoint. Destructive action: this redirects every monitor that inherits the default, so read the current default first and then set confirm to true. Pass a null endpointId to clear it. | | `signalsitter_get_monitor_callback` | Read one monitor's callback binding and what it currently resolves to, including why an unresolved binding cannot deliver. | | `signalsitter_set_monitor_callback` | Bind one monitor to the organization default, a named shared endpoint, its own inline destination, or nothing. Destructive action: read the current binding, then set confirm to true. An inline destination belongs to this monitor alone and can never change a shared or default endpoint. | | `signalsitter_list_credentials` | List bounded API credential metadata for the verified organization using an opaque cursor. Secrets are never returned. | | `signalsitter_get_credential` | Read API credential metadata by opaque public ID within the verified organization. Secrets are never returned. | | `signalsitter_create_credential` | Issue an API credential for the verified organization. Important secret action: inspect the requested preset, then set confirm to true. A new secret is returned once; an idempotent replay never reveals it again. | | `signalsitter_rotate_credential` | Replace an API credential secret using its current generation and an idempotency key. Destructive secret action: inspect current metadata, then set confirm to true. The replacement secret is returned once. | | `signalsitter_revoke_credential` | Revoke an API credential using its current generation. Destructive action: inspect current metadata, then set confirm to true. Revocation prevents future authentication. | | `signalsitter_list_monitors` | List this organization's monitors newest first using an opaque cursor, optionally including archived ones. Organization identity comes only from the verified API credential. | | `signalsitter_list_monitor_observations` | List one monitor's received observations newest first using an opaque cursor, optionally bounded by a time window. Organization identity comes only from the verified API credential. | | `signalsitter_read_monitor_observation_series` | Read one monitor's observation series over an exact time window, which is the shape a numeric diagnosis reads. Organization identity comes only from the verified API credential. | | `signalsitter_list_monitor_changes` | List what changed on one monitor newest first using an opaque cursor, with each change attributed to who made it. Organization identity comes only from the verified API credential. | | `signalsitter_get_incident` | Read one incident on one monitor. Organization identity comes only from the verified API credential. | | `signalsitter_get_monitor_activation` | Read whether one monitor has received its first beat and become active, which is how to tell a created monitor from a working one. Organization identity comes only from the verified API credential. | | `signalsitter_test_monitor_beat` | Send one monitor a test beat and read what it made of it. Externally visible action: read the monitor, then set confirm to true. It writes an observation the monitor acts on, so a monitor already in an incident may recover. | | `signalsitter_set_default_jurisdiction` | Set the jurisdiction every monitor created afterwards is routed to. Important action: read the current default, then set confirm to true. Existing monitors do not move. | | `signalsitter_get_billing_cancellation_impact` | Read what cancelling the current plan would cost this organization, in monitors and retained history. Organization identity comes only from the verified API credential. | | `signalsitter_list_incidents` | List incidents for one monitor newest first using an opaque cursor. Organization identity comes only from the verified API credential. | | `signalsitter_get_incident_timeline` | Read the immutable timeline of one incident in occurrence order. Timeline events are append-only and are never rewritten. | | `signalsitter_list_incident_deliveries` | Read every callback delivery owed for one incident: its state, how many attempts remain, when the next is due, what the last attempt saw, and what to do about it. Requires both incident and callback read entitlement. | | `signalsitter_redeliver_incident_callback` | Ask for one more delivery attempt against a settled callback delivery. Operator action: read the delivery, confirm it is redeliverable, then set confirm to true. This sends a signed request to the customer's endpoint. Grants exactly one attempt; repeating the call with the same idempotency key replays the original grant rather than granting another. | | `signalsitter_create_rule_workbench_draft` | Create a versioned rule draft over a bounded frozen window of retained monitor history. This does not change live configuration; inspect the target monitor, then set confirm to true. | | `signalsitter_get_rule_workbench_draft` | Read one versioned rule workbench draft. Organization identity comes only from the verified API credential. | | `signalsitter_update_rule_workbench_draft` | Update an open rule proposal only when its draft version still matches. This changes only the draft, never live configuration; inspect the current draft, then set confirm to true. | | `signalsitter_replay_rule_workbench` | Replay active and proposed rules chronologically over the draft's frozen retained history. Returns bounded graph, episode-diff, sampling, and deterministic cost evidence and writes nothing. | | `signalsitter_apply_rule_workbench_draft` | Apply a replayed rule proposal to live monitor configuration. Destructive action: inspect the replay, then provide matching draft and configuration versions and set confirm to true; stale versions are refused. | | `signalsitter_cancel_rule_workbench_draft` | Cancel an open rule draft at its expected draft version. This discards only draft work and never changes live monitor configuration; inspect the draft, then set confirm to true. | | `signalsitter_acknowledge_incident` | Acknowledge an incident without closing it. Operator action: read the incident, then set confirm to true. Repeating the call with the same idempotency key replays the original acknowledgement. | | `signalsitter_annotate_incident` | Append an operator annotation to an incident timeline. Operator action: read the incident, then set confirm to true. The annotation is immutable and an idempotency key is required so a retry cannot duplicate it. | | `signalsitter_resolve_incident` | Resolve an incident and close its violation family. Destructive action: read the incident, then set confirm to true. A resolved incident cannot be reopened; a later violation opens a new incident. | ## What agents can't do - **Delete the organization.** Do it in the dashboard. - **Export all your data.** Use the [REST export](/reference/api/exportorganization). - **Change the default jurisdiction.** Do it in the dashboard Settings, or with [REST](/reference/api/setorganizationdefaultjurisdiction). - **Act in another project.** Use a credential issued in that project. A project an agent creates gets its first key in the dashboard. - **Set or rotate a monitor's inline callback URL.** Use [REST](/guides/rest) or a `manage` publish credential. MCP can still bind a monitor to a named endpoint, the default, or nothing. - **Read a secret twice.** Secrets appear once, in the result that created them. ## Important actions and secrets - **Confirm changes.** Tools that create, change or delete something need `confirm: true`. Without it you get `signalsitter.confirmation_required` and nothing changes. Read the current state before you confirm. - **Send the version you read.** Rotating or revoking a credential needs `expectedGeneration`. Deleting a monitor needs `expectedConfigurationVersion`. Applying a rule draft needs the draft and configuration versions. A stale version returns `signalsitter.precondition_failed`. - **Save secrets immediately.** Creating or rotating a credential or a callback endpoint's signing secret returns the secret once. Lists, reads and replays never show it again. - **Pick the jurisdiction once.** A monitor's jurisdiction can never change. Call `signalsitter_get_default_jurisdiction` first and offer only what its `available` list names. - **Hand over the publish URL.** `signalsitter_create_monitor` returns `publishUrl`. Give it to the job you're monitoring so it can send its first beat. - **Deleting is permanent.** A deleted monitor's ID can't be reused. - **Some tools send real requests.** `signalsitter_test_callback_endpoint` and `signalsitter_redeliver_incident_callback` call your endpoint over HTTPS. ```ts await client.callTool({ name: "signalsitter_create_monitor", arguments: { confirm: true, intervalSeconds: 86400, name: "Nightly backup", }, }); ``` Leave out `callback` and the monitor uses your organization's default endpoint. Send `{ "kind": "disabled" }` to turn alerts off. If one monitor ID exists in more than one jurisdiction, monitor tools return `signalsitter.conflict`. Call again with `jurisdiction` set, for example `"eu"`. :::tip[Retrying safely] Add an `idempotencyKey` with a unique value when a call might run twice. A repeat with the same key returns the first result instead of acting again. Reusing a key for a different request returns `signalsitter.idempotency_conflict`. ::: ## Results, refusals and limits Every call returns `{ "ok": true, "data": ... }` or an error: ```json { "ok": false, "error": { "code": "signalsitter.permission_denied", "message": "The verified API credential cannot perform this operation.", "correlationId": "corr_...", "requestId": "req_...", "retryable": false } } ``` - Error codes are stable. Branch on `code`, not `message`. - Retryable errors include `retryAfterSeconds`. Wait that long, then retry. - Another organization's IDs return `signalsitter.not_found`, the same as an ID that doesn't exist. - Requests are UTF-8 JSON, up to 16 KiB. - Each tool call has 10 seconds to finish. - Structured results are capped at 192 KiB, and a whole response at 512 KiB. - Requests from a browser page are refused. Connect from a server, desktop client or agent. - Authentication is API keys only. There's no OAuth sign-in. --- Source: https://docs.signalsitter.com/dashboard/get-started # Get started in the dashboard Create a monitor, copy its credential and send your first beat from [the dashboard](https://app.signalsitter.com). No API calls needed. ## Sign in 1. Open [app.signalsitter.com](https://app.signalsitter.com) and press **Sign in**. 2. Sign in, or create an account from the same window. ## Pick your organization Everything in SignalSitter belongs to an organization. Personal accounts aren't available. - If you belong to several, press **Continue with** and the organization's name. - Switch or create organizations from the organization menu in the header. ## Projects Every organization starts with one project, **General**. Projects keep monitors and credentials apart, for example one per client. - Create one under **Settings** > **General** > **Projects**: enter a **Project name** and press **Create project**. - With two or more active projects, a **Project** picker appears in the header. The monitors, incidents and credentials you see belong to the selected project. ## Create your first monitor 1. Go to **Monitors** and press **Create monitor**. 2. Enter a **Monitor name**, up to 120 characters. 3. Under **Missing-beat alerts**, pick one: - **Learn it from my beats**: send beats as usual. Once a few arrive at a steady rate, that rate becomes the cadence and alerting starts. - **I'll set it myself**: enter **Interval seconds** (60 or more) and **Grace seconds**. - **Don't watch for silence**: beats and rules still run. Nothing alerts when the beats stop. 4. Optional: choose a **Callback destination**. See [Alerts](/dashboard/alerts). 5. Check **Where this monitor will live**. You can't change it later. 6. Press **Create monitor**. ![The Create a monitor page with an empty Essential setup form: Monitor name, Missing-beat alerts set to Learn it from my beats, Interval seconds 300, Grace seconds 60, Callback destination No callback, and Where this monitor will live set to European Union](/images/create-monitor.png) ## Send the first beat 1. Copy the **One-time publish credential**. It's shown once. Put it in your service's secret manager as `SIGNALSITTER_PUBLISH_CREDENTIAL`. 2. Press **I have stored it, hide it permanently**. 3. Under **Send the first live beat**, pick curl, JavaScript, Python, n8n, Make or **Agent instruction**, then press **Copy this example**. 4. Run it from the system that does the job. The page waits for the beat. When it lands you'll see **Monitor is live**. Press **Open monitor**. ![The Monitor is live receipt after the first beat: server accepted it just now, missing-beat alerts are learning the cadence at 1 of 5 beats, with Validate a test beat, Send a test delivery and Open monitor buttons, and a note that the one-time publish credential has been hidden](/images/monitor-is-live.png) :::tip[Retrying safely] The examples send an `Idempotency-Key` header. Replace `UNIQUE_RUN_ID` with an ID for that run, so a beat sent twice is recorded once. It's optional; delete the header if you don't need it. ::: - **Validate a test beat** checks your setup without recording a beat or opening an incident. - The page stops checking after five minutes. Press **Check again and resume automatic checks** to pick up again. ## Next - [Monitors](/dashboard/monitors): statuses, history and settings. - [Rules](/dashboard/rules): alert when a number crosses a limit. - [Publishing heartbeats](/guides/publish): every header and limit. --- Source: https://docs.signalsitter.com/dashboard/monitors # Monitors **Monitors** is the first screen you see. It lists every monitor in the selected project with its status, last beat, next expected beat and any active incident. ![The Monitors list showing seven monitors with Incident, Late, Healthy and Paused statuses, each with its last beat, next expected beat, active incident and a Pause or Resume action](/images/monitor-list.png) ## Statuses | Status | What it means | | --- | --- | | **Healthy** | Beats are arriving on time. | | **Late** | The deadline passed without a beat. | | **Incident** | An incident is open or recovering. Open it from **Active incident**. | | **Pending** | Waiting for the first beat, or still learning the cadence. | | **Heartbeat disabled** | Not watching for silence. Rules still run. | | **Maintenance** | Inside a maintenance window. | | **Paused**, **Archived** | Nothing is expected of the monitor. | | **Unknown** | The deadline couldn't be read. | An **Over allowance** badge means the monitor is beyond your plan's allowance. Its beats are refused until you upgrade or remove another monitor. Tick **Show archived monitors** to include archived ones. ## A monitor's tabs - **Overview**: last beat, next beat expected, next deadline, cadence, and a chart of recent numeric readings. - **History**: the chart plus **Recent observations**, every beat with its measurements. Pick a **Recent window** from **Last 6 hours** to **Last 365 days**. - **Incidents**: this monitor's incidents, newest first. - **Alert Rules**: numeric limits. See [Rules](/dashboard/rules). - **Settings**: **Configuration**, **Callback destination**, and **Changes**, a record of who changed what. - **Publishing**: copyable curl and TypeScript examples for sending a beat. ![The Overview tab of the healthy Queue worker monitor: last beat 2 minutes ago on time, next beat and deadline, a 5-minute cadence with 1-minute grace, and a chart of the last 24 hours of queue_depth readings](/images/monitor-overview.png) ## Change the configuration 1. Open **Settings** and press **Edit**. 2. Change **Name**, **Missing-beat alerts**, **Interval seconds** (60 to 31,536,000) or **Grace seconds** (up to 604,800; below 60 counts as 60). 3. Press **Save changes**. Your plan may set a higher minimum interval. The form tells you when it does. If someone changed the monitor while you were editing, nothing is saved. Press **Refresh to the latest state** and make your change again. ## Pause, maintenance and archive The buttons sit at the top of the monitor. Each one asks you to confirm. | Button | What happens | | --- | --- | | **Pause** | Beats are still accepted. No incidents open until you press **Resume**. | | **Enter maintenance** | Set **Starts at** and **Ends at**. Missed beats don't open incidents during the window. It lasts at most 30 days and ends on its own. **Exit maintenance** ends it now. | | **Archive** | The monitor stops accepting beats. History is kept. Press **Restore** before the **Restorable until** date to bring it back. | **Pause** and **Resume** are also in the list's **Actions** column. ## Delete a monitor The dashboard doesn't delete monitors. Archive it, or use [Delete monitor](/reference/api/deletemonitor) in the API. --- Source: https://docs.signalsitter.com/dashboard/rules # Rules A rule opens an incident when a number in your beats crosses a limit you set. Draft it in a monitor's **Alert Rules** tab, check it against your history, then apply it. You need at least one beat that carries a number first. See [Publishing heartbeats](/guides/publish) for sending measurements. ## Add a rule 1. Open the monitor, go to **Alert Rules** and press **Add an alert**. 2. Under **Published measurement key**, choose a measurement this monitor has sent. The graph fills with its recent history. 3. Pick the **How values behave** option that fits, such as **Measured level** or **Count per beat**. 4. From **Add a direct rule**, choose a rule, such as **Maximum**. 5. Enter the limit, such as **Highest allowed value**. 6. Set the **Alert conditions** (below), then press **Save rule**. The rule is marked **Not applied yet**. 7. Read the preview, then press **Apply alert changes**. ![The rule workbench for queue_depth: the active Maximum limit of 100 and a proposed limit of 50 drawn over a day of readings, the Maximum rule marked Not applied yet, the active and proposed rule summaries, and badges counting 4 added incident episodes](/images/rule-workbench.png) ## Rule types | Rule | Fires when | | --- | --- | | **Maximum** | A reading is above the limit. | | **Minimum** | A reading is below the limit. | | **Must never be zero** | A reading is zero. | | **Must stay at zero** | A reading is anything but zero. | | **Absolute change** | A reading differs from the one before by more than the limit. | | **Percentage change** | Same, as a percentage. Enter 50 for 50%. | | **Ratio maximum**, **Ratio minimum** | This measurement divided by another (**Compare with measurement**) goes above or below the limit. | ## Alert conditions - **First occurrence**: the severity the first time a reading breaks the rule. - **Sustained occurrences**: the severity once the breach continues. - **Consider it sustained after**: **A number of violating observations** or **A length of time**. | Severity | Effect | | --- | --- | | **None** | Records the violation. No incident. | | **Information** | Records it and marks it for review. | | **Warning**, **Critical** | Opens an incident at that severity. | Under **When this alert fires**, **Record violations without opening an incident** lets you watch a rule before trusting it. **Measurement and data settings** holds **When this measurement is missing** and **Unit (optional)**. The unit is a label. It doesn't convert values. ## Preview against history The graph replays this monitor's recent readings as a solid line. The active limit is drawn in blue dashes and your proposed limit in orange dashes. Badges below the replay count incident episodes added, removed, changed and unchanged. The preview refreshes as you edit. **Apply alert changes** waits for it. ## Change or remove a rule 1. Press **Edit** on the measurement's card. 2. On a rule, press **Edit**, **Disable** (or **Enable**) or **Delete**. 3. Press **Apply alert changes**. **Cancel** discards everything. A monitor can have alerts on up to 16 measurements. --- Source: https://docs.signalsitter.com/dashboard/incidents # Incidents An incident opens when a monitor misses a beat or breaks a rule. **Incidents** lists them across every monitor, newest first. Each monitor's **Incidents** tab shows its own. ## The incidents list - Filter with **State**: **Every state**, **Open**, **Recovering**, **Recovered** or **Resolved**. - Tick **Show archived incidents** to include incidents of archived monitors. - **Still open** marks an incident that hasn't closed. **Acknowledged** means someone owns it. | State | What it means | | --- | --- | | **Open** | The problem is happening. | | **Recovering** | Good beats are back. SignalSitter is confirming recovery. | | **Recovered** | Recovery was confirmed and the incident closed. | | **Resolved** | Someone closed it by hand. | ![The Incidents list showing an Open missing-beat incident on Orders export, a Recovering and Acknowledged one on ETL hourly, a Recovered one on Orders export and a Resolved and Acknowledged one on Legacy cron](/images/incidents-list.png) ## An incident's page Open an incident to see: - **What happened**: when it was detected, opened, confirmed and closed, plus the **Incident ID**. - **Recovery**: confirming beats received so far, and who acknowledged it. - **Incident evidence and feedback history**: for a rule, the reading that broke it. - **How this incident unfolded**: a chart of the measurement with the incident's events. Open **Event detail** to list every event in order. - **Callback deliveries**: every alert sent for this incident. ## Acknowledge, add a note, resolve The buttons sit at the top of the incident. Each opens a short confirmation. - **Acknowledge**: says someone owns the response. The state doesn't change and detection continues. Offered while the incident is open or recovering and nobody has acknowledged it. - **Add note**: adds a line to the incident's events for anyone reading later. - **Resolve**: closes the incident. Works on a recovered incident too. Notes are 1 to 1024 characters on one line. A note is required for **Add note** and optional for the other two. ![An open missing-beat incident on orders-export, not yet acknowledged, with Acknowledge, Resolve and Add note buttons, What happened and Recovery details, and a Callback deliveries section showing one delivery Retrying after four 503 responses, with the next retry in 1 minute and 4 attempts remaining](/images/incident-detail.png) ## Alert deliveries **Callback deliveries** shows each alert sent to your [callback endpoint](/dashboard/alerts) and its state: **Queued**, **In flight**, **Retrying**, **Delivered**, **Failed**, **Dead-lettered** or **Outcome unknown**. Each lists its attempts, with the response your endpoint gave. A retrying delivery shows **Next retry at** and **Attempts remaining**. To send one again: 1. Press **Request redelivery** on the delivery. 2. Press **Schedule the redelivery**. One more signed attempt is queued. Your receiver should ignore an event ID it has already handled. :::note **Request redelivery** needs the owner or admin role. Anyone in the organization can acknowledge, annotate and resolve. ::: --- Source: https://docs.signalsitter.com/dashboard/alerts # Alerts and notifications SignalSitter sends incident and recovery events to a callback endpoint. An endpoint is an HTTPS URL your own system runs, one person reached through WhooshBang, or everyone in your organization reached through WhooshBang. Set up the endpoint once, then choose which monitors use it. ## Add a callback endpoint 1. Go to **Settings** > **Callback endpoints**. 2. Enter an **Endpoint alias**: 1 to 64 letters, digits, hyphens or underscores, starting with a letter or digit. Monitors and publish headers use this name. 3. Under **Where should incidents go?**, choose **A URL your own system operates**. 4. Enter the **Destination URL**: a public HTTPS address with no username, password or `#fragment`. 5. Press **Create endpoint**. 6. Press **Copy the signing secret** and store it with your receiver. It's shown once. Then press **I have stored it, hide this secret**. Your receiver uses the secret to check that each delivery came from SignalSitter. See the [REST API guide](/guides/rest) for the delivery format. ![The Callback endpoints page: its introduction, the Add a callback endpoint form with three destination choices, and the Endpoints list, where ops-webhook is on and is the organization default and staging-hook is switched off](/images/callback-endpoints.png) ## Send alerts to people through WhooshBang WhooshBang delivers alerts to a person's own messenger. SignalSitter issues no signing secret for these endpoints and asks nobody for a credential. Each person connects their own messenger under **Notifications** (below). Anyone who hasn't connected one isn't reached. 1. Go to **Settings** > **Callback endpoints** and enter an **Endpoint alias**. 2. Under **Where should incidents go?**, choose one: - **A person, reached through WhooshBang**. In **Who to notify**, leave it blank to notify yourself, or enter another member's SignalSitter user identifier. They stop receiving alerts if they leave the organization. - **Everyone in this organization, reached through WhooshBang**. Whoever belongs to the organization when an incident happens is notified. 3. Leave **WhooshBang notifier** blank unless WhooshBang told you to use a particular notifier. 4. Press **Create endpoint**. ![The Add a callback endpoint form with A person, reached through WhooshBang selected, showing the Who to notify and WhooshBang notifier fields and the Create endpoint button](/images/callback-whooshbang.png) :::caution **Send a test delivery** on a WhooshBang endpoint sends a real message. On an **Everyone in this organization** endpoint, it reaches everyone who has connected a messenger, and nothing on it says it's a test. ::: ## Manage an endpoint | Button | What it does | | --- | --- | | **Send a test delivery** | Sends a test and shows the response status. Changes nothing. | | **Change destination** | Points the endpoint at a new URL. The signing secret stays the same. | | **Change WhooshBang destination** | Changes **Who to notify** or the notifier on a person endpoint. | | **Change WhooshBang notifier** | Changes the notifier on an **Everyone in this organization** endpoint. | | **Rotate secret** | Issues a new secret, shown once. The old one keeps working for a short overlap. URL endpoints only. | | **Make organization default** | Monitors that use the default deliver here. **Clear organization default** undoes it. | | **Switch off** | Stops deliveries without deleting anything. **Switch on** starts them again. A switched-off endpoint can't be the default. | | **Delete** | Permanent. Monitors still pointed at it report it was deleted. | :::note Creating, changing and deleting endpoints needs the owner or admin role. Everyone can see them. ::: ## Choose where a monitor's alerts go 1. Open the monitor and go to **Settings**. 2. Under **Callback destination**, pick one: - **Use organization default** - a named endpoint (any endpoint that's switched on) - **Do not send callbacks** 3. Press **Save callback destination**. **Effective destination now** shows where alerts will go. You can also pick a **Callback destination** when you create the monitor. ![A monitor's Callback destination section with ops-webhook selected, the stored choice Shared endpoint: ops-webhook, and Effective destination now showing ops-webhook and its URL](/images/monitor-callback-destination.png) ## Get your own alerts on your phone Connect your own messenger so WhooshBang endpoints can reach you. You don't need a WhooshBang account. 1. Go to **Settings** > **Notifications**. 2. Press the connect button for your messenger, such as **Connect Telegram**. 3. Finish connecting in the window that opens. If the settings stop working, press **Open notification settings again**. Nothing you've already connected changes. ![The Notifications settings page with its introduction and a Notification channels panel offering Connect Telegram, powered by WhooshBang](/images/notifications.png) ## Next - [Incidents](/dashboard/incidents): see every delivery and request a redelivery. --- Source: https://docs.signalsitter.com/dashboard/credentials # Credentials API credentials let your code and agents use SignalSitter. Manage them in **Settings** > **API credentials**. A credential belongs to the project that's selected when you issue it. :::note Credentials need the owner or admin role, even to view them. ::: ## Issue a credential 1. Enter a **Credential label**, so you know what uses it. 2. Choose a **Scope preset** (below). 3. Optional: set **Expires (optional)**. Leave it blank for no expiry. 4. Press **Issue credential**. 5. Press **Copy the API credential** and store it in your secret manager. It's shown once. 6. Tick the box confirming you've stored it, then press **Acknowledge and hide this secret**. ![The one-time API credential panel for a new deploy-pipeline credential showing an example secret, a Copy the API credential button, the acknowledgement checkbox and Acknowledge and hide this secret, above the Issue an API credential and Connect remote MCP cards](/images/credential-issued.png) ## Presets Pick the smallest preset that covers the job. | Preset | Can | | --- | --- | | **Read** | Read monitors, incidents, callbacks, observations and usage. Can't publish or change anything. | | **Write** | Publish beats to monitors that already exist. Reads nothing. | | **Read and write** | Read everything and publish beats. Can't create, edit, pause or delete a monitor. | | **Manage** | Everything above, plus create or change monitors, projects, incidents, callbacks and credentials. | Creating a monitor gives you its own publish credential, so you don't need one here for a single job. ## The credential list **Organization credentials** shows each credential's **Public prefix**, **Created**, **Last used**, **Expires** and **Granted scopes**. The full secret never appears again. ## Rotate a credential 1. Press **Rotate**, then **Rotate this credential**. 2. Copy the new secret. It's shown once. 3. Update your clients. The old secret keeps working for a short overlap. ## Revoke a credential Press **Revoke**, then **Revoke this credential**. It stops working at once. ## Connect an agent Use **Connect remote MCP** to set up an MCP client without pasting the secret into a file. 1. Copy the **Remote Streamable HTTP endpoint** with the copy button beside it. 2. Under **Credential whose grants you are configuring**, choose an active credential. 3. Pick a **Named client**: **Codex**, **Claude Code** or **VS Code**. 4. Copy the **Environment-backed configuration** with its copy button and add it to your client. 5. Set `SIGNALSITTER_API_KEY` to the credential in the client's private environment or secret prompt. The copied configuration contains no secret. ![The Connect remote MCP card with the remote MCP endpoint, the ops-agent Manage credential selected with its granted scopes, Claude Code chosen as the named client, and its environment-backed configuration](/images/connect-mcp.png) See [MCP](/guides/mcp) for what an agent can do once connected. --- Source: https://docs.signalsitter.com/dashboard/billing # Plan, usage and billing **Usage** shows what you've used and what your plan includes. **Settings** > **Billing** is where you upgrade, manage payment and see what cancelling would change. ## Usage Open **Usage** from the sidebar. - **Usage this reporting period**: beats, measurements, incidents, delivery attempts, REST API and MCP calls, and payload. - **Your plan**: each limit and how much of it you use, such as **Current active monitors**, **Minimum monitor interval**, **Measurements per observation**, retention and request rates. - A section for the selected project. Your organization total is what you're billed on. If the figures can't be loaded, press **Refresh usage** to try again. If you kept going over a request limit after a warning, ingest is paused and **Usage** shows **Ingest paused**. Nothing is deleted. Lower your request rate, then press **Resume ingest**. ![The Usage page on the Builder plan: usage totals for the reporting period, a General project section, and Your plan showing 12 of 25 active monitors and 2 of 5 callback endpoint slots in use, with the plan's included limits](/images/usage.png) :::note **Usage** needs the owner or admin role. ::: ## Upgrade 1. Go to **Settings** > **Billing**. 2. Under **Current plan**, press **Choose Builder**, **Choose Smart** or **Choose Scale**. 3. Pay on the payment provider's page. If creating a monitor would go past your plan, the form shows **See plans and upgrade**, which opens **Billing**. Compare plans in [Plans and limits](/guides/plans). ## Manage billing Press **Manage billing** to open the payment provider's portal. Change plan, update your card or cancel there. It's available once you have a subscription. If a payment fails, the status reads **Payment failed** and your plan keeps running until the date shown while the provider retries. ## Before you cancel **If you cancel** shows what ending your subscription would do to each monitor you have now. Nothing has happened yet. - **Plan after cancelling**, **Monitors kept**, **Monitors suspended** and **Monitors changed**. - For each affected monitor: **Suspended**, **Slower**, **Fewer measurements** or **Heartbeat only**. **Plan change history** lists every monitor a plan change suspended or released. ![The Billing page with an active Builder plan and a Manage billing button, and an If you cancel card showing the plan would drop to Free, keeping 1 monitor and suspending 11, each listed as Suspended](/images/billing.png) :::note Owners and admins can view **Billing**. Only an owner can upgrade, open **Manage billing** or cancel. ::: --- Source: https://docs.signalsitter.com/dashboard/settings # Settings **Settings** > **General** holds your projects, where new monitors are stored, and deleting the organization. The column beside it links to **Callback endpoints**, **API credentials** and **Billing**. ![The General settings page with the Projects card listing General and Client B, Data residency with European Union chosen as the location for new monitors, and the Delete this organization card](/images/settings-general.png) ## Projects - Create one: enter a **Project name** and press **Create project**. - **Archive** stops monitoring work for a project until you **Restore** it. - **Delete** erases the project with its monitors, credentials, callbacks, incidents and history. Type the project ID to confirm. You can't undo it. You can't archive or delete your last active project. :::note Archiving and deleting a project needs the owner or admin role. ::: ## Data residency Choose where new monitors store their history. 1. Under **Location for new monitors**, pick **No residency requirement** or **European Union**. 2. Press **Save location**. Existing monitors don't move. A monitor's location is fixed when you create it. You can pick a different one for a single monitor on the create form. :::note Changing the location needs the owner or admin role. ::: ## Export your data The dashboard has no export button. Use [Export data](/reference/api/exportorganization) in the API with an owner or admin credential. ## Delete the organization :::danger Deleting ends access at once. Sign-in, ingest, callbacks and every API credential stop. Export what you need first. ::: 1. Under **Delete this organization**, type the organization identifier shown above the box. 2. Optional: tick **Erase immediately, with no recovery period**. 3. Press **Delete organization**. | Choice | What happens | | --- | --- | | Default | Access ends now. Data is destroyed seven days later. Until then, support can reverse it. | | **Erase immediately** | Data is destroyed now. Nobody can recover it. | A paid subscription is cancelled. You won't be charged again, and the current period isn't refunded. Restoring the organization doesn't bring the subscription back. :::note Only an owner can delete the organization. ::: ## Color scheme The **Color scheme** control in the header switches between **Light**, **Dark** and **Match system**. --- Source: https://docs.signalsitter.com/reference/api # API reference Every operation, grouped by what it works on. Fields for learned anomaly detection, which SignalSitter doesn't offer, are left out of these pages. Each page's raw contract and the OpenAPI document still include them. [Download OpenAPI](/openapi.json). Authenticate as described in the [REST guide](/guides/rest). ## Heartbeats Send beats, and check a beat before it counts. - [Publish heartbeat](/reference/api/publishheartbeat): `POST /{monitor_key}` — Send a beat to tell SignalSitter your job ran. Put measurements in the body to check them against your limits. - [Test a beat](/reference/api/testmonitorbeat): `POST /v1/monitors/{monitorId}/test-beat` — Try a beat against a monitor without recording it. Use it to check your request and measurements before going live. ## Monitors Create, configure, pause and remove monitors, and see their change history. - [List monitors](/reference/api/listmonitors): `GET /v1/monitors` — List your monitors with their current status, so you can see which are healthy, late or in an incident. - [Create monitor](/reference/api/createmonitor): `POST /v1/monitors` — Create a monitor and set how often you expect beats. It's ready for its first beat straight away. - [Get monitor](/reference/api/getmonitordetail): `GET /v1/monitors/{monitorId}` — Get one monitor's settings, status and latest beat. - [Update configuration](/reference/api/updatemonitorconfiguration): `PATCH /v1/monitors/{monitorId}` — Change how a monitor works: how often beats are due, the grace period, its measurements and its incident settings. - [Change lifecycle](/reference/api/controlmonitorlifecycle): `POST /v1/monitors/{monitorId}/lifecycle` — Pause or resume a monitor, archive or restore it, or schedule a maintenance window when beats are expected to stop. - [Wait for first beat](/reference/api/getmonitoractivation): `GET /v1/monitors/{monitorId}/activation` — Check whether a new monitor has received its first beat, and when the next one is due. Use it to confirm a setup worked. - [List changes](/reference/api/listmonitorchanges): `GET /v1/monitors/{monitorId}/changes` — See the history of changes to a monitor's settings and status, newest first. - [Delete monitor](/reference/api/deletemonitor): `DELETE /v1/monitors/{monitorId}` — Delete a monitor for good. Its key can't be used again. ## Observations Read the beats a monitor received and chart its measurements. - [List observations](/reference/api/listmonitorobservations): `GET /v1/monitors/{monitorId}/observations` — List the beats a monitor has received, newest first, with any measurements they carried. - [Read series](/reference/api/readmonitorobservationseries): `GET /v1/monitors/{monitorId}/observation-series` — Get a measurement's values over time, grouped into time buckets, ready to chart. ## Rule workbench Draft limits for a monitor, test them against its history, then apply them. - [Create draft](/reference/api/createmonitorruleworkbenchdraft): `POST /v1/monitors/{monitorId}/rule-workbench/drafts` — Start drafting new limits for a monitor, tested against a snapshot of its recent history. - [Read draft](/reference/api/getmonitorruleworkbenchdraft): `POST /v1/monitors/{monitorId}/rule-workbench/drafts/read` — Get a draft and the limits it proposes. - [Update draft](/reference/api/updatemonitorruleworkbenchdraft): `POST /v1/monitors/{monitorId}/rule-workbench/drafts/update` — Change the limits in a draft. - [Replay draft](/reference/api/replaymonitorruleworkbench): `POST /v1/monitors/{monitorId}/rule-workbench/drafts/replay` — See which past readings would have broken your current limits and your proposed ones, before you apply anything. - [Apply draft](/reference/api/applymonitorruleworkbenchdraft): `POST /v1/monitors/{monitorId}/rule-workbench/drafts/apply` — Make a draft's limits live on the monitor. It's refused if the monitor or the draft changed since you last read them. - [Cancel draft](/reference/api/cancelmonitorruleworkbenchdraft): `POST /v1/monitors/{monitorId}/rule-workbench/drafts/cancel` — Throw a draft away without changing the monitor. ## Incidents Find incidents, acknowledge, annotate and resolve them, and check their alerts. - [List all incidents](/reference/api/listincidents): `GET /v1/incidents` — List incidents across all your monitors, newest first. - [List monitor incidents](/reference/api/listmonitorincidents): `GET /v1/monitors/{monitorId}/incidents` — List one monitor's incidents, newest first. - [Get incident](/reference/api/getmonitorincident): `GET /v1/monitors/{monitorId}/incidents/{incidentId}` — Get one incident and where it stands now. - [Get timeline](/reference/api/getmonitorincidenttimeline): `GET /v1/monitors/{monitorId}/incidents/{incidentId}/timeline` — See everything that happened during an incident, in order. - [Acknowledge incident](/reference/api/acknowledgemonitorincident): `POST /v1/monitors/{monitorId}/incidents/{incidentId}/acknowledge` — Let others know you're on it. The incident stays open. - [Annotate incident](/reference/api/annotatemonitorincident): `POST /v1/monitors/{monitorId}/incidents/{incidentId}/annotations` — Add a note to an incident, such as what you found or did. Notes can't be edited later. - [Resolve incident](/reference/api/resolvemonitorincident): `POST /v1/monitors/{monitorId}/incidents/{incidentId}/resolve` — Close an incident yourself. - [List deliveries](/reference/api/listmonitorincidentdeliveries): `GET /v1/monitors/{monitorId}/incidents/{incidentId}/deliveries` — See every alert sent for an incident, and whether each one reached its destination. - [Redeliver](/reference/api/redelivermonitorincidentdelivery): `POST /v1/monitors/{monitorId}/incidents/{incidentId}/deliveries/{intentId}/redeliver` — Send an alert again, for example after fixing your webhook. ## Callbacks Manage where alerts go, for each monitor and by default. - [List endpoints](/reference/api/listcallbackendpoints): `GET /v1/callbacks` — List the places your alerts can go: your webhooks and WhooshBang destinations. - [Create endpoint](/reference/api/createcallbackendpoint): `POST /v1/callbacks` — Add a place to send alerts: a webhook URL, a person through WhooshBang, or everyone in your organization through WhooshBang. A webhook's signing secret is shown once, so save it. - [Get endpoint](/reference/api/getcallbackendpoint): `GET /v1/callbacks/{endpointId}` — Get one alert destination. - [Update endpoint](/reference/api/updatecallbackendpoint): `PATCH /v1/callbacks/{endpointId}` — Rename an alert destination, change where it points, or switch it off and on. - [Rotate signing secret](/reference/api/rotatecallbackendpointsecret): `POST /v1/callbacks/{endpointId}/rotate` — Get a new signing secret for a webhook. The old secret keeps working for a short overlap while you switch over. - [Send test delivery](/reference/api/testcallbackendpoint): `POST /v1/callbacks/{endpointId}/test` — Send a test alert to a destination and see what it answered. - [Remove endpoint](/reference/api/removecallbackendpoint): `DELETE /v1/callbacks/{endpointId}` — Delete an alert destination for good. To stop alerts for a while, switch it off instead. - [Get monitor binding](/reference/api/getmonitorcallbackbinding): `GET /v1/monitors/{monitorId}/callback` — See where a monitor's alerts go: your default destination, a specific one, a URL of its own, or nowhere. - [Set monitor binding](/reference/api/setmonitorcallbackbinding): `PUT /v1/monitors/{monitorId}/callback` — Choose where a monitor's alerts go: your default destination, a specific one, a URL of its own, or nowhere. - [Get default endpoint](/reference/api/getorganizationcallbackdefault): `GET /v1/organization/callback-default` — See which destination monitors use when they're set to the default. - [Set default endpoint](/reference/api/setorganizationcallbackdefault): `PUT /v1/organization/callback-default` — Choose the destination monitors use when they're set to the default, or clear it. ## Projects Group monitors into projects. - [List projects](/reference/api/listprojects): `GET /v1/projects` — List your organization's projects. - [Create project](/reference/api/createproject): `POST /v1/projects` — Create a project to group monitors. - [Get project](/reference/api/getproject): `GET /v1/projects/{projectId}` — Get one project. - [Rename project](/reference/api/renameproject): `PATCH /v1/projects/{projectId}` — Rename a project. Its ID stays the same. - [Archive or restore](/reference/api/controlprojectlifecycle): `POST /v1/projects/{projectId}/lifecycle` — Archive a project you no longer use, or restore it. - [Delete project](/reference/api/deleteproject): `DELETE /v1/projects/{projectId}` — Delete a project and everything in it, for good. ## API credentials Create, rotate and revoke the credentials your scripts and agents use. - [List credentials](/reference/api/listapicredentials): `GET /v1/credentials` — List your API credentials. Secrets are never shown after creation. - [Create credential](/reference/api/createapicredential): `POST /v1/credentials` — Create an API credential for a script, service or agent. Its secret is shown once, so store it safely. - [Get credential](/reference/api/getapicredential): `GET /v1/credentials/{credentialId}` — Get one credential's details. The secret isn't included. - [Rotate credential](/reference/api/rotateapicredential): `POST /v1/credentials/{credentialId}/rotate` — Replace a credential's secret. The new secret is shown once. - [Revoke credential](/reference/api/revokeapicredential): `DELETE /v1/credentials/{credentialId}` — Revoke a credential so it stops working. ## Organization See your organization, plan and usage, choose a default region, and export your data. - [Get organization](/reference/api/getorganizationcontext): `GET /v1/organization` — See which organization and credential a request is acting as. - [Get entitlements](/reference/api/getorganizationentitlements): `GET /v1/organization/entitlements` — See your plan, its limits, and how much of each you're using. - [Get usage](/reference/api/getorganizationusage): `GET /v1/organization/usage` — See your organization's usage totals. - [Get default jurisdiction](/reference/api/getorganizationdefaultjurisdiction): `GET /v1/organization/default-jurisdiction` — See which region new monitors are created in by default. - [Set default jurisdiction](/reference/api/setorganizationdefaultjurisdiction): `PUT /v1/organization/default-jurisdiction` — Choose which region new monitors are created in. Existing monitors don't move. - [Export data](/reference/api/exportorganization): `GET /v1/organization/export` — Download your monitors, beats, incidents and usage. Secrets aren't included. ## Billing See your subscription status and what a plan change or cancellation does to your monitors. - [Get billing status](/reference/api/getorganizationbilling): `GET /v1/organization/billing` — See your subscription status, and whether you're in a payment grace period. - [Preview cancellation](/reference/api/getbillingcancellationimpact): `GET /v1/organization/billing/cancellation-impact` — Before cancelling, see what would happen to each of your monitors. - [List allotment transitions](/reference/api/listbillingallotmenttransitions): `GET /v1/organization/billing/allotment-transitions` — See which monitors were suspended or released when your plan changed. ## API metadata Download the full API description. - [Get OpenAPI document](/reference/api/getopenapidocument): `GET /v1/openapi.json` — Download the full API description (OpenAPI) to generate a client or hand to an agent. --- Source: https://docs.signalsitter.com/reference/api/publishheartbeat # Publish heartbeat `POST /{monitor_key}` Send a beat to tell SignalSitter your job ran. Put measurements in the body to check them against your limits. Hosts: `ingest.signalsitter.com`, `eu.ingest.signalsitter.com`. Authentication: SignalSitter publish credential. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `monitor_key` | path | yes | `MonitorKey` | Customer-defined monitor key. | | `Idempotency-Key` | header | yes | `IdempotencyKey` | Required key deduplicating the observation and configuration patch together. | | `Signalsitter-Name` | header | no | `string` | Optional Signalsitter-Name common monitor setting. | | `Signalsitter-Interval` | header | no | `string` | Optional Signalsitter-Interval common monitor setting. | | `Signalsitter-Grace` | header | no | `string` | Optional Signalsitter-Grace common monitor setting. | | `Signalsitter-Heartbeat` | header | no | `string` | Optional Signalsitter-Heartbeat common monitor setting. | | `Signalsitter-Callback` | header | no | `string` | Optional Signalsitter-Callback common monitor setting. | | `Signalsitter-Metric-Type` | header | no | `string` | Optional Signalsitter-Metric-Type common monitor setting. | | `Signalsitter-Min` | header | no | `string` | Optional Signalsitter-Min common monitor setting. | | `Signalsitter-Max` | header | no | `string` | Optional Signalsitter-Max common monitor setting. | | `Signalsitter-Config` | header | no | `PublishConfigHeader` | Canonical unpadded base64url versioned advanced configuration. | | `Signalsitter-Jurisdiction` | header | no | `string` | Restricted-jurisdiction fallback used only on the unrestricted host. | ## Request body Optional `application/json`: `PublishObservationBody`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Observation durably accepted | `PublishAcceptance` (application/json) | | 400 | Invalid publish request | `ProblemDetails` (application/problem+json) | | 401 | Publish authentication required | `ProblemDetails` (application/problem+json) | | 403 | Publish permission denied | `ProblemDetails` (application/problem+json) | | 409 | Idempotency-key conflict | `ProblemDetails` (application/problem+json) | | 413 | Publish input too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported observation media type | `ProblemDetails` (application/problem+json) | | 503 | Retryable publish uncertainty | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "publishHeartbeat", "parameters": [ { "description": "Customer-defined monitor key.", "in": "path", "name": "monitor_key", "required": true, "schema": { "$ref": "#/components/schemas/MonitorKey" } }, { "description": "Required key deduplicating the observation and configuration patch together.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "$ref": "#/components/schemas/IdempotencyKey" } }, { "description": "Optional Signalsitter-Name common monitor setting.", "in": "header", "name": "Signalsitter-Name", "required": false, "schema": { "maxLength": 1024, "minLength": 1, "type": "string" } }, { "description": "Optional Signalsitter-Interval common monitor setting.", "in": "header", "name": "Signalsitter-Interval", "required": false, "schema": { "maxLength": 1024, "minLength": 1, "type": "string" } }, { "description": "Optional Signalsitter-Grace common monitor setting.", "in": "header", "name": "Signalsitter-Grace", "required": false, "schema": { "maxLength": 1024, "minLength": 1, "type": "string" } }, { "description": "Optional Signalsitter-Heartbeat common monitor setting.", "in": "header", "name": "Signalsitter-Heartbeat", "required": false, "schema": { "maxLength": 1024, "minLength": 1, "type": "string" } }, { "description": "Optional Signalsitter-Callback common monitor setting.", "in": "header", "name": "Signalsitter-Callback", "required": false, "schema": { "maxLength": 1024, "minLength": 1, "type": "string" } }, { "description": "Optional Signalsitter-Metric-Type common monitor setting.", "in": "header", "name": "Signalsitter-Metric-Type", "required": false, "schema": { "maxLength": 1024, "minLength": 1, "type": "string" } }, { "description": "Optional Signalsitter-Min common monitor setting.", "in": "header", "name": "Signalsitter-Min", "required": false, "schema": { "maxLength": 1024, "minLength": 1, "type": "string" } }, { "description": "Optional Signalsitter-Max common monitor setting.", "in": "header", "name": "Signalsitter-Max", "required": false, "schema": { "maxLength": 1024, "minLength": 1, "type": "string" } }, { "description": "Optional Signalsitter-Sensitivity common monitor setting.", "in": "header", "name": "Signalsitter-Sensitivity", "required": false, "schema": { "maxLength": 1024, "minLength": 1, "type": "string" } }, { "description": "Optional Signalsitter-Mode common monitor setting.", "in": "header", "name": "Signalsitter-Mode", "required": false, "schema": { "maxLength": 1024, "minLength": 1, "type": "string" } }, { "description": "Canonical unpadded base64url versioned advanced configuration.", "in": "header", "name": "Signalsitter-Config", "required": false, "schema": { "$ref": "#/components/schemas/PublishConfigHeader" } }, { "description": "Restricted-jurisdiction fallback used only on the unrestricted host.", "in": "header", "name": "Signalsitter-Jurisdiction", "required": false, "schema": { "enum": [ "eu", "fedramp", "us" ], "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PublishObservationBody" } } }, "required": false }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PublishAcceptance" } } }, "description": "Observation durably accepted", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid publish request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Publish authentication required", "headers": { "WWW-Authenticate": { "description": "Bearer challenge for an invalid or missing publish credential.", "required": true, "schema": { "type": "string" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Publish permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency-key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Publish input too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported observation media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Retryable publish uncertainty", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "publishCredential": [] } ], "summary": "Durably accept one heartbeat observation", "tags": [ "Heartbeat ingest" ], "x-signalsitter-ingest-hosts": [ "ingest.signalsitter.com", "eu.ingest.signalsitter.com" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/testmonitorbeat # Test a beat `POST /v1/monitors/{monitorId}/test-beat` Try a beat against a monitor without recording it. Use it to check your request and measurements before going live. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | ## Request body Required `application/json`: `MonitorTestBeatRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `MonitorTestBeatResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "testMonitorBeat", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorTestBeatRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorTestBeatResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Validate a test beat without creating a production event", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/listmonitors # List monitors `GET /v1/monitors` List your monitors with their current status, so you can see which are healthy, late or in an incident. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `includeArchived` | query | no | `boolean` | Include archived records. Archived records are excluded by default. | | `cursor` | query | no | `string` | | | `limit` | query | no | `integer` | | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `MonitorSummaryPage` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "listMonitors", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Include archived records. Archived records are excluded by default.", "in": "query", "name": "includeArchived", "required": false, "schema": { "default": false, "type": "boolean" } }, { "in": "query", "name": "cursor", "required": false, "schema": { "maxLength": 512, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 200, "minimum": 1, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorSummaryPage" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "List the organization's monitors from the directory with live status fields", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/createmonitor # Create monitor `POST /v1/monitors` Create a monitor and set how often you expect beats. It's ready for its first beat straight away. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body Required `application/json`: `MonitorCreateRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `MonitorCreateResult` (application/json) | | 201 | Credential created | `MonitorCreateResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "createMonitor", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorCreateRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorCreateResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorCreateResult" } } }, "description": "Credential created", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Create and configure a monitor ready for its first live beat", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getmonitordetail # Get monitor `GET /v1/monitors/{monitorId}` Get one monitor's settings, status and latest beat. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `includeObservationProvenance` | query | no | `boolean` | Include additive observation source-time and provenance fields. Disabled by default so previously generated strict V1 clients remain compatible. | | `retainedHistoryMetrics` | query | no | `string` | Comma-separated measurement keys to project as compact retained datapoints. Supplying it, together with retainedHistoryLimit, adds the additive retainedHistory member to the response; omitting it leaves the response exactly as it was. | | `retainedHistoryLimit` | query | no | `integer` | How many of the newest retained datapoints to project, from 1 to the historical-import maximum. Required whenever retainedHistoryMetrics is supplied. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `MonitorDetail` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getMonitorDetail", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Include additive observation source-time and provenance fields. Disabled by default so previously generated strict V1 clients remain compatible.", "in": "query", "name": "includeObservationProvenance", "required": false, "schema": { "default": false, "type": "boolean" } }, { "description": "Comma-separated measurement keys to project as compact retained datapoints. Supplying it, together with retainedHistoryLimit, adds the additive retainedHistory member to the response; omitting it leaves the response exactly as it was.", "in": "query", "name": "retainedHistoryMetrics", "required": false, "schema": { "type": "string" } }, { "description": "How many of the newest retained datapoints to project, from 1 to the historical-import maximum. Required whenever retainedHistoryMetrics is supplied.", "in": "query", "name": "retainedHistoryLimit", "required": false, "schema": { "maximum": 500, "minimum": 1, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorDetail" } } }, "description": "Successful response", "headers": { "ETag": { "description": "Strong credential generation entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read one authoritative monitor and its latest observation", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/updatemonitorconfiguration # Update configuration `PATCH /v1/monitors/{monitorId}` Change how a monitor works: how often beats are due, the grace period, its measurements and its incident settings. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | | `If-Match` | header | yes | `EntityTag` | Strong resource generation ETag from a prior read. | ## Request body Required `application/json`: `MonitorConfigurationUpdateRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `MonitorControlResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency or concurrent mutation conflict | `ProblemDetails` (application/problem+json) | | 412 | Entity tag precondition failed | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 428 | Entity tag precondition required | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "updateMonitorConfiguration", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "description": "Strong resource generation ETag from a prior read.", "in": "header", "name": "If-Match", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorConfigurationUpdateRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorControlResult" } } }, "description": "Successful response", "headers": { "ETag": { "description": "Strong credential generation entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency or concurrent mutation conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "412": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition failed", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "428": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Update monitor cadence, grace, measurement definitions, and incident policy", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/controlmonitorlifecycle # Change lifecycle `POST /v1/monitors/{monitorId}/lifecycle` Pause or resume a monitor, archive or restore it, or schedule a maintenance window when beats are expected to stop. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | | `If-Match` | header | yes | `EntityTag` | Strong resource generation ETag from a prior read. | ## Request body Required `application/json`: `MonitorLifecycleRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `MonitorControlResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency or concurrent mutation conflict | `ProblemDetails` (application/problem+json) | | 412 | Entity tag precondition failed | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 428 | Entity tag precondition required | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "controlMonitorLifecycle", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "description": "Strong resource generation ETag from a prior read.", "in": "header", "name": "If-Match", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorLifecycleRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorControlResult" } } }, "description": "Successful response", "headers": { "ETag": { "description": "Strong credential generation entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency or concurrent mutation conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "412": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition failed", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "428": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Pause, resume, archive, restore, or schedule monitor maintenance", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getmonitoractivation # Wait for first beat `GET /v1/monitors/{monitorId}/activation` Check whether a new monitor has received its first beat, and when the next one is due. Use it to confirm a setup worked. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `MonitorActivation` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getMonitorActivation", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorActivation" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Wait for the first accepted live beat and its next deadline", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/listmonitorchanges # List changes `GET /v1/monitors/{monitorId}/changes` See the history of changes to a monitor's settings and status, newest first. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `cursor` | query | no | `string` | | | `limit` | query | no | `integer` | | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `MonitorChangePage` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "listMonitorChanges", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "in": "query", "name": "cursor", "required": false, "schema": { "maxLength": 512, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 200, "minimum": 1, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorChangePage" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "List monitor configuration and lifecycle changes newest first by configuration version", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/deletemonitor # Delete monitor `DELETE /v1/monitors/{monitorId}` Delete a monitor for good. Its key can't be used again. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | | `If-Match` | header | yes | `EntityTag` | Strong resource generation ETag from a prior read. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `MonitorDeletionResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency or concurrent mutation conflict | `ProblemDetails` (application/problem+json) | | 412 | Entity tag precondition failed | `ProblemDetails` (application/problem+json) | | 428 | Entity tag precondition required | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "deleteMonitor", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "description": "Strong resource generation ETag from a prior read.", "in": "header", "name": "If-Match", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorDeletionResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency or concurrent mutation conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "412": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition failed", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "428": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Irreversibly delete a monitor and permanently consume its key", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/listmonitorobservations # List observations `GET /v1/monitors/{monitorId}/observations` List the beats a monitor has received, newest first, with any measurements they carried. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `includeObservationProvenance` | query | no | `boolean` | Include additive observation source-time and provenance fields. Disabled by default so previously generated strict V1 clients remain compatible. | | `includeObservationBuckets` | query | no | `boolean` | Include retained aggregate buckets beyond the raw observation window. Independent of observation provenance and disabled by default for previously generated clients. Repeat the selected export format when resuming; bucket capability is preserved by the export cursor. | | `cursor` | query | no | `string` | | | `limit` | query | no | `integer` | | | `since` | query | no | `string` | Inclusive RFC 3339 lower bound for accepted observation timestamps. | | `until` | query | no | `string` | Inclusive RFC 3339 upper bound for accepted observation timestamps. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `MonitorObservationPage` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "listMonitorObservations", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Include additive observation source-time and provenance fields. Disabled by default so previously generated strict V1 clients remain compatible.", "in": "query", "name": "includeObservationProvenance", "required": false, "schema": { "default": false, "type": "boolean" } }, { "description": "Include retained aggregate buckets beyond the raw observation window. Independent of observation provenance and disabled by default for previously generated clients. Repeat the selected export format when resuming; bucket capability is preserved by the export cursor.", "in": "query", "name": "includeObservationBuckets", "required": false, "schema": { "default": false, "type": "boolean" } }, { "in": "query", "name": "cursor", "required": false, "schema": { "maxLength": 512, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 200, "minimum": 1, "type": "integer" } }, { "description": "Inclusive RFC 3339 lower bound for accepted observation timestamps.", "in": "query", "name": "since", "required": false, "schema": { "format": "date-time", "type": "string" } }, { "description": "Inclusive RFC 3339 upper bound for accepted observation timestamps.", "in": "query", "name": "until", "required": false, "schema": { "format": "date-time", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorObservationPage" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "List accepted monitor observations newest first using an opaque cursor", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/readmonitorobservationseries # Read series `GET /v1/monitors/{monitorId}/observation-series` Get a measurement's values over time, grouped into time buckets, ready to chart. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `since` | query | yes | `string` | Inclusive RFC 3339 lower bound for accepted observation timestamps. | | `until` | query | yes | `string` | Inclusive RFC 3339 upper bound for accepted observation timestamps. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `MonitorObservationSeries` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "readMonitorObservationSeries", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Inclusive RFC 3339 lower bound for accepted observation timestamps.", "in": "query", "name": "since", "required": true, "schema": { "format": "date-time", "type": "string" } }, { "description": "Inclusive RFC 3339 upper bound for accepted observation timestamps.", "in": "query", "name": "until", "required": true, "schema": { "format": "date-time", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorObservationSeries" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read a bounded time-bucketed numerical observation series", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/createmonitorruleworkbenchdraft # Create draft `POST /v1/monitors/{monitorId}/rule-workbench/drafts` Start drafting new limits for a monitor, tested against a snapshot of its recent history. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body Required `application/json`: `RestRuleWorkbenchDraftCreateRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 201 | Credential created | `RuleWorkbenchDraft` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "createMonitorRuleWorkbenchDraft", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RestRuleWorkbenchDraftCreateRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RuleWorkbenchDraft" } } }, "description": "Credential created", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Create a versioned rule draft over one frozen retained-history window", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getmonitorruleworkbenchdraft # Read draft `POST /v1/monitors/{monitorId}/rule-workbench/drafts/read` Get a draft and the limits it proposes. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | ## Request body Required `application/json`: `RestRuleWorkbenchDraftReadRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `RuleWorkbenchDraft` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getMonitorRuleWorkbenchDraft", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RestRuleWorkbenchDraftReadRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RuleWorkbenchDraft" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read a versioned rule workbench draft", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/updatemonitorruleworkbenchdraft # Update draft `POST /v1/monitors/{monitorId}/rule-workbench/drafts/update` Change the limits in a draft. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body Required `application/json`: `RestRuleWorkbenchDraftUpdateRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `RuleWorkbenchDraft` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "updateMonitorRuleWorkbenchDraft", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RestRuleWorkbenchDraftUpdateRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RuleWorkbenchDraft" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Update a rule proposal only when the draft version still matches", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/replaymonitorruleworkbench # Replay draft `POST /v1/monitors/{monitorId}/rule-workbench/drafts/replay` See which past readings would have broken your current limits and your proposed ones, before you apply anything. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | ## Request body Required `application/json`: `RestRuleWorkbenchReplayRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `RuleWorkbenchReplayResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "replayMonitorRuleWorkbench", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RestRuleWorkbenchReplayRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RuleWorkbenchReplayResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Replay active and proposed rules over the draft's frozen retained history", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/applymonitorruleworkbenchdraft # Apply draft `POST /v1/monitors/{monitorId}/rule-workbench/drafts/apply` Make a draft's limits live on the monitor. It's refused if the monitor or the draft changed since you last read them. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body Required `application/json`: `RestRuleWorkbenchApplyRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `RuleWorkbenchApplyResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "applyMonitorRuleWorkbenchDraft", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RestRuleWorkbenchApplyRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RuleWorkbenchApplyResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Explicitly confirm and apply a draft when both draft and configuration versions match", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/cancelmonitorruleworkbenchdraft # Cancel draft `POST /v1/monitors/{monitorId}/rule-workbench/drafts/cancel` Throw a draft away without changing the monitor. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body Required `application/json`: `RestRuleWorkbenchCancelRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `RuleWorkbenchDraft` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "cancelMonitorRuleWorkbenchDraft", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RestRuleWorkbenchCancelRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RuleWorkbenchDraft" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Cancel an open rule draft without changing monitor configuration", "tags": [ "Monitors" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/listincidents # List all incidents `GET /v1/incidents` List incidents across all your monitors, newest first. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `includeArchived` | query | no | `boolean` | Include archived records. Archived records are excluded by default. | | `cursor` | query | no | `string` | | | `limit` | query | no | `integer` | | | `state` | query | no | `IncidentState` | Return only incidents in this state. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `IncidentPage` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "listIncidents", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Include archived records. Archived records are excluded by default.", "in": "query", "name": "includeArchived", "required": false, "schema": { "default": false, "type": "boolean" } }, { "in": "query", "name": "cursor", "required": false, "schema": { "maxLength": 512, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 200, "minimum": 1, "type": "integer" } }, { "description": "Return only incidents in this state.", "in": "query", "name": "state", "required": false, "schema": { "$ref": "#/components/schemas/IncidentState" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IncidentPage" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "List the organization's incidents newest first across every monitor", "tags": [ "Incidents" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/listmonitorincidents # List monitor incidents `GET /v1/monitors/{monitorId}/incidents` List one monitor's incidents, newest first. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `includeArchived` | query | no | `boolean` | Include archived records. Archived records are excluded by default. | | `cursor` | query | no | `string` | | | `limit` | query | no | `integer` | | | `state` | query | no | `IncidentState` | Return only incidents in this state. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `IncidentPage` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "listMonitorIncidents", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Include archived records. Archived records are excluded by default.", "in": "query", "name": "includeArchived", "required": false, "schema": { "default": false, "type": "boolean" } }, { "in": "query", "name": "cursor", "required": false, "schema": { "maxLength": 512, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 200, "minimum": 1, "type": "integer" } }, { "description": "Return only incidents in this state.", "in": "query", "name": "state", "required": false, "schema": { "$ref": "#/components/schemas/IncidentState" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IncidentPage" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "List monitor incidents newest first using an opaque cursor", "tags": [ "Incidents" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getmonitorincident # Get incident `GET /v1/monitors/{monitorId}/incidents/{incidentId}` Get one incident and where it stands now. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `incidentId` | path | yes | `IncidentId` | Opaque incident identifier from a prior incident read. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `Incident` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getMonitorIncident", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque incident identifier from a prior incident read.", "in": "path", "name": "incidentId", "required": true, "schema": { "$ref": "#/components/schemas/IncidentId" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Incident" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read one incident and its current state-machine position", "tags": [ "Incidents" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getmonitorincidenttimeline # Get timeline `GET /v1/monitors/{monitorId}/incidents/{incidentId}/timeline` See everything that happened during an incident, in order. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `incidentId` | path | yes | `IncidentId` | Opaque incident identifier from a prior incident read. | | `cursor` | query | no | `string` | | | `limit` | query | no | `integer` | | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `IncidentTimelinePage` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getMonitorIncidentTimeline", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque incident identifier from a prior incident read.", "in": "path", "name": "incidentId", "required": true, "schema": { "$ref": "#/components/schemas/IncidentId" } }, { "in": "query", "name": "cursor", "required": false, "schema": { "maxLength": 512, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 200, "minimum": 1, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IncidentTimelinePage" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read the immutable incident timeline in occurrence order", "tags": [ "Incidents" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/acknowledgemonitorincident # Acknowledge incident `POST /v1/monitors/{monitorId}/incidents/{incidentId}/acknowledge` Let others know you're on it. The incident stays open. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `incidentId` | path | yes | `IncidentId` | Opaque incident identifier from a prior incident read. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body Required `application/json`: `IncidentControlRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `IncidentControlResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "acknowledgeMonitorIncident", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque incident identifier from a prior incident read.", "in": "path", "name": "incidentId", "required": true, "schema": { "$ref": "#/components/schemas/IncidentId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IncidentControlRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IncidentControlResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Acknowledge an incident without closing it", "tags": [ "Incidents" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/annotatemonitorincident # Annotate incident `POST /v1/monitors/{monitorId}/incidents/{incidentId}/annotations` Add a note to an incident, such as what you found or did. Notes can't be edited later. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `incidentId` | path | yes | `IncidentId` | Opaque incident identifier from a prior incident read. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body Required `application/json`: `IncidentAnnotateRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `IncidentControlResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "annotateMonitorIncident", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque incident identifier from a prior incident read.", "in": "path", "name": "incidentId", "required": true, "schema": { "$ref": "#/components/schemas/IncidentId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IncidentAnnotateRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IncidentControlResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Append an immutable operator annotation to an incident", "tags": [ "Incidents" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/resolvemonitorincident # Resolve incident `POST /v1/monitors/{monitorId}/incidents/{incidentId}/resolve` Close an incident yourself. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `incidentId` | path | yes | `IncidentId` | Opaque incident identifier from a prior incident read. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body Required `application/json`: `IncidentControlRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `IncidentControlResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "resolveMonitorIncident", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque incident identifier from a prior incident read.", "in": "path", "name": "incidentId", "required": true, "schema": { "$ref": "#/components/schemas/IncidentId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IncidentControlRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IncidentControlResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Resolve an incident and close its violation family", "tags": [ "Incidents" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/listmonitorincidentdeliveries # List deliveries `GET /v1/monitors/{monitorId}/incidents/{incidentId}/deliveries` See every alert sent for an incident, and whether each one reached its destination. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `incidentId` | path | yes | `IncidentId` | Opaque incident identifier from a prior incident read. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `CallbackDeliveryDiagnosticsList` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "listMonitorIncidentDeliveries", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque incident identifier from a prior incident read.", "in": "path", "name": "incidentId", "required": true, "schema": { "$ref": "#/components/schemas/IncidentId" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackDeliveryDiagnosticsList" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read every callback delivery owed for one incident, with its attempt history", "tags": [ "Incidents" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/redelivermonitorincidentdelivery # Redeliver `POST /v1/monitors/{monitorId}/incidents/{incidentId}/deliveries/{intentId}/redeliver` Send an alert again, for example after fixing your webhook. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `incidentId` | path | yes | `IncidentId` | Opaque incident identifier from a prior incident read. | | `intentId` | path | yes | `CallbackIntentId` | Opaque delivery identifier from a prior incident delivery read. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body Required `application/json`: `CallbackDeliveryRedeliverRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 202 | Successful response | `CallbackDeliveryRedeliverResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "redeliverMonitorIncidentDelivery", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque incident identifier from a prior incident read.", "in": "path", "name": "incidentId", "required": true, "schema": { "$ref": "#/components/schemas/IncidentId" } }, { "description": "Opaque delivery identifier from a prior incident delivery read.", "in": "path", "name": "intentId", "required": true, "schema": { "$ref": "#/components/schemas/CallbackIntentId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackDeliveryRedeliverRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackDeliveryRedeliverResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Ask for one more delivery attempt against a settled delivery", "tags": [ "Incidents" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/listcallbackendpoints # List endpoints `GET /v1/callbacks` List the places your alerts can go: your webhooks and WhooshBang destinations. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `cursor` | query | no | `string` | | | `limit` | query | no | `integer` | | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `CallbackEndpointListPage` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "listCallbackEndpoints", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "in": "query", "name": "cursor", "required": false, "schema": { "maxLength": 512, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 200, "minimum": 1, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackEndpointListPage" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "List reusable organization callback endpoints", "tags": [ "Callback endpoints" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/createcallbackendpoint # Create endpoint `POST /v1/callbacks` Add a place to send alerts: a webhook URL, a person through WhooshBang, or everyone in your organization through WhooshBang. A webhook's signing secret is shown once, so save it. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body Required `application/json`: `CallbackEndpointCreateRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `CallbackEndpointIssueResult` (application/json) | | 201 | Credential created | `CallbackEndpointIssueResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "createCallbackEndpoint", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackEndpointCreateRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackEndpointIssueResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackEndpointIssueResult" } } }, "description": "Credential created", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Create a webhook, WhooshBang subscriber, or WhooshBang group callback endpoint, revealing a webhook signing secret exactly once", "tags": [ "Callback endpoints" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getcallbackendpoint # Get endpoint `GET /v1/callbacks/{endpointId}` Get one alert destination. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `endpointId` | path | yes | `CallbackEndpointId` | Opaque callback endpoint identifier from a prior read. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `CallbackEndpointMetadata` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getCallbackEndpoint", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Opaque callback endpoint identifier from a prior read.", "in": "path", "name": "endpointId", "required": true, "schema": { "$ref": "#/components/schemas/CallbackEndpointId" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackEndpointMetadata" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read one callback endpoint", "tags": [ "Callback endpoints" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/updatecallbackendpoint # Update endpoint `PATCH /v1/callbacks/{endpointId}` Rename an alert destination, change where it points, or switch it off and on. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `endpointId` | path | yes | `CallbackEndpointId` | Opaque callback endpoint identifier from a prior read. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | | `If-Match` | header | yes | `EntityTag` | Strong resource generation ETag from a prior read. | ## Request body Required `application/json`: `CallbackEndpointUpdateRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `CallbackEndpointMetadata` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency or concurrent mutation conflict | `ProblemDetails` (application/problem+json) | | 412 | Entity tag precondition failed | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 428 | Entity tag precondition required | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "updateCallbackEndpoint", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Opaque callback endpoint identifier from a prior read.", "in": "path", "name": "endpointId", "required": true, "schema": { "$ref": "#/components/schemas/CallbackEndpointId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "description": "Strong resource generation ETag from a prior read.", "in": "header", "name": "If-Match", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackEndpointUpdateRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackEndpointMetadata" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency or concurrent mutation conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "412": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition failed", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "428": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Update a callback endpoint's alias, destination, or lifecycle; setting lifecycle switches deliveries off and back on", "tags": [ "Callback endpoints" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/rotatecallbackendpointsecret # Rotate signing secret `POST /v1/callbacks/{endpointId}/rotate` Get a new signing secret for a webhook. The old secret keeps working for a short overlap while you switch over. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `endpointId` | path | yes | `CallbackEndpointId` | Opaque callback endpoint identifier from a prior read. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | | `If-Match` | header | yes | `EntityTag` | Strong resource generation ETag from a prior read. | ## Request body Required `application/json`: `CallbackEndpointRotateSecretRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `CallbackEndpointIssueResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency or concurrent mutation conflict | `ProblemDetails` (application/problem+json) | | 412 | Entity tag precondition failed | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 428 | Entity tag precondition required | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "rotateCallbackEndpointSecret", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Opaque callback endpoint identifier from a prior read.", "in": "path", "name": "endpointId", "required": true, "schema": { "$ref": "#/components/schemas/CallbackEndpointId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "description": "Strong resource generation ETag from a prior read.", "in": "header", "name": "If-Match", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackEndpointRotateSecretRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackEndpointIssueResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency or concurrent mutation conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "412": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition failed", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "428": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Rotate the signing secret with a bounded overlap and reveal it once", "tags": [ "Callback endpoints" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/testcallbackendpoint # Send test delivery `POST /v1/callbacks/{endpointId}/test` Send a test alert to a destination and see what it answered. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `endpointId` | path | yes | `CallbackEndpointId` | Opaque callback endpoint identifier from a prior read. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `CallbackEndpointTestResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "testCallbackEndpoint", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Opaque callback endpoint identifier from a prior read.", "in": "path", "name": "endpointId", "required": true, "schema": { "$ref": "#/components/schemas/CallbackEndpointId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackEndpointTestResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Send one signed test delivery and report what the destination answered; the result gates nothing", "tags": [ "Callback endpoints" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/removecallbackendpoint # Remove endpoint `DELETE /v1/callbacks/{endpointId}` Delete an alert destination for good. To stop alerts for a while, switch it off instead. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `endpointId` | path | yes | `CallbackEndpointId` | Opaque callback endpoint identifier from a prior read. | | `If-Match` | header | yes | `EntityTag` | Strong resource generation ETag from a prior read. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `CallbackEndpointRemovalResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency or concurrent mutation conflict | `ProblemDetails` (application/problem+json) | | 412 | Entity tag precondition failed | `ProblemDetails` (application/problem+json) | | 428 | Entity tag precondition required | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "removeCallbackEndpoint", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Opaque callback endpoint identifier from a prior read.", "in": "path", "name": "endpointId", "required": true, "schema": { "$ref": "#/components/schemas/CallbackEndpointId" } }, { "description": "Strong resource generation ETag from a prior read.", "in": "header", "name": "If-Match", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackEndpointRemovalResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency or concurrent mutation conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "412": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition failed", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "428": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Permanently remove a callback endpoint, its signing secret, and its idempotency history; to stop deliveries reversibly, PATCH lifecycle to disabled instead", "tags": [ "Callback endpoints" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getmonitorcallbackbinding # Get monitor binding `GET /v1/monitors/{monitorId}/callback` See where a monitor's alerts go: your default destination, a specific one, a URL of its own, or nowhere. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `MonitorCallbackBindingView` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getMonitorCallbackBinding", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorCallbackBindingView" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read a monitor's callback binding and what it resolves to", "tags": [ "Callback endpoints" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/setmonitorcallbackbinding # Set monitor binding `PUT /v1/monitors/{monitorId}/callback` Choose where a monitor's alerts go: your default destination, a specific one, a URL of its own, or nowhere. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `monitorId` | path | yes | `MonitorId` | Immutable public monitor identifier, normally sufficient within the verified organization. | | `jurisdiction` | query | no | `MonitorJurisdiction` | Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body Required `application/json`: `MonitorCallbackBindingRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `MonitorCallbackBindingResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "setMonitorCallbackBinding", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Immutable public monitor identifier, normally sufficient within the verified organization.", "in": "path", "name": "monitorId", "required": true, "schema": { "$ref": "#/components/schemas/MonitorId" } }, { "description": "Optional disambiguator used only when this organization owns the same monitor ID in more than one jurisdiction.", "in": "query", "name": "jurisdiction", "required": false, "schema": { "$ref": "#/components/schemas/MonitorJurisdiction" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorCallbackBindingRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MonitorCallbackBindingResult" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Bind a monitor to the default, a named endpoint, an inline URL, or nothing", "tags": [ "Callback endpoints" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getorganizationcallbackdefault # Get default endpoint `GET /v1/organization/callback-default` See which destination monitors use when they're set to the default. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `OrganizationCallbackDefault` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getOrganizationCallbackDefault", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationCallbackDefault" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read the endpoint monitors inherit when they select the default", "tags": [ "Callback endpoints" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/setorganizationcallbackdefault # Set default endpoint `PUT /v1/organization/callback-default` Choose the destination monitors use when they're set to the default, or clear it. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body Required `application/json`: `OrganizationCallbackDefaultRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `OrganizationCallbackDefault` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "setOrganizationCallbackDefault", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationCallbackDefaultRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationCallbackDefault" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Select or clear the organization default callback endpoint", "tags": [ "Callback endpoints" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/listprojects # List projects `GET /v1/projects` List your organization's projects. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `cursor` | query | no | `string` | | | `limit` | query | no | `integer` | | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `ProjectListPage` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "listProjects", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "in": "query", "name": "cursor", "required": false, "schema": { "maxLength": 512, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 200, "minimum": 1, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectListPage" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "List the organization's projects", "tags": [ "Projects" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/createproject # Create project `POST /v1/projects` Create a project to group monitors. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | ## Request body Required `application/json`: `ProjectCreateRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 201 | Credential created | `Project` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "createProject", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectCreateRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Project" } } }, "description": "Credential created", "headers": { "ETag": { "description": "Strong credential generation entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Create a project", "tags": [ "Projects" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getproject # Get project `GET /v1/projects/{projectId}` Get one project. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `projectId` | path | yes | `ProjectId` | Opaque project identifier from a prior project read or listing. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `Project` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getProject", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Opaque project identifier from a prior project read or listing.", "in": "path", "name": "projectId", "required": true, "schema": { "$ref": "#/components/schemas/ProjectId" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Project" } } }, "description": "Successful response", "headers": { "ETag": { "description": "Strong credential generation entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read one project", "tags": [ "Projects" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/renameproject # Rename project `PATCH /v1/projects/{projectId}` Rename a project. Its ID stays the same. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `projectId` | path | yes | `ProjectId` | Opaque project identifier from a prior project read or listing. | | `If-Match` | header | yes | `EntityTag` | Strong resource generation ETag from a prior read. | ## Request body Required `application/json`: `ProjectRenameRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `Project` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency or concurrent mutation conflict | `ProblemDetails` (application/problem+json) | | 412 | Entity tag precondition failed | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 428 | Entity tag precondition required | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "renameProject", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Opaque project identifier from a prior project read or listing.", "in": "path", "name": "projectId", "required": true, "schema": { "$ref": "#/components/schemas/ProjectId" } }, { "description": "Strong resource generation ETag from a prior read.", "in": "header", "name": "If-Match", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectRenameRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Project" } } }, "description": "Successful response", "headers": { "ETag": { "description": "Strong credential generation entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency or concurrent mutation conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "412": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition failed", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "428": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Rename a project without changing its identifier", "tags": [ "Projects" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/controlprojectlifecycle # Archive or restore `POST /v1/projects/{projectId}/lifecycle` Archive a project you no longer use, or restore it. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `projectId` | path | yes | `ProjectId` | Opaque project identifier from a prior project read or listing. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | | `If-Match` | header | yes | `EntityTag` | Strong resource generation ETag from a prior read. | ## Request body Required `application/json`: `ProjectLifecycleRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `ProjectLifecycleResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency or concurrent mutation conflict | `ProblemDetails` (application/problem+json) | | 412 | Entity tag precondition failed | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 428 | Entity tag precondition required | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "controlProjectLifecycle", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Opaque project identifier from a prior project read or listing.", "in": "path", "name": "projectId", "required": true, "schema": { "$ref": "#/components/schemas/ProjectId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "description": "Strong resource generation ETag from a prior read.", "in": "header", "name": "If-Match", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectLifecycleRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectLifecycleResult" } } }, "description": "Successful response", "headers": { "ETag": { "description": "Strong credential generation entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency or concurrent mutation conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "412": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition failed", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "428": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Archive or restore one project", "tags": [ "Projects" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/deleteproject # Delete project `DELETE /v1/projects/{projectId}` Delete a project and everything in it, for good. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `projectId` | path | yes | `ProjectId` | Opaque project identifier from a prior project read or listing. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | | `If-Match` | header | yes | `EntityTag` | Strong resource generation ETag from a prior read. | ## Request body Required `application/json`: `ProjectDeletionRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `ProjectDeletionReceipt` (application/json) | | 202 | Successful response | `ProjectDeletionReceipt` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency or concurrent mutation conflict | `ProblemDetails` (application/problem+json) | | 412 | Entity tag precondition failed | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 428 | Entity tag precondition required | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "deleteProject", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Opaque project identifier from a prior project read or listing.", "in": "path", "name": "projectId", "required": true, "schema": { "$ref": "#/components/schemas/ProjectId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "description": "Strong resource generation ETag from a prior read.", "in": "header", "name": "If-Match", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectDeletionRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectDeletionReceipt" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectDeletionReceipt" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency or concurrent mutation conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "412": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition failed", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "428": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Reserve irreversible erasure of one project", "tags": [ "Projects" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/listapicredentials # List credentials `GET /v1/credentials` List your API credentials. Secrets are never shown after creation. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `cursor` | query | no | `string` | | | `limit` | query | no | `integer` | | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `ApiCredentialListPage` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "listApiCredentials", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "in": "query", "name": "cursor", "required": false, "schema": { "maxLength": 512, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 200, "minimum": 1, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiCredentialListPage" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "List API credential metadata", "tags": [ "API credentials" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/createapicredential # Create credential `POST /v1/credentials` Create an API credential for a script, service or agent. Its secret is shown once, so store it safely. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | ## Request body Required `application/json`: `ApiCredentialCreateRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Idempotent replay | `ApiCredentialIssueResult` (application/json) | | 201 | Credential created | `ApiCredentialIssueResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency key conflict | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "createApiCredential", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiCredentialCreateRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiCredentialIssueResult" } } }, "description": "Idempotent replay", "headers": { "ETag": { "description": "Strong credential generation entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "Location": { "description": "Canonical credential resource path.", "required": true, "schema": { "format": "uri-reference", "maxLength": 512, "type": "string" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiCredentialIssueResult" } } }, "description": "Credential created", "headers": { "ETag": { "description": "Strong credential generation entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "Location": { "description": "Canonical credential resource path.", "required": true, "schema": { "format": "uri-reference", "maxLength": 512, "type": "string" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency key conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Create an API credential and reveal its secret once", "tags": [ "API credentials" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getapicredential # Get credential `GET /v1/credentials/{credentialId}` Get one credential's details. The secret isn't included. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `credentialId` | path | yes | `ApiCredentialId` | | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `ApiCredentialMetadata` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getApiCredential", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "in": "path", "name": "credentialId", "required": true, "schema": { "$ref": "#/components/schemas/ApiCredentialId" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiCredentialMetadata" } } }, "description": "Successful response", "headers": { "ETag": { "description": "Strong credential generation entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read API credential metadata", "tags": [ "API credentials" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/rotateapicredential # Rotate credential `POST /v1/credentials/{credentialId}/rotate` Replace a credential's secret. The new secret is shown once. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `credentialId` | path | yes | `ApiCredentialId` | | | `Idempotency-Key` | header | yes | `string` | Opaque retry key retained for the public idempotency window. | | `If-Match` | header | yes | `EntityTag` | Strong resource generation ETag from a prior read. | ## Request body Required `application/json`: `ApiCredentialRotateRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `ApiCredentialIssueResult` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency or concurrent mutation conflict | `ProblemDetails` (application/problem+json) | | 412 | Entity tag precondition failed | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 428 | Entity tag precondition required | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "rotateApiCredential", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "in": "path", "name": "credentialId", "required": true, "schema": { "$ref": "#/components/schemas/ApiCredentialId" } }, { "description": "Opaque retry key retained for the public idempotency window.", "in": "header", "name": "Idempotency-Key", "required": true, "schema": { "maxLength": 255, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "description": "Strong resource generation ETag from a prior read.", "in": "header", "name": "If-Match", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiCredentialRotateRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiCredentialIssueResult" } } }, "description": "Successful response", "headers": { "ETag": { "description": "Strong credential generation entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency or concurrent mutation conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "412": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition failed", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "428": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Rotate an API credential and reveal the replacement secret once", "tags": [ "API credentials" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/revokeapicredential # Revoke credential `DELETE /v1/credentials/{credentialId}` Revoke a credential so it stops working. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `credentialId` | path | yes | `ApiCredentialId` | | | `If-Match` | header | yes | `EntityTag` | Strong resource generation ETag from a prior read. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `ApiCredentialMetadata` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 409 | Idempotency or concurrent mutation conflict | `ProblemDetails` (application/problem+json) | | 412 | Entity tag precondition failed | `ProblemDetails` (application/problem+json) | | 428 | Entity tag precondition required | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "revokeApiCredential", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "in": "path", "name": "credentialId", "required": true, "schema": { "$ref": "#/components/schemas/ApiCredentialId" } }, { "description": "Strong resource generation ETag from a prior read.", "in": "header", "name": "If-Match", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiCredentialMetadata" } } }, "description": "Successful response", "headers": { "ETag": { "description": "Strong credential generation entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "409": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Idempotency or concurrent mutation conflict", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "412": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition failed", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "428": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Entity tag precondition required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Revoke an API credential", "tags": [ "API credentials" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getorganizationcontext # Get organization `GET /v1/organization` See which organization and credential a request is acting as. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `OrganizationContext` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getOrganizationContext", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationContext" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read the verified organization and principal context", "tags": [ "Organization" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getorganizationentitlements # Get entitlements `GET /v1/organization/entitlements` See your plan, its limits, and how much of each you're using. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `OrganizationEntitlementView` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getOrganizationEntitlements", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationEntitlementView" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read the organization's plan, entitlements, usage, and lease freshness", "tags": [ "Organization" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getorganizationusage # Get usage `GET /v1/organization/usage` See your organization's usage totals. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `OrganizationUsageView` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getOrganizationUsage", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationUsageView" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read bounded organization usage, projection freshness, and entitlement alignment", "tags": [ "Organization" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getorganizationdefaultjurisdiction # Get default jurisdiction `GET /v1/organization/default-jurisdiction` See which region new monitors are created in by default. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `OrganizationDefaultJurisdiction` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getOrganizationDefaultJurisdiction", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationDefaultJurisdiction" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read where monitors are created when the request names no jurisdiction", "tags": [ "Organization" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/setorganizationdefaultjurisdiction # Set default jurisdiction `PUT /v1/organization/default-jurisdiction` Choose which region new monitors are created in. Existing monitors don't move. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | ## Request body Required `application/json`: `OrganizationDefaultJurisdictionRequest`. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `OrganizationDefaultJurisdiction` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 413 | Request payload too large | `ProblemDetails` (application/problem+json) | | 415 | Unsupported request media type | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "setOrganizationDefaultJurisdiction", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationDefaultJurisdictionRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationDefaultJurisdiction" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "413": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Request payload too large", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "415": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Unsupported request media type", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Choose where future monitors are created; existing monitors never move", "tags": [ "Organization" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/exportorganization # Export data `GET /v1/organization/export` Download your monitors, beats, incidents and usage. Secrets aren't included. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `includeObservationProvenance` | query | no | `boolean` | Include additive observation source-time and provenance fields. Disabled by default so previously generated strict V1 clients remain compatible. | | `includeObservationBuckets` | query | no | `boolean` | Include retained aggregate buckets beyond the raw observation window. Independent of observation provenance and disabled by default for previously generated clients. Repeat the selected export format when resuming; bucket capability is preserved by the export cursor. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "exportOrganization", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Include additive observation source-time and provenance fields. Disabled by default so previously generated strict V1 clients remain compatible.", "in": "query", "name": "includeObservationProvenance", "required": false, "schema": { "default": false, "type": "boolean" } }, { "description": "Include retained aggregate buckets beyond the raw observation window. Independent of observation provenance and disabled by default for previously generated clients. Repeat the selected export format when resuming; bucket capability is preserved by the export cursor.", "in": "query", "name": "includeObservationBuckets", "required": false, "schema": { "default": false, "type": "boolean" } } ], "responses": { "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Stream the organization's monitors, observations, incidents, and usage without secrets", "tags": [ "Organization" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getorganizationbilling # Get billing status `GET /v1/organization/billing` See your subscription status, and whether you're in a payment grace period. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `OrganizationBillingView` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getOrganizationBilling", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrganizationBillingView" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read the organization's subscription status, dispute state, and grace boundary", "tags": [ "Billing" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getbillingcancellationimpact # Preview cancellation `GET /v1/organization/billing/cancellation-impact` Before cancelling, see what would happen to each of your monitors. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `PlanChangeImpact` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getBillingCancellationImpact", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PlanChangeImpact" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "Read what ending the subscription would do to each existing monitor", "tags": [ "Billing" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/listbillingallotmenttransitions # List allotment transitions `GET /v1/organization/billing/allotment-transitions` See which monitors were suspended or released when your plan changed. Authentication: SignalSitter API credential or Clerk session JWT. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `cursor` | query | no | `string` | | | `limit` | query | no | `integer` | | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Successful response | `BillingAllotmentTransitionChangePage` (application/json) | | 400 | Invalid request | `ProblemDetails` (application/problem+json) | | 401 | Authentication required | `ProblemDetails` (application/problem+json) | | 403 | Permission denied | `ProblemDetails` (application/problem+json) | | 404 | Resource not found | `ProblemDetails` (application/problem+json) | | 429 | Authentication rate limited | `ProblemDetails` (application/problem+json) | | 500 | Internal server error | `ProblemDetails` (application/problem+json) | | 503 | Service temporarily unavailable | `ProblemDetails` (application/problem+json) | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "listBillingAllotmentTransitions", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "in": "query", "name": "cursor", "required": false, "schema": { "maxLength": 512, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:/+-]*$", "type": "string" } }, { "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 200, "minimum": 1, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BillingAllotmentTransitionChangePage" } } }, "description": "Successful response", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "400": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Invalid request", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "401": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication required", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "403": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Permission denied", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "404": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Resource not found", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "429": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Authentication rate limited", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "500": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Internal server error", "headers": { "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "503": { "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } }, "description": "Service temporarily unavailable", "headers": { "Retry-After": { "description": "Required retry delay in seconds.", "required": true, "schema": { "$ref": "#/components/schemas/RetryAfterHeader" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [ { "apiCredential": [] }, { "clerkSession": [] } ], "summary": "List monitor suspensions and releases caused by applied plan transitions", "tags": [ "Billing" ] } ``` --- Source: https://docs.signalsitter.com/reference/api/getopenapidocument # Get OpenAPI document `GET /v1/openapi.json` Download the full API description (OpenAPI) to generate a client or hand to an agent. Authentication: none. See the [REST guide](/guides/rest). ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | `X-Correlation-ID` | header | no | `CorrelationId` | Optional caller correlation identifier propagated to the response. | | `If-None-Match` | header | no | `EntityTag` | Previously returned generated-document ETag for a conditional read. | ## Request body No request body. ## Responses | Status | Description | Body | | --- | --- | --- | | 200 | Generated OpenAPI 3.1 document | `object` (application/vnd.oai.openapi+json) | | 304 | The generated document matches If-None-Match. | none | ## Operation contract References resolve within the [OpenAPI document](/openapi.json). ```json { "operationId": "getOpenApiDocument", "parameters": [ { "description": "Optional caller correlation identifier propagated to the response.", "in": "header", "name": "X-Correlation-ID", "required": false, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, { "description": "Previously returned generated-document ETag for a conditional read.", "in": "header", "name": "If-None-Match", "required": false, "schema": { "$ref": "#/components/schemas/EntityTag" } } ], "responses": { "200": { "content": { "application/vnd.oai.openapi+json": { "schema": { "type": "object" } } }, "description": "Generated OpenAPI 3.1 document", "headers": { "ETag": { "description": "Strong generated-document entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } }, "304": { "description": "The generated document matches If-None-Match.", "headers": { "ETag": { "description": "Strong generated-document entity tag.", "required": true, "schema": { "$ref": "#/components/schemas/EntityTag" } }, "X-Correlation-ID": { "description": "Correlation identifier shared by related operations.", "required": true, "schema": { "$ref": "#/components/schemas/CorrelationId" } }, "X-Request-ID": { "description": "Request identifier for this response.", "required": true, "schema": { "$ref": "#/components/schemas/RequestId" } } } } }, "security": [], "summary": "Read the generated SignalSitter V1 OpenAPI document", "tags": [ "API metadata" ] } ``` --- Source: https://docs.signalsitter.com/problems # Error codes Every API error carries a `code` and links to its page here. See [Errors](/guides/rest#errors) for the response shape. | Code | Status | Meaning | | --- | --- | --- | | [`signalsitter.invalid_request`](/problems/invalid_request) | 400 | Request not available | | [`signalsitter.validation_failed`](/problems/validation_failed) | 400 | Request validation failed | | [`signalsitter.authentication_required`](/problems/authentication_required) | 401 | Authentication required | | [`signalsitter.permission_denied`](/problems/permission_denied) | 403 | Permission denied | | [`signalsitter.not_found`](/problems/not_found) | 404 | Resource not found | | [`signalsitter.conflict`](/problems/conflict) | 409 | Conflicting request | | [`signalsitter.precondition_failed`](/problems/precondition_failed) | 412 | Precondition failed | | [`signalsitter.idempotency_conflict`](/problems/idempotency_conflict) | 409 | Idempotency key reused | | [`signalsitter.rate_limited`](/problems/rate_limited) | 429 | Too many requests | | [`signalsitter.temporarily_unavailable`](/problems/temporarily_unavailable) | 503 | Temporarily unavailable | | [`signalsitter.internal_error`](/problems/internal_error) | 500 | Internal error | | [`signalsitter.invalid_credential`](/problems/invalid_credential) | 401 | Credential no longer valid | | [`signalsitter.confirmation_required`](/problems/confirmation_required) | MCP | Confirmation required | | [`signalsitter.precondition_required`](/problems/precondition_required) | 428 | Precondition required | | [`signalsitter.payload_too_large`](/problems/payload_too_large) | 413 | Payload too large | | [`signalsitter.unsupported_media_type`](/problems/unsupported_media_type) | 415 | Unsupported media type | | [`signalsitter.callback_destination_rejected`](/problems/callback_destination_rejected) | 400 | Callback destination rejected | | [`signalsitter.callback_alias_conflict`](/problems/callback_alias_conflict) | 409 | Callback alias in use | | [`signalsitter.callback_limit_reached`](/problems/callback_limit_reached) | 409 | Callback endpoint limit reached | | [`signalsitter.monitor_archived`](/problems/monitor_archived) | 409 | Monitor archived | | [`signalsitter.monitor_deleted`](/problems/monitor_deleted) | 410 | Monitor deleted | | [`signalsitter.organization_deleted`](/problems/organization_deleted) | 410 | Organization deleted | --- Source: https://docs.signalsitter.com/problems/invalid_request # signalsitter.invalid_request **Request not available** · HTTP 400 · Not retryable The request is well-formed but asks for something that isn't on offer, such as checking out a plan that can't be bought. ## What to do Pick one of the plans offered for purchase, then send the request again. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/validation_failed # signalsitter.validation_failed **Request validation failed** · HTTP 400 · Not retryable The request doesn't match the API's schema. A field is missing, has the wrong type, or is out of range. Over MCP, the tool input is invalid. ## What to do Fix the fields named in fieldErrors. Don't send it again unchanged. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/authentication_required # signalsitter.authentication_required **Authentication required** · HTTP 401 · Not retryable The request has no usable credential. The Authorization header is missing, malformed, or holds a token SignalSitter doesn't recognise. ## What to do Send Authorization: Bearer followed by a current credential secret. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/permission_denied # signalsitter.permission_denied **Permission denied** · HTTP 403 · Not retryable The credential is valid but can't do this. Its preset doesn't allow the operation, or your plan or account state doesn't include it. ## What to do Use a credential with the right preset. If the problem includes a limit object, follow its remediation. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/not_found # signalsitter.not_found **Resource not found** · HTTP 404 · Not retryable Nothing with that ID exists in your organization and project. Another organization's resources return this too. ## What to do Check the ID and the project the credential belongs to. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/conflict # signalsitter.conflict **Conflicting request** · HTTP 409 · Not retryable The change clashes with the resource's current state, such as a transition it can't make from where it is. It's also returned when a monitor ID exists in more than one jurisdiction. ## What to do Re-read the resource and decide again. For a monitor ID in two jurisdictions, add ?jurisdiction= over REST or the jurisdiction input over MCP. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/precondition_failed # signalsitter.precondition_failed **Precondition failed** · HTTP 412 · Not retryable The version you sent no longer matches the resource, because it changed since you read it. For a callback endpoint, it can also mean the operation doesn't apply to that kind of endpoint; the detail says which. ## What to do Re-read the resource and send its new ETag or version. If the detail says the operation doesn't apply, don't retry it. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/idempotency_conflict # signalsitter.idempotency_conflict **Idempotency key reused** · HTTP 409 · Not retryable This Idempotency-Key was already used for a different request. ## What to do Use a new key for a different request. Reuse a key only to retry the same request. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/rate_limited # signalsitter.rate_limited **Too many requests** · HTTP 429 · Sometimes retryable The request went over a limit. It's either a short-term rate, such as requests per minute or beats faster than the cadence allows, or a plan limit such as active monitors. ## What to do If there's a Retry-After, wait that long and retry. If the limit object names a plan limit, free up capacity or upgrade. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/temporarily_unavailable # signalsitter.temporarily_unavailable **Temporarily unavailable** · HTTP 503 · Retryable Something on our side is briefly unavailable. Your request isn't the problem. ## What to do Wait for Retry-After, then retry. Resend a write with the same Idempotency-Key. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/internal_error # signalsitter.internal_error **Internal error** · HTTP 500 · Not retryable Something went wrong inside SignalSitter, not in your request. ## What to do Contact support and quote the request ID from the response. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/invalid_credential # signalsitter.invalid_credential **Credential no longer valid** · HTTP 401 · Not retryable SignalSitter recognised the credential, but it no longer works. It was revoked, rotated, or has expired. ## What to do Use the credential's current secret, or create a new credential in the dashboard. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/confirmation_required # signalsitter.confirmation_required **Confirmation required** · MCP tool error · Not retryable This MCP tool changes or removes something, so it needs explicit confirmation. Nothing changed. ## What to do Check the current state, then call the tool again with confirm set to true. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/precondition_required # signalsitter.precondition_required **Precondition required** · HTTP 428 · Not retryable This change needs an If-Match header, so it can't overwrite something you haven't seen. ## What to do Read the resource, then send its ETag in If-Match. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/payload_too_large # signalsitter.payload_too_large **Payload too large** · HTTP 413 · Not retryable The request body is over the size limit. REST and publish bodies can be up to 16 KiB. ## What to do Send a smaller body. For a beat, keep the body to 16 KiB or less and shorten long headers. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/unsupported_media_type # signalsitter.unsupported_media_type **Unsupported media type** · HTTP 415 · Not retryable The request has a body that isn't declared as JSON. ## What to do Send the body as JSON with Content-Type: application/json. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/callback_destination_rejected # signalsitter.callback_destination_rejected **Callback destination rejected** · HTTP 400 · Not retryable Callback URLs must use HTTPS and point at a public host. This one isn't HTTPS, or its host is private or local. ## What to do Use a public HTTPS URL. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/callback_alias_conflict # signalsitter.callback_alias_conflict **Callback alias in use** · HTTP 409 · Not retryable Another callback endpoint in your organization already uses that alias. ## What to do Pick a different alias, or update the endpoint that already has it. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/callback_limit_reached # signalsitter.callback_limit_reached **Callback endpoint limit reached** · HTTP 409 · Not retryable Your organization already has as many callback endpoints as your plan allows. ## What to do Delete an endpoint you no longer use, or upgrade your plan. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/monitor_archived # signalsitter.monitor_archived **Monitor archived** · HTTP 409 · Not retryable The monitor is archived, so it doesn't accept beats. ## What to do Restore the monitor, then send again. Restoring needs a free monitor slot on your plan. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/monitor_deleted # signalsitter.monitor_deleted **Monitor deleted** · HTTP 410 · Not retryable The monitor was deleted. Deleted monitors can't come back, and their IDs can't be reused. ## What to do Create a new monitor with a new ID and point your job at its URL. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems). --- Source: https://docs.signalsitter.com/problems/organization_deleted # signalsitter.organization_deleted **Organization deleted** · HTTP 410 · Not retryable The organization this credential belongs to was deleted. Its monitors and credentials no longer work. ## What to do Stop sending requests with this credential. To keep monitoring, create a new organization. See [Errors](/guides/rest#errors) for the response shape, or [every error code](/problems).