InfraNest Automations API
The Automations API from InfraNest — 8 operation(s) for automations.
The Automations API from InfraNest — 8 operation(s) for automations.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/infranest:infranest-automations-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: InfraNest Automations API
description: Domains, DNS, cloud servers, certificates and uptime monitoring in one API, across the registrars, DNS hosts and clouds you already use, such as Cloudflare, Route 53, Hetzner and GoDaddy. Start in a free sandbox with sample data, use scoped tokens, try DNS changes as a dry run first, and retry safely with idempotency keys.
version: 1.0.0
x-logo:
url: https://developers.infranest.io/logo.svg
altText: InfraNest
contact:
name: InfraNest
url: https://developers.infranest.io
termsOfService: https://infranest.io/terms
servers:
- url: https://api.infranest.io
security:
- default: []
tags:
- name: Automations
description: ''
paths:
/api/organizations/{organization_id}/automations:
get:
summary: List automations
operationId: getApiOrganizationsOrganization_idAutomations
description: 'Every automation, newest first, with its tags and run statistics: runs in the last 30 and 7 days, success rate, average duration and the last run’s status. Test runs are not counted. `mode` is `act`, or `observe` for one that only records what it would have done, and `observed_30d` counts those records.'
parameters:
- in: path
name: organization_id
required: true
description: Your organization's ID.
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
example:
- id: 14
organization_id: 1
name: Maintenance opened → reboot web-01 at its quietest hour
trigger_event: maintenance.started
conditions: []
actions:
- action: wait
config:
quiet: quietest
quiet_server_id: 1
- action: server_reboot
config:
server: 1
enabled: true
cooldown_seconds: 0
consecutive_failures: 0
disabled_reason: null
last_triggered_at: null
created_by: 1
created_at: '2026-01-15T12:00:00.000000Z'
updated_at: '2026-01-15T12:00:00.000000Z'
condition_match: all
run_as: owner
trigger_kind: event
schedule: null
trigger_events: null
deleted_at: null
purge_after: null
purge_reminder_sent_at: null
deleted_by_id: null
deleted_by_label: null
deletion_reason: null
disabled_detail: null
template_key: null
mode: act
managed_by_connection_id: null
tags: []
automatic_fix: false
acting_blocked_by_plan: false
runs_30d: 0
observed_30d: 0
runs_7d: 0
success_rate: null
avg_duration_ms: null
last_status: null
last_run_at: null
spark:
- total: 0
failed: 0
- total: 0
failed: 0
- id: 7
organization_id: 1
name: Incidents to Jira (northwind.atlassian.net)
trigger_event: incident.opened
conditions: []
actions:
- action: jira_create_issue
config:
if_open: comment
project: OPS
summary: '{{title}}'
issue_type: '10001'
description: Opened by InfraNest for {{check_name}}. The incident is linked from this issue.
connection_id: 4
enabled: true
cooldown_seconds: 0
consecutive_failures: 0
disabled_reason: null
last_triggered_at: null
created_by: 1
created_at: '2026-01-15T12:00:00.000000Z'
updated_at: '2026-01-15T12:00:00.000000Z'
condition_match: all
run_as: owner
trigger_kind: event
schedule: null
trigger_events:
- incident.opened
deleted_at: null
purge_after: null
purge_reminder_sent_at: null
deleted_by_id: null
deleted_by_label: null
deletion_reason: null
disabled_detail: null
template_key: null
mode: act
managed_by_connection_id: 4
tags: []
automatic_fix: false
acting_blocked_by_plan: false
runs_30d: 0
observed_30d: 0
runs_7d: 0
success_rate: null
avg_duration_ms: null
last_status: null
last_run_at: null
spark:
- total: 0
failed: 0
- total: 0
failed: 0
'401':
$ref: '#/components/responses/Error401'
'403':
$ref: '#/components/responses/Error403'
'404':
$ref: '#/components/responses/Error404'
'429':
$ref: '#/components/responses/Error429'
tags:
- Automations
x-infranest-scope: monitoring.read
x-infranest-token-writable: false
x-infranest-module: automations
x-infranest-errors:
- unauthenticated
- scope_missing
- wrong_organization
- test_token_required
- test_token_sandbox_only
- permission_denied
- not_found
- rate_limited
/api/organizations/{organization_id}/automations/{automationRule_id}:
get:
summary: Get an automation
operationId: getApiOrganizationsOrganization_idAutomationsAutomationRule_id
description: One automation with its trigger, conditions, actions and tags, plus its 20 most recent runs and their steps.
parameters:
- in: path
name: organization_id
required: true
description: Your organization's ID.
schema:
type: integer
- in: path
name: automationRule_id
required: true
description: The automationRule's ID.
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
example:
id: 1
organization_id: 1
name: Release published → announce on status page
trigger_event: github.release
conditions:
- op: eq
field: action
value: published
- op: eq
field: prerelease
value: 'false'
actions:
- action: create_status_announcement
config:
body: '{{name}}.'
title: 'Released: {{tag}}'
status_page_id: 1
enabled: true
cooldown_seconds: 0
consecutive_failures: 0
disabled_reason: null
last_triggered_at: null
created_by: 1
created_at: '2026-01-15T12:00:00.000000Z'
updated_at: '2026-01-15T12:00:00.000000Z'
condition_match: all
run_as: owner
trigger_kind: event
schedule: null
trigger_events: null
deleted_at: null
purge_after: null
purge_reminder_sent_at: null
deleted_by_id: null
deleted_by_label: null
deletion_reason: null
disabled_detail: null
template_key: null
mode: act
managed_by_connection_id: null
tags: []
runs: []
automatic_fix: false
acting_blocked_by_plan: false
'401':
$ref: '#/components/responses/Error401'
'403':
$ref: '#/components/responses/Error403'
'404':
$ref: '#/components/responses/Error404'
'429':
$ref: '#/components/responses/Error429'
tags:
- Automations
x-infranest-scope: monitoring.read
x-infranest-token-writable: false
x-infranest-module: automations
x-infranest-errors:
- unauthenticated
- scope_missing
- wrong_organization
- test_token_required
- test_token_sandbox_only
- permission_denied
- not_found
- rate_limited
/api/organizations/{organization_id}/automations/{automationRule_id}/runs:
get:
summary: List an automation’s runs
operationId: runHistorymostRecentFirstEachWithItsPerStepResults
description: The automation’s run history with each run’s steps, newest first, 25 per page. Filter with `status` and the dates `from` and `to`, and with `observed=1` for only the runs that recorded what the automation would have done. Unless you may edit automations, what triggered each run is left out and `details_hidden` is true.
parameters:
- in: path
name: organization_id
required: true
description: Your organization's ID.
schema:
type: integer
- in: path
name: automationRule_id
required: true
description: The automationRule's ID.
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
example:
details_hidden: false
current_page: 1
data: []
first_page_url: http://localhost/api/organizations/1/automations/1/runs?page=1
from: null
last_page: 1
last_page_url: http://localhost/api/organizations/1/automations/1/runs?page=1
links:
- url: null
label: '« Previous'
page: null
active: false
- url: http://localhost/api/organizations/1/automations/1/runs?page=1
label: '1'
page: 1
active: true
next_page_url: null
path: http://localhost/api/organizations/1/automations/1/runs
per_page: 25
prev_page_url: null
to: null
total: 0
'401':
$ref: '#/components/responses/Error401'
'403':
$ref: '#/components/responses/Error403'
'404':
$ref: '#/components/responses/Error404'
'429':
$ref: '#/components/responses/Error429'
tags:
- Automations
x-infranest-scope: monitoring.read
x-infranest-token-writable: false
x-infranest-module: automations
x-infranest-errors:
- unauthenticated
- scope_missing
- wrong_organization
- test_token_required
- test_token_sandbox_only
- permission_denied
- not_found
- rate_limited
/api/organizations/{organization_id}/automation-connections:
get:
summary: List automation connections
operationId: theOrgsConnectionsnoSecrets
description: The accounts automations can act through, such as GitHub, Jira or PagerDuty, with each one’s status, whether it is paused and whether its triggers can fire. `actions` lists what you can do with each one, in order — `test`, `reconnect` or `replace_key`, `rename`, `pause`, `disconnect` — and `needs_reconnect` is true when the provider no longer accepts its access, so reconnecting or replacing the key brings it back without changing its id.
parameters:
- in: path
name: organization_id
required: true
description: Your organization's ID.
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
example:
- id: 1
provider: pagerduty
kind: oauth
label: Northwind on-call
meta:
service_name: Platform — production
account: northwind
auth: oauth
region: us
authorized_by:
name: Alex Rivera
email: demo@example.com
webhook_subscription_id: PD3WHS1
status: active
paused: false
plan_paused: false
triggers_on: false
actions:
- rename
- pause
needs_reconnect: false
created_at: '2026-01-15T12:00:00+00:00'
- id: 2
provider: github
kind: github_app
label: northwyndr
meta:
installation_id: '20000001'
account: northwyndr
status: active
paused: false
plan_paused: false
triggers_on: true
actions:
- rename
- disconnect
needs_reconnect: false
created_at: '2026-01-15T12:00:00+00:00'
'401':
$ref: '#/components/responses/Error401'
'403':
$ref: '#/components/responses/Error403'
'404':
$ref: '#/components/responses/Error404'
'429':
$ref: '#/components/responses/Error429'
tags:
- Automations
x-infranest-scope: monitoring.read
x-infranest-token-writable: false
x-infranest-module: automations
x-infranest-errors:
- unauthenticated
- scope_missing
- wrong_organization
- test_token_required
- test_token_sandbox_only
- permission_denied
- not_found
- rate_limited
/api/organizations/{organization_id}/automation-connections/{automationConnection_id}/incident-reports:
get:
summary: Get a docs tool’s postmortem settings
operationId: theSectionsSettingsThePlacesAReportCanGoAndTheLastTestPage
description: 'For a Notion connection: whether it writes a postmortem when an incident resolves, the database it goes into (`target`) and which incidents count (`scope`: `all`, `critical` or `monitors`), the databases to choose from, and the last test page.'
parameters:
- in: path
name: organization_id
required: true
description: Your organization's ID.
schema:
type: integer
- in: path
name: automationConnection_id
required: true
description: The automationConnection's ID.
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
example:
enabled: true
rule_id: 8
target: 1f2e3d4c-5b6a-4798-8a1b-2c3d4e5f6a01
scope: all
monitor_ids: []
target_noun: database
targets:
- id: 1f2e3d4c-5b6a-4798-8a1b-2c3d4e5f6a01
name: Postmortems
- id: 1f2e3d4c-5b6a-4798-8a1b-2c3d4e5f6a02
name: Incident log
targets_error: null
test:
status: written
page:
id: 2b3c4d5e-6f70-4812-9a3b-4c5d6e7f8091
url: https://www.notion.so/northwind/Test-postmortem-2b3c4d5e6f7048129a3b4c5d6e7f8091
sample: false
error: null
at: '2025-12-25T12:06:00+00:00'
'401':
$ref: '#/components/responses/Error401'
'403':
$ref: '#/components/responses/Error403'
'404':
$ref: '#/components/responses/Error404'
'429':
$ref: '#/components/responses/Error429'
tags:
- Automations
x-infranest-scope: monitoring.read
x-infranest-token-writable: false
x-infranest-module: automations
x-infranest-errors:
- unauthenticated
- scope_missing
- wrong_organization
- test_token_required
- test_token_sandbox_only
- permission_denied
- not_found
- rate_limited
/api/organizations/{organization_id}/automation-connections/{automationConnection_id}/incident-reports/targets:
get:
summary: List where postmortems can go
operationId: thePlacesAReportCanGoForTheWriteAPostmortemStepsPickerdatavalueLabelLikeEveryBuilderLookupWithTheReasonWhenTheToolWouldNotAnswerAlsoThePublishTheIncidentReviewSteps5839AConnectionThatPublishesReviewsWithoutWritingPostmortemsConfluenceThroughJirasALinearProjectListsThePlacesAReviewCanGoAndSayspermissionWhileTheExtraGrantItNeedsIsMissing
description: The databases this connection can write a postmortem into, as `{value, label}` rows — only those shared with the connection. When the tool would not answer, `data` is empty and `error` says why.
parameters:
- in: path
name: organization_id
required: true
description: Your organization's ID.
schema:
type: integer
- in: path
name: automationConnection_id
required: true
description: The automationConnection's ID.
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
example:
data:
- value: 1f2e3d4c-5b6a-4798-8a1b-2c3d4e5f6a01
label: Postmortems
- value: 1f2e3d4c-5b6a-4798-8a1b-2c3d4e5f6a02
label: Incident log
'401':
$ref: '#/components/responses/Error401'
'403':
$ref: '#/components/responses/Error403'
'404':
$ref: '#/components/responses/Error404'
'429':
$ref: '#/components/responses/Error429'
tags:
- Automations
x-infranest-scope: monitoring.read
x-infranest-token-writable: false
x-infranest-module: automations
x-infranest-errors:
- unauthenticated
- scope_missing
- wrong_organization
- test_token_required
- test_token_sandbox_only
- permission_denied
- not_found
- rate_limited
/api/organizations/{organization_id}/automation-connections/{automationConnection_id}/remembered-settings:
get:
summary: List switches remembered for this account
operationId: gETAutomationConnectionsconnectionrememberedSettingsTheSwitchesThisAccountHadWhenItWasLastDisconnected5825StillWithinTheir30DaysThatThisConnectionDoesNotAlreadyHaveOnReadOnTheJustConnectedScreenToOfferThemBack
description: When this connection reaches an account that was disconnected in the last 30 days (the same Linear or Notion workspace, the same Jira site), the switches that account had on — `incident_tickets` (Issues for Incidents) or `incident_reports` (Postmortems) — with their `target`, its name as this connection sees it (`target_name`, null when the tool would not say), `scope` and when the offer lapses (`expires_at`). Switches this connection already has on are left out, and another account gets an empty list.
parameters:
- in: path
name: organization_id
required: true
description: Your organization's ID.
schema:
type: integer
- in: path
name: automationConnection_id
required: true
description: The automationConnection's ID.
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
example:
offers: []
'401':
$ref: '#/components/responses/Error401'
'403':
$ref: '#/components/responses/Error403'
'404':
$ref: '#/components/responses/Error404'
'429':
$ref: '#/components/responses/Error429'
tags:
- Automations
x-infranest-scope: monitoring.read
x-infranest-token-writable: false
x-infranest-module: automations
x-infranest-errors:
- unauthenticated
- scope_missing
- wrong_organization
- test_token_required
- test_token_sandbox_only
- permission_denied
- not_found
- rate_limited
/api/organizations/{organization_id}/automation-connections/{automationConnection_id}/other-product:
get:
summary: Get the other product this connection’s site offers
operationId: gETAutomationConnectionsconnectionotherProductfromtileTheSitesOtherProductOfferedOnceOnTheJustConnectedScreen5846AllowConfluenceAfterAJiraConnectTurnOnIssuesForIncidentsAfterAConfluenceOneOrSayConfluenceIsReadyfromIsTheTileThePersonConnectedFromOurRowsOnly
description: 'For a connection whose account reaches more than one product (an Atlassian site with Jira and Confluence), what to offer next, seen from the tile it was connected from (`from`: `jira` or `confluence`). `offer.kind` is `grant` (allow the other product with one more sign-in on the same connection, named in `grant`), `turn_on` (turn on the switch named in `switch`, `incident_tickets`) or `ready` (the connection already reaches it), with the product, the `site`, and the current default place (`default_target`, `default_target_name`). `offer` is null when the site does not have the other product, or the offer was dismissed for this connection. Read from what InfraNest recorded; nothing is asked of the tool.'
parameters:
- in: path
name: organization_id
required: true
description: Your organization's ID.
schema:
type: integer
- in: path
name: automationConnection_id
required: true
description: The automationConnection's ID.
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
example:
offer: null
'401':
$ref: '#/components/responses/Error401'
'403':
$ref: '#/components/responses/Error403'
'404':
$ref: '#/components/responses/Error404'
'429':
$ref: '#/components/responses/Error429'
tags:
- Automations
x-infranest-scope: monitoring.read
x-infranest-token-writable: false
x-infranest-module: automations
x-infranest-errors:
- unauthenticated
- scope_missing
- wrong_organization
- test_token_required
- test_token_sandbox_only
- permission_denied
- not_found
- rate_limited
components:
responses:
Error401:
description: The token is missing, wrong, expired or revoked. The body is an Error; its `code` says which.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Error404:
description: Nothing exists at this address, or you cannot see it. The body is an Error; its `code` says which.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Error429:
description: 'Too many requests: wait the seconds in Retry-After. The body is an Error; its `code` says which.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Error403:
description: The token or your role may not do this here. The body is an Error; its `code` says which.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
required:
- code
- message
- hint
- retryable
properties:
code:
type: string
enum:
- unauthenticated
- scope_missing
- session_only
- not_token_writable
- write_disabled
- wrong_organization
- token_ip_not_allowed
- test_token_required
- test_token_sandbox_only
- api_token_required
- sandbox_personal
- sandbox_needs_organization
- organization_offline
- permission_denied
- forbidden
- organization_suspended
- read_only_session
- sso_required
- two_factor_setup_required
- password_reset_required
- email_verification_required
- plan_limit
- not_found
- method_not_allowed
- conflict
- validation_failed
- unprocessable
- range_too_large
- rate_limited
- idempotency_key_reused
- idempotency_in_progress
- provider_refused
- provider_rate_limited
- provider_unavailable
- maintenance
- server_error
description: 'What kind of error this is. Stable: codes are added, never renamed or removed.'
message:
type: string
description: A sentence for people. May be reworded.
hint:
type: string
description: What to do about it.
retryable:
type: boolean
description: Whether the same request can succeed later unchanged.
docs_url:
type: string
format: uri
reference:
type: string
description: The request ID; also the X-Request-Id header.
retry_after:
type: integer
description: Seconds to wait before retrying.
required:
type: string
description: The missing token scope (scope_missing).
required_permission:
type: string
description: The missing role permission (permission_denied).
errors:
type: object
additionalProperties:
type: array
items:
type: string
securitySchemes:
default:
type: http
scheme: bearer
description: Create a token in the app under My account → Developer. Tokens are managed in the app only, never through the API.
externalDocs:
description: 'InfraNest: domains, DNS, cloud servers, certificates and uptime monitoring in one place'
url: https://infranest.io