InfraNest Integrations API

The Integrations API from InfraNest — 6 operation(s) for integrations.

Operations 6

GET /api/organizations/{organization_id}/integrations List connected integrations #
GET /api/organizations/{organization_id}/integrations/{provider}/activity/export Export integration activity as CSV #
GET /api/organizations/{organization_id}/integrations/{provider}/activity List integration activity #
GET /api/organizations/{organization_id}/integrations/{provider}/accounts/{id} Get an integration account #
GET /api/organizations/{organization_id}/integrations/{provider} Get an integration #
GET /api/organizations/{organization_id}/connect-requests List connect requests #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/infranest:infranest-integrations-api"
All apis
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.

Get an API 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 Specification

infranest-integrations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: InfraNest Integrations 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: Integrations
  description: ''
paths:
  /api/organizations/{organization_id}/integrations:
    get:
      summary: List connected integrations
      operationId: getApiOrganizationsOrganization_idIntegrations
      description: 'Everything the organization has connected — cloud, DNS, registrar and certificate accounts, alert destinations, outbound webhooks, automation connections and calendars — each with its status and health. A cloud, DNS, registrar or certificate account also carries `provider_status`: what the provider itself has wrong right now that concerns you — open incidents from its status page or feed, and failures InfraNest sees on its own calls to the provider across several workspaces — with `explains_failures` true when it is the provider’s API that is failing, so a failing account is the provider’s outage rather than its credential. It is null when nothing is wrong. Also returns summary counts and the integrations your plan does not include (`locks`).'
      parameters:
      - in: path
        name: organization_id
        required: true
        description: Your organization's ID.
        schema:
          type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              example:
                connections:
                - id: 1
                  kind: provider
                  provider: hetzner
                  integration_key: hetzner
                  name: Hetzner — Production
                  categories:
                  - cloud
                  - dns
                  capabilities:
                  - cloud
                  - dns
                  counts:
                    servers: 6
                    zones: 2
                    domains: 0
                    certs: 1
                  suspended_capabilities: []
                  incident: null
                  auth_kind: api_token
                  enabled: true
                  status: connected
                  locked: false
                  health:
                    status: ok
                    success_rate: 100
                    total_calls: 97
                    last_error_at: null
                    last_success_at: '2026-01-15T12:00:00Z'
                  rate_limited: null
                  last_activity_at: '2026-01-15T12:00:00Z'
                  provider_status: null
                - id: 2
                  kind: provider
                  provider: cloudflare
                  integration_key: cloudflare
                  name: Cloudflare DNS
                  categories:
                  - dns
                  - domains
                  capabilities:
                  - dns
                  - registrar
                  counts:
                    servers: 0
                    zones: 5
                    domains: 0
                    certs: 1
                  suspended_capabilities: []
                  incident: null
                  auth_kind: api_token
                  enabled: true
                  status: connected
                  locked: false
                  health:
                    status: ok
                    success_rate: 100
                    total_calls: 49
                    last_error_at: null
                    last_success_at: '2026-01-15T12:00:00Z'
                  rate_limited: null
                  last_activity_at: '2026-01-15T12:00:00Z'
                  provider_status: null
                summary:
                  total: 25
                  connected: 19
                  degraded: 3
                  failing: 2
                  disabled: 1
                  issues: 5
                  locked: 0
                locks: []
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '429':
          $ref: '#/components/responses/Error429'
      tags:
      - Integrations
      x-infranest-scope: cloud.read
      x-infranest-token-writable: false
      x-infranest-module: integrations
      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}/integrations/{provider}/activity/export:
    get:
      summary: Export integration activity as CSV
      operationId: streamThefilteredAPIActivityLogForAProviderAsACSVDownload
      description: Downloads every call logged for this integration as a CSV file, newest first. Takes the same `status`, `capability`, `direction`, `credential_id` and `search` filters as the activity list.
      parameters:
      - in: path
        name: organization_id
        required: true
        description: Your organization's ID.
        schema:
          type: integer
      - in: path
        name: provider
        required: true
        description: The provider.
        schema:
          type: string
      responses:
        '200':
          description: The integration's activity log as CSV.
          content:
            text/csv:
              schema:
                type: string
                format: binary
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '429':
          $ref: '#/components/responses/Error429'
      tags:
      - Integrations
      x-infranest-scope: cloud.read
      x-infranest-token-writable: false
      x-infranest-module: integrations
      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}/integrations/{provider}/activity:
    get:
      summary: List integration activity
      operationId: providerAPIActivity256TheIntegrationLogAcrossAllOfThisOrgsCredentialsForTheProviderPaginated+FilterableaccountCapabilityStatusSearchFollowingTheStandardServerTableContractSoTheDetailPagesActivityTabUsesTheSharedDataTable
      description: The calls made to and received from this integration, newest first, paginated with `per_page` (5 to 100, default 20). Filter with `status` (`success` or `error`), `capability`, `direction`, `credential_id` and `search`; `meta` lists the accounts and filter values available.
      parameters:
      - in: path
        name: organization_id
        required: true
        description: Your organization's ID.
        schema:
          type: integer
      - in: path
        name: provider
        required: true
        description: The provider.
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              example:
                data:
                - id: 9
                  credential_id: 1
                  capability: cloud
                  direction: outbound
                  method: GET
                  endpoint: /v1/servers
                  action: listServers
                  success: true
                  http_status: 200
                  duration_ms: 60
                  error_type: null
                  error_message: null
                  created_at: '2026-01-15T12:00:00.000000Z'
                - id: 10
                  credential_id: 1
                  capability: cloud
                  direction: outbound
                  method: GET
                  endpoint: /v1/volumes
                  action: listVolumes
                  success: true
                  http_status: 200
                  duration_ms: 112
                  error_type: null
                  error_message: null
                  created_at: '2026-01-15T11:57:00.000000Z'
                total: 672
                last_page: 34
                meta:
                  accounts:
                  - id: 1
                    label: Hetzner — Production
                    context: []
                  capabilities:
                  - cloud
                  directions:
                  - outbound
                  rate_limit: null
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '429':
          $ref: '#/components/responses/Error429'
      tags:
      - Integrations
      x-infranest-scope: cloud.read
      x-infranest-token-writable: false
      x-infranest-module: integrations
      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}/integrations/{provider}/accounts/{id}:
    get:
      summary: Get an integration account
      operationId: gETOrganizationsorganizationintegrationsprovideraccountsid
      description: One connected account of an integration, whatever kind it is, with its status and health. A provider account also carries `provider_status`, the same as in the list of integrations. Returns 404 when the account does not exist or does not belong to this integration and organization.
      parameters:
      - in: path
        name: organization_id
        required: true
        description: Your organization's ID.
        schema:
          type: integer
      - in: path
        name: provider
        required: true
        description: The provider.
        schema:
          type: string
      - in: path
        name: id
        required: true
        description: The id's ID.
        schema:
          type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              example:
                id: 1
                provider: hetzner
                label: Hetzner — Production
                enabled: true
                removing: false
                is_oauth: false
                auth_kind: api_token
                oauth: null
                error_email_enabled: true
                sync_slowed: false
                alerts_muted_until: null
                incident: null
                notices: []
                spending: null
                capabilities:
                - cloud
                - dns
                supported_capabilities:
                - cloud
                - dns
                cloud_capabilities:
                  native_delete_protection: true
                  server_destroy: true
                  server_destroy_is_cancellation: false
                  server_create: true
                  server_rename: true
                  server_resize: true
                  console: true
                  snapshots: true
                  backups: true
                  isos: true
                  rescue: true
                  placement_groups: true
                  public_network_toggle: true
                  scheduled_backups: true
                  private_networks: true
                  private_network_attach: true
                  network_join_on_create: false
                  network_attach_ip_choice: true
                  private_network_unfiltered: true
                  floating_ips: true
                  networks_creatable: true
                  network_cidr: true
                  network_subnets: true
                  network_routes: true
                  network_rename: true
                  network_ip_range_extendable: true
                  firewalls_creatable: true
                  firewall_multi_server: true
                  firewall_renamable: true
                  firewall_outbound: true
                  firewall_ipv6: true
                  firewall_dynamic_ip: true
                  server_firewall: false
                  load_balancers_creatable: true
                  load_balancer_rename: true
                  load_balancer_algorithm: true
                  load_balancer_services: true
                  load_balancer_targets: true
                  volumes_creatable: true
                  volume_resize: true
                  volume_rename: true
                  volume_native_delete_protection: true
                  volume_snapshots: false
                  network_native_delete_protection: true
                  user_data: true
                  install_flavour: false
                  images_per_plan: false
                  metrics: true
                  metrics_disk_throughput: true
                  metrics_memory_disk: false
                  rdns_subnet: true
                  rdns_address_list: false
                  reverse_dns: true
                  snapshot_description: true
                  snapshot_protection: true
                dns_capabilities:
                  record_writes: true
                  bulk_replace: false
                  zone_create: true
                  zone_delete: true
                  record_proxying: false
                  signing: false
                dns_scope: any
                cloud_firewall_protocols:
                - tcp
                - udp
                enabled_capabilities: null
                suspended_capabilities: []
                resource_counts:
                  dns: 2
                  certificates: 1
                  cloud: 6
                verified_at: '2025-10-15T12:00:00.000000Z'
                created_at: '2026-01-15T12:00:00.000000Z'
                fields:
                - api_token
                environment: null
                field_values:
                  api_token:
                    set: true
                    secret: true
                    display: ••••oken
                context: []
                health:
                  status: ok
                  success_rate: 100
                  total_calls: 97
                  last_error_at: null
                  last_success_at: '2026-01-15T12:00:00Z'
                registrar_operations: null
                provider_status: null
                scope_check: null
                scope_checked_at: null
                disabled_operations: []
                api_base: /organizations/1/provider-credentials/1
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '429':
          $ref: '#/components/responses/Error429'
      tags:
      - Integrations
      x-infranest-scope: cloud.read
      x-infranest-token-writable: false
      x-infranest-module: integrations
      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}/integrations/{provider}:
    get:
      summary: Get an integration
      operationId: appStoreDetailForOneProvider256TheCodeOwnedStructuralConfig+DirectusPresentationContentresolvedForTheRequestLocale+ThisOrgsExistingConnectionsForThatProvider
      description: What the integration offers, the organization’s connections to it, and whether your plan allows connecting it. Returns 404 for an unknown integration.
      parameters:
      - in: path
        name: organization_id
        required: true
        description: Your organization's ID.
        schema:
          type: integer
      - in: path
        name: provider
        required: true
        description: The provider.
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              example:
                provider:
                  key: hetzner
                  label: Hetzner
                  logo: hetzner
                  capabilities:
                  - cloud
                  - dns
                  categories:
                  - cloud
                  - dns
                  dns_scope: any
                  features:
                  - zone_discovery
                  - record_ids
                  environments: []
                  oauth: false
                  one_click: false
                  needs_allowlist: false
                  featured: true
                  premium: false
                  min_plan: null
                  max_connections: null
                  credentials:
                  - key: api_token
                    label: integrations.providers.hetzner.apiToken.label
                    secret: true
                    multiline: false
                    help: integrations.providers.hetzner.apiToken.help
                    help_params:
                      aws_account_id: InfraNest's AWS account (set AWS_INFRANEST_ACCOUNT_ID)
                    placeholder: LRK9mXv2QpT8sYw4…
                    prefill: null
                    type: text
                    options: null
                    depends_on: null
                    show_when: null
                    default: null
                  kind: provider
                  content: null
                connections:
                - id: 1
                  kind: provider
                  provider: hetzner
                  integration_key: hetzner
                  name: Hetzner — Production
                  categories:
                  - cloud
                  - dns
                  capabilities:
                  - cloud
                  - dns
                  counts:
                    servers: 6
                    zones: 2
                    domains: 0
                    certs: 1
                  suspended_capabilities: []
                  incident: null
                  auth_kind: api_token
                  enabled: true
                  status: connected
                  locked: false
                  health:
                    status: ok
                    success_rate: 100
                    total_calls: 97
                    last_error_at: null
                    last_success_at: '2026-01-15T12:00:00Z'
                  rate_limited: null
                  last_activity_at: '2026-01-15T12:00:00Z'
                  provider_status: null
                gate:
                  locked: false
                  reason: null
                  premium: false
                  min_plan: null
                  min_plan_name: null
                  current_plan: pro
                  current_plan_name: Pro
                  max_connections: null
                  used: 1
                  grandfathered: false
                  included: false
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '429':
          $ref: '#/components/responses/Error429'
      tags:
      - Integrations
      x-infranest-scope: cloud.read
      x-infranest-token-writable: false
      x-infranest-module: integrations
      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}/connect-requests:
    get:
      summary: List connect requests
      operationId: gETOrganizationsorganizationconnectRequestsprovider
      description: The 20 most recent links you created to ask someone else to connect a provider account, newest first, with who requested each one. Filter with `provider` or `kind`; the response also gives how many days a new link stays valid.
      parameters:
      - in: path
        name: organization_id
        required: true
        description: Your organization's ID.
        schema:
          type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              example:
                data: []
                ttl_days: 3
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '429':
          $ref: '#/components/responses/Error429'
      tags:
      - Integrations
      x-infranest-scope: cloud.read
      x-infranest-token-writable: false
      x-infranest-module: cloud
      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