Johnson Controls website screenshot

Johnson Controls

Johnson Controls is a global diversified technology and multi-industrial leader serving customers in over 150 countries, providing products, services, and solutions for buildings (HVAC, fire, security, building automation), energy storage, and connected building platforms (Metasys, OpenBlue). Its developer surface is the Metasys REST API, served by each customer's own Metasys site director and documented publicly (with a versioned OpenAPI reference) at jci-metasys.github.io/api-landing.

Johnson Controls publishes 11 API contracts indexed on the APIs.io network, including Activities API, Alarms API, Audits API, and 8 more. Tagged areas include Building Automation, Energy Storage, Fire & Security, HVAC, and Smart Buildings.

The Johnson Controls catalog on APIs.io includes 1 JSON-LD context and 1 Spectral governance ruleset.

Johnson Controls’ developer surface includes CLI, changelog, getting-started guide, authentication, documentation, support, and 31 more developer resources.

41.2/100 developing ▼ -9.5 Agent 33/100 agent ready Front door AI 4/6 moderate Heartbeat 68/100 alive Full breakdown ↓
scored 2026-11-06 · rubric v0.27.0 · Show this score on your site →
1 published contract 2 Agent Skills
Building AutomationEnergy StorageFire & SecurityHVACSmart BuildingsFortune 100

What this lets a business do 2

Business capabilities this provider's published APIs can perform, derived from its own contracts. Browse all capabilities →

Facilities Management
BC-700
Equipment
GET /equipment GET /equipment/{equipmentId} GET /equipment/{equipmentId}/upstreamEquipment GET /spaces/{spaceId}/equipment
Physical Asset Management
BC-1040
Equipment
GET /equipment GET /equipment/{equipmentId} GET /equipment/{equipmentId}/upstreamEquipment GET /equipment/tree

Kin Score

Kin Score Kin Score How this is scored →
scored 2026-11-06 · rubric v0.27.0
Regulatory Posture applies to this provider. Its tags matched the Energy & Utilities regime, so Regulatory Posture carries 15 points of the composite. If this regime is wrong for your business, say so on your provider repo — the applicability map is public and we will correct it.
Create-or-Update Ergonomics applies to this provider. This API accepts writes, so it carries 10 points of the composite. It is scored from the published contracts themselves: whether a caller can create-or-update in one call, whether the write accepts a key the caller already holds, and whether the response says which branch ran. Without that, every write needs a search-and-branch in front of it, and the first time that check is skipped a duplicate record is created. Scored against the observed mean rather than raw — a provider at the catalog average is unchanged by this facet, not penalised by it.
The six quality facets above are damped to 75 points between them, because the conditional facet above carries the other 25. That is why each facet's contribution is shown against a damped maximum: raising a quality facet moves the composite by 75% of its nominal weight, not 100%. The full arithmetic is at apis.io/rating/.
Show this score on your site. Kin Score badge preview for Johnson Controls It updates itself when the score changes. Paste this where you link to your API docs:
<a href="https://apis.io/providers/johnson-controls/"><img src="https://apis.io/badge/johnson-controls/card.svg" alt="Johnson Controls on APIs.io — Kin Score by API Evangelist"></a>
Other styles, a README pill and a shields.io endpoint are on the badge page.
Raise your score.
Agent readiness — checks not met, largest first (exact, from this profile):
  • MCP Server +12 pts — deployment.mode + probe verdict on the mcp/ manifest, not the pointer; an unprobed slug falls back to authorship
  • Idempotency +9 pts — OpenAPI mutating operations declare an idempotency key — a header, a request-body property, or a named de-duplication token whose own description says so (verified); else common[].type matches /idempoten/i (documented)
  • A2A Agent Card +8 pts — a2a/-a2a.yml manifest, graded on conformance.grade against A2A 1.0.0
  • Registration Without a Human +6 pts — a `registration_endpoint` in the served RFC 8414 / OIDC discovery document
  • Delegated User Identity +6 pts — a served discovery document listing authorization_code in grant_types_supported (served), else an oauth2 authorizationCode flow or openIdConnect declared in an OpenAPI (documented)
  • Typed Event Surface +6 pts — AsyncAPI document, OR webhooks/callbacks objects in the as-published OpenAPI, OR common[].type includes Webhooks
6 more unmet checks in the Agent Readiness table above.
Kin Score — facets with the most composite points still available (weight × headroom):
Each check links to what satisfies it. Publish the artifact, or tell us where it already lives, and the score moves on the next scoring run.
Improve this rating by publishing the missing artifacts — every area above can be raised, and the full rubric is at apis.io/rating/. Every facet and dimension name above is a link: it opens that measurement's own page — what it means, the exact checks that feed it, how the whole catalog distributes on it, and the providers at the top of it. This rating is computed from the provider profile at artifacts.apis.io/johnson-controls/apis.yml: open an issue on github.com/api-evangelist/johnson-controls to ask a question or point us at an artifact you publish. Submit an artifact on GitHub — free → Manage your own listing — the Influence plan, $499/mo →

Markets this provider is in provisional

The Kin Score Market layer reads a provider inside its market: its position, and how deep its integrations go. Depth is only comparable within a position. Provisional and unweighted: not part of the Kin Score or agent readiness.

Registered MCP server and declares compatibility are report only — not weighted. Undeclared means we found nothing we can read, so there is no number: we never infer integrations.

Standards implemented 1

Standards this provider implements or carries. De facto ones are profiled and measured by the API Commons; formal ones come from the standards directory and are linked by the provider's own tags. The evidence column says how each claim was established — not that it was made.

measured — observed by APIs.io (published)

APIs 11

Individual APIs this provider publishes, each with its own machine-readable definition.

Johnson Controls Activities API

This section describes the operations you can perform on activities. Activities are a superset of all alarms and audits in a Metasys system. Use activities operations to view au...

Johnson Controls Alarms API

Alarms alert users to potential problems identified by a Metasys system, for example high zone temperatures. Use alarms operations to get object alarms, network device alarms, s...

Johnson Controls Audits API

How to retrieve, discard, and annotate audits. ### Relationships Audits have relationships to other resources in the system. Find information about the most important below. - *...

Johnson Controls Authentication API

Operations to get and refresh an access token.

Johnson Controls Equipment API

This section describes the operations you can perform on equipment. Equipment is a broad term for anything that makes a building run, including boilers, chillers, air handling u...

Johnson Controls network devices API

This section describes the operations you can perform on network devices. Network devices are physical devices such as coordinators and routers that are required for communicati...

Johnson Controls Objects API

This section describes the operations you can perform on objects. Objects are self-contained functional items in the Metasys system, for a full definition refer to the [Metasys ...

Johnson Controls Schemas API

A collection of JSON schemas for describing enumerations and object types.

Johnson Controls Spaces API

Operations on space-related resources.

Johnson Controls Streaming API

Your Metasys system works continuously: sensors report current conditions, algorithms make adjustments, and alarms alert operators to potential issues. Streaming is how the Meta...

Johnson Controls time series API

This section describes the operations you can perform on time series sample data. ### Origin of Time Series data The Metasys system has two locations from which time series samp...

Scroll for all 11

Agent Skills 2

Packaged agent skills for driving this provider's APIs from an AI assistant.

command-an-object

AGENT SKILL

Johnson Controls API pricing

Pricing Plans 1

Published pricing tiers and plan structures.

Rate Limits 1

Documented rate limits and quota policies.

Johnson Controls Rate Limits

0 limits

RATE LIMITS

Semantic Vocabularies 1

JSON-LD contexts and semantic vocabularies used across these APIs.

Johnson Controls Context

62 classes · 116 properties

JSON-LD

Spectral Rules 1

Spectral governance rulesets for linting and validating these APIs.

Johnson Controls API Rules

15 rules · 13 errors 1 warnings 1 info

SPECTRAL

OpenAPI Overlays 1

Overlays applied on top of this provider's contracts. Each card says who wrote it: a document the provider publishes, or one API Evangelist derived or generated.

Johnson Controls Metasys Overlay

1 action · update · johnson-controls-metasys-openapi.yml

UNRECORDED

JSON Schema 6

Standalone JSON Schema definitions for this provider's data models.

activities

5 properties

JSON SCHEMA

alarm

24 properties

JSON SCHEMA

audit

24 properties

JSON SCHEMA

Equipment

17 properties

JSON SCHEMA

equipmentPoints

5 properties

JSON SCHEMA

networkDevice

26 properties

JSON SCHEMA

Security Posture 3

Authentication, domain security, vulnerability disclosure, and trust-center signals.

Johnson Controls Authentication

apiKey/http · 2 schemes

SECURITY

Johnson Controls Domain Security

TLSv1.3 · DMARC

SECURITY

Johnson Controls Trust Center

SOC 2, ISO 27001, ISO 27017, ISO 27018, FedRAMP, GDPR

SECURITY

Agentic Access 1

Recommended x-agentic-access execution contracts for AI agents.

Johnson Controls Agentic Access

70 operations · 16 acting

70 operations · 16 acting

AGENTIC

Press 5

Recent news and press coverage referencing this provider.

How AI is Transforming the Built Environment

Johnson Controls completes sale of residential and light ...

Johnson Controls launches series of thermal management ...

Scaling AI means delivering data centers on time ...

Johnson Controls expands AI features in OpenBlue digital ...

Resources

Get Started 2

Portal, sign-up, and the first successful call

Documentation 1

Reference material describing how the API behaves

Agent Surfaces 3

MCP servers, agent skills, and machine-readable catalogs

Design & Contract 8

Pagination, idempotency, versioning, errors, and events

Scroll for all 8

Build 6

SDKs, sample code, and the tooling you integrate with

Access & Security 5

Authentication, authorization, and security posture

Operate 2

Status, limits, changes, and where to get help

Commercial 2

Pricing, plans, and the legal terms of use

Company 3

The organization behind the API

Other 5

Properties that don't map to a standard resource type

Source (apis.yml)

apis.yml Raw ↑
aid: johnson-controls
name: Johnson Controls
description: Johnson Controls is a global diversified technology and multi-industrial leader serving customers in over 150
  countries, providing products, services, and solutions for buildings (HVAC, fire, security, building automation), energy
  storage, and connected building platforms (Metasys, OpenBlue). Its developer surface is the Metasys REST API, served by
  each customer's own Metasys site director and documented publicly (with a versioned OpenAPI reference) at jci-metasys.github.io/api-landing.
type: Index
deliveryModel:
  model: unknown
  open_source: false
  commercial: false
  callable_host: false
  label: Delivery model not determined — needs a product licence on record
  confidence: low
  source:
  - none
  generated: '2026-08-28'
  method: derived
accessModel:
  pricing: unknown
  onboarding: unknown
  trial: false
  try_now: false
  public: false
  label: Unknown
  confidence: low
  source:
  - authentication
  - security
  generated: '2026-11-06'
  method: derived
position: Consuming
access: 3rd-Party
image: https://kinlane-images.s3.amazonaws.com/shared/apis-json/icons/johnson-controls.png
tags:
- Building Automation
- Energy Storage
- Fire & Security
- HVAC
- Smart Buildings
- Fortune 100
created: '2026-03-24'
modified: '2026-10-20'
url: https://raw.githubusercontent.com/api-evangelist/johnson-controls/refs/heads/main/apis.yml
specificationVersion: '0.23'
maintainers:
- FN: Kin Lane
  email: kin@apievangelist.com
common:
- type: CapabilityMap
  url: capabilities/johnson-controls-capability-edges.yml
  name: Johnson Controls Business Capability Map
- type: AgenticAccess
  url: agentic-access/johnson-controls-agentic-access.yml
- type: Spectral
  url: rules/johnson-controls-rules.yml
- type: JSONLD
  url: json-ld/johnson-controls-context.jsonld
- type: Vocabulary
  url: vocabulary/johnson-controls-vocabulary.yml
- type: AgentSkill
  url: skills/_index.yml
- type: DataModel
  url: data-model/johnson-controls-data-model.yml
- type: CLI
  url: cli/johnson-controls-cli.yml
- type: ChangeLog
  url: changelog/johnson-controls-changelog.yml
- type: Conventions
  url: conventions/johnson-controls-conventions.yml
- type: Compliance
  url: https://trust.johnsoncontrols.com/
- type: Lifecycle
  url: lifecycle/johnson-controls-lifecycle.yml
- type: ErrorCatalog
  url: errors/johnson-controls-problem-types.yml
- type: Conformance
  url: conformance/johnson-controls-conformance.yml
- type: Overlay
  url: overlays/johnson-controls-metasys-overlay.yaml
- type: LLMsTxt
  url: llms/johnson-controls-llms.txt
- type: Hosts
  url: hosts/johnson-controls-hosts.yml
- type: IntegrationEdges
  url: integrations/johnson-controls-integration-edges.yml
- type: Vendors
  url: vendors/johnson-controls-vendors.yml
- type: SDKs
  url: packages/johnson-controls-packages.yml
- type: Packages
  url: packages/johnson-controls-packages.yml
- type: Security
  url: https://www.johnsoncontrols.com/security
- type: GettingStarted
  url: https://www.johnsoncontrols.com/services-and-support/fire-maintenance-and-support/connected-sprinkler-service/onboarding
- type: Authentication
  url: authentication/johnson-controls-authentication.yml
- type: TrustCenter
  url: security/johnson-controls-trust-center.yml
- type: DomainSecurity
  url: security/johnson-controls-domain-security.yml
- type: GitHubOrganization
  url: https://github.com/johnsoncontrols
- type: LinkedIn
  url: https://www.linkedin.com/company/johnson-controls
- type: Website
  url: https://www.johnsoncontrols.com/
- type: OpenBlue
  url: https://www.johnsoncontrols.com/openblue
- type: Documentation
  url: https://jci-metasys.github.io/api-landing/
- type: GitHubOrganization
  url: https://github.com/jci-metasys
- type: Support
  url: https://www.johnsoncontrols.com/services-and-support
- type: TermsOfService
  url: https://www.johnsoncontrols.com/legal/terms
- type: PrivacyPolicy
  url: https://www.johnsoncontrols.com/trust-center/privacy
- type: Login
  url: https://www.johnsoncontrols.com/login
- type: Newsroom
  url: https://www.johnsoncontrols.com/media-center/news
apis:
- aid: johnson-controls:johnson-controls-activities-api
  name: Johnson Controls Activities API
  description: "This section describes the operations you can perform on activities. Activities\nare a superset of all alarms\
    \ and audits in a Metasys system. Use activities\noperations to view audits and alarms. Apply filters to further refine\
    \ the\nresults.\n\n## Activities Event Subscriptions\n\nSubscribe for activity-related events to receive updates when\
    \ activities are\ncreated, discarded, acknowledged, or annotated.\n\n#### Subscribing\n\nTo subscribe for activity-related\
    \ events, complete the following steps:\n\n1. Obtain a stream ID using the workflow outlined in the\n   [Streaming](#section/Streaming)\
    \ section.\n2. Use [Get Activities](#operation/getActivities) and include a\n   `METASYS-SUBSCRIBE` header with the stream\
    \ ID.\n\n**Note:** Any filters added to the original `GET` operation also apply the event\nsubscription.\n\n#### Unsubscribing\n\
    \nTo unsubscribe from an activities event subscription, complete the following\nsteps:\n\n1. Get the `METASYS-SUBSCRIPTION-LOCATION`\
    \ from the subscribe operation\n   response.\n2. Issue a\n   [Delete activities subscription](#operation/deleteActivitiesSubscription)\n\
    \   request to `METASYS-SUBSCRIPTION-LOCATION`.\n\n**See also:**\n\n- [Get a stream](#operation/getStream)\n- [Streaming](#tag/streaming)\n\
    \n#### Events\n\nThere are five event types sent by the activities subscription: acknowledged,\nannotate, discard, new,\
    \ and heartbeat.\n\n- `activity.heartbeat` - A heartbeat event is sent to show that the subscription\n  is still alive.\
    \ A heartbeat is a JSON string with the current UTC date time in\n  ISO 8601 format and is sent every 120 seconds.\n\n\
    \  <details>\n    <summary><b>Heartbeat Payload Example</b></summary>\n\n  ```json\n  {\n    \"currentTime\": \"2021-02-16T16:21:10.23Z\"\
    ,\n    \"subscriptionIds\": [\"c569a157-7315-4f32-bc8f-11607f075660\"]\n  }\n  ```\n\n  </details>\n\n- `activity.alarm.ack`\
    \ - An alarm acknowledge event is sent to indicate that the\n  management status has changed to acknowledged.\n\n  <details>\n\
    \    <summary><b>Acknowledged Alarm Payload Example</b></summary>\n\n  ```json\n  {\n    \"subscriptionIds\": [\"788fc8af-ff49-4501-b85b-e3d407a38a9e\"\
    ],\n    \"activity\": {\n      \"id\": \"6443a123-ddcd-47e7-9828-d872db6a7b4f\",\n      \"itemReference\": \"{hostname}:{deviceHostname}/AHU1.OA_T\"\
    ,\n      \"objectName\": \"OA_T\",\n      \"activityManagementStatus\": \"acknowledged\",\n      \"creationTime\": \"\
    2021-02-16T20:30:00Z\",\n      \"spaces\": [\n        {\n          \"id\": \"20b27e9a-d721-5e88-9942-85297cc57ea1\",\n\
    \          \"itemReference\": \"{hostname}:{deviceHostname}/Generic 1.Building 1.Floor 1\",\n          \"name\": \"Floor\
    \ 1\",\n          \"spaceUrl\": \"https://metasys-server.example.com/api/v6/space/4e0df8ec-c641-5fd0-9ed6-f2d980b1d26f\"\
    \n        }\n      ],\n      \"equipment\": [\n        {\n          \"id\": \"4e0df8ec-c641-5fd0-9ed6-f2d980b1d26f\",\n\
    \          \"itemReference\": \"{hostname}:{deviceHostname}/equipment.Engine1\",\n          \"equipmentName\": \"Engine1\"\
    ,\n          \"shortName\": null,\n          \"equipmentUrl\": \"https://metasys-server.example.com/api/v6/equipment/4e0df8ec-c641-5fd0-9ed6-f2d980b1d26f\"\
    \n        }\n      ],\n      \"objectUrl\": \"https://metasys-server.example.com/api/v6/objects/16defc31-1333-5379-82e7-576a6f1e8b50\"\
    ,\n      \"objectId\": \"16defc31-1333-5379-82e7-576a6f1e8b50\",\n      \"alarm\": {\n        \"message\": \"\",\n   \
    \     \"alarmGeneratorObject\": {\n          \"objectReference\": \"{hostname}:{deviceHostname}/AHU1.OA_T.Alarm1\",\n\
    \          \"referencedObject\": {\n            \"objectUrl\": \"https://metasys-server.example.com/api/v6/objects/bfcc3fce-a182-53c0-a529-268f8184496b\"\
    \n          }\n        },\n        \"isAckRequired\": true,\n        \"acknowledgedTime\": \"2021-02-16T20:31:02Z\",\n\
    \        \"type\": \"alarmValueEnumSet.avHiAlarm\",\n        \"priority\": 70,\n        \"category\": \"objectCategoryEnumSet.generalCategory\"\
    ,\n        \"annotationsUrl\": \"https://metasys-server.example.com/api/v6/alarms/6443a123-ddcd-47e7-9828-d872db6a7b4f/annotations\"\
    ,\n        \"self\": \"https://metasys-server.example.com/api/v6/alarms/6443a123-ddcd-47e7-9828-d872db6a7b4f\",\n    \
    \    \"triggerValue\": {\n          \"item\": \"2.0\",\n          \"schema\": {\n            \"type\": \"string\",\n \
    \           \"metasysType\": \"string\",\n            \"units\": {\n              \"id\": \"unitEnumSet.degF\",\n    \
    \          \"title\": \"deg F\"\n            }\n          }\n        },\n        \"description\": \"\"\n      }\n    },\n\
    \    \"effectivePermission\": {\n      \"id\": \"6443a123-ddcd-47e7-9828-d872db6a7b4f\",\n      \"canAcknowledge\": true,\n\
    \      \"canDiscard\": true,\n      \"canAnnotate\": true\n    }\n  }\n  ```\n\n  </details>\n\n- `activity.alarm.annotate`\
    \ - An alarm annotate event is sent when an annotation\n  is added to an alarm activity, providing the information for\
    \ the annotated\n  alarm.\n\n  <details>\n    <summary><b>Annotate Alarm Payload Example</b></summary>\n\n  ```json\n\
    \  {\n    \"subscriptionIds\": [\"788fc8af-ff49-4501-b85b-e3d407a38a9e\"],\n    \"activity\": {\n      \"id\": \"6443a123-ddcd-47e7-9828-d872db6a7b4f\"\
    ,\n      \"itemReference\": \"{hostname}:{deviceHostname}/AHU1.OA_T\",\n      \"objectName\": \"OA_T\",\n      \"activityManagementStatus\"\
    : \"pending\",\n      \"creationTime\": \"2021-02-16T20:30:00Z\",\n      \"spaces\": [\n        {\n          \"id\": \"\
    20b27e9a-d721-5e88-9942-85297cc57ea1\",\n          \"itemReference\": \"{hostname}:{deviceHostname}/Generic 1.Building\
    \ 1.Floor 1\",\n          \"name\": \"Floor 1\",\n          \"spaceUrl\": \"https://metasys-server.example.com/api/v6/space/4e0df8ec-c641-5fd0-9ed6-f2d980b1d26f\"\
    \n        }\n      ],\n      \"equipment\": [\n        {\n          \"id\": \"4e0df8ec-c641-5fd0-9ed6-f2d980b1d26f\",\n\
    \          \"itemReference\": \"{hostname}:{deviceHostname}/equipment.Engine1\",\n          \"equipmentName\": \"Engine1\"\
    ,\n          \"shortName\": null,\n          \"equipmentUrl\": \"https://metasys-server.example.com/api/v6/equipment/4e0df8ec-c641-5fd0-9ed6-f2d980b1d26f\"\
    \n        }\n      ],\n      \"objectUrl\": \"https://metasys-server.example.com/api/v6/objects/16defc31-1333-5379-82e7-576a6f1e8b50\"\
    ,\n      \"objectId\": \"16defc31-1333-5379-82e7-576a6f1e8b50\",\n      \"alarm\": {\n        \"message\": \"\",\n   \
    \     \"alarmGeneratorObject\": {\n          \"objectReference\": \"{hostname}:{deviceHostname}/AHU1.OA_T.Alarm1\",\n\
    \          \"referencedObject\": {\n            \"objectUrl\": \"https://metasys-server.example.com/api/v6/objects/bfcc3fce-a182-53c0-a529-268f8184496b\"\
    \n          }\n        },\n        \"isAckRequired\": true,\n        \"acknowledgedTime\": \"2021-02-16T20:31:02Z\",\n\
    \        \"type\": \"alarmValueEnumSet.avHiAlarm\",\n        \"priority\": 70,\n        \"category\": \"objectCategoryEnumSet.generalCategory\"\
    ,\n        \"annotationsUrl\": \"https://metasys-server.example.com/api/v6/alarms/6443a123-ddcd-47e7-9828-d872db6a7b4f/annotations\"\
    ,\n        \"self\": \"https://metasys-server.example.com/api/v6/alarms/6443a123-ddcd-47e7-9828-d872db6a7b4f\",\n    \
    \    \"triggerValue\": {\n          \"item\": \"2.0\",\n          \"schema\": {\n            \"type\": \"string\",\n \
    \           \"metasysType\": \"string\",\n            \"units\": {\n              \"id\": \"unitEnumSet.degF\",\n    \
    \          \"title\": \"deg F\"\n            }\n          }\n        },\n        \"description\": \"\"\n      }\n    },\n\
    \    \"effectivePermission\": {\n      \"id\": \"6443a123-ddcd-47e7-9828-d872db6a7b4f\",\n      \"canAcknowledge\": true,\n\
    \      \"canDiscard\": true,\n      \"canAnnotate\": true\n    }\n  }\n  ```\n\n  </details>\n\n- `activity.alarm.discard`\
    \ - An alarm discard event is sent when the management\n  status of an alarm activity changes to discarded.\n\n  <details>\n\
    \    <summary><b>Discard Alarm Payload Example</b></summary>\n\n  ```json\n  {\n    \"subscriptionIds\": [\"788fc8af-ff49-4501-b85b-e3d407a38a9e\"\
    ],\n    \"activity\": {\n      \"id\": \"6443a123-ddcd-47e7-9828-d872db6a7b4f\",\n      \"itemReference\": \"{hostname}:{deviceHostname}/AHU1.OA_T\"\
    ,\n      \"objectName\": \"OA_T\",\n      \"activityManagementStatus\": \"discarded\",\n      \"creationTime\": \"2021-02-16T20:30:00Z\"\
    ,\n      \"spaces\": [\n        {\n          \"id\": \"20b27e9a-d721-5e88-9942-85297cc57ea1\",\n          \"itemReference\"\
    : \"{hostname}:{deviceHostname}/Generic 1.Building 1.Floor 1\",\n          \"name\": \"Floor 1\",\n          \"spaceUrl\"\
    : \"https://metasys-server.example.com/api/v6/space/4e0df8ec-c641-5fd0-9ed6-f2d980b1d26f\"\n        }\n      ],\n    \
    \  \"equipment\": [\n        {\n          \"id\": \"4e0df8ec-c641-5fd0-9ed6-f2d980b1d26f\",\n          \"itemReference\"\
    : \"{hostname}:{deviceHostname}/equipment.Engine1\",\n          \"equipmentName\": \"Engine1\",\n          \"shortName\"\
    : null,\n          \"equipmentUrl\": \"https://metasys-server.example.com/api/v6/equipment/4e0df8ec-c641-5fd0-9ed6-f2d980b1d26f\"\
    \n        }\n      ],\n      \"objectUrl\": \"https://metasys-server.example.com/api/v6/objects/16defc31-1333-5379-82e7-576a6f1e8b50\"\
    ,\n      \"objectId\": \"16defc31-1333-5379-82e7-576a6f1e8b50\",\n      \"alarm\": {\n        \"message\": \"\",\n   \
    \     \"alarmGeneratorObject\": {\n          \"objectReference\": \"{hostname}:{deviceHostname}/AHU1.OA_T.Alarm1\",\n\
    \          \"referencedObject\": {\n            \"objectUrl\": \"https://metasys-server.example.com/api/v6/objects/bfcc3fce-a182-53c0-a529-268f8184496b\"\
    \n          }\n        },\n        \"isAckRequired\": true,\n        \"acknowledgedTime\": \"2021-02-16T20:31:02Z\",\n\
    \        \"type\": \"alarmValueEnumSet.avHiAlarm\",\n        \"priority\": 70,\n        \"category\": \"objectCategoryEnumSet.generalCategory\"\
    ,\n        \"annotationsUrl\": \"https://metasys-server.example.com/api/v6/alarms/6443a123-ddcd-47e7-9828-d872db6a7b4f/annotations\"\
    ,\n        \"self\": \"https://metasys-server.example.com/api/v6/alarms/6443a123-ddcd-47e7-9828-d872db6a7b4f\",\n    \
    \    \"triggerValue\": {\n          \"item\": \"2.0\",\n          \"schema\": {\n            \"type\": \"string\",\n \
    \           \"metasysType\": \"string\",\n            \"units\": {\n              \"id\": \"unitEnumSet.degF\",\n    \
    \          \"title\": \"deg F\"\n            }\n          }\n        },\n        \"description\": \"\"\n      }\n    },\n\
    \    \"effectivePermission\": {\n      \"id\": \"6443a123-ddcd-47e7-9828-d872db6a7b4f\",\n      \"canAcknowledge\": true,\n\
    \      \"canDiscard\": true,\n      \"canAnnotate\": true\n    }\n  }\n  ```\n\n  </details>\n\n- `activity.alarm.new`\
    \ - A new alarm event is sent when an alarm activity is\n  created.\n\n  <details>\n    <summary><b>New Alarm Payload\
    \ Example</b></summary>\n\n  ```json\n  {\n    \"subscriptionIds\": [\"788fc8af-ff49-4501-b85b-e3d407a38a9e\"],\n    \"\
    activity\": {\n      \"id\": \"6443a123-ddcd-47e7-9828-d872db6a7b4f\",\n      \"itemReference\": \"{hostname}:{deviceHostname}/AHU1.OA_T\"\
    ,\n      \"objectName\": \"OA_T\",\n      \"activityManagementStatus\": \"pending\",\n      \"creationTime\": \"2021-02-16T20:30:00Z\"\
    ,\n      \"spaces\": [\n        {\n          \"id\": \"20b27e9a-d721-5e88-9942-85297cc57ea1\",\n          \"itemReference\"\
    : \"{hostname}:{deviceHostname}/Generic 1.Building 1.Floor 1\",\n          \"name\": \"Floor 1\",\n          \"spaceUrl\"\
    : \"https://metasys-server.example.com/api/v6/space/4e0df8ec-c641-5fd0-9ed6-f2d980b1d26f\"\n        }\n      ],\n    \
    \  \"equipment\": [\n        {\n          \"id\": \"4e0df8ec-c641-5fd0-9ed6-f2d980b1d26f\",\n          \"itemReference\"\
    : \"{hostname}:{deviceHostname}/equipment.Engine1\",\n          \"equipmentName\": \"IDU1\",\n          \"shortName\"\
    : null,\n          \"equipmentUrl\": \"https://metasys-server.example.com/api/v6/equipment/4e0df8ec-c641-5fd0-9ed6-f2d980b1d26f\"\
    \n        }\n      ],\n      \"objectUrl\": \"https://metasys-server.example.com/api/v6/objects/16defc31-1333-5379-82e7-576a6f1e8b50\"\
    ,\n      \"objectId\": \"16defc31-1333-5379-82e7-576a6f1e8b50\",\n      \"alarm\": {\n        \"message\": \"\",\n   \
    \     \"alarmGeneratorObject\": {\n          \"objectReference\": \"{hostname}:{deviceHostname}/AHU1.OA_T.Alarm1\",\n\
    \          \"referencedObject\": {\n            \"objectUrl\": \"https://metasys-server.example.com/api/v6/objects/bfcc3fce-a182-53c0-a529-268f8184496b\"\
    \n          }\n        },\n        \"isAckRequired\": true,\n        \"type\": \"alarmValueEnumSet.avHiAlarm\",\n    \
    \    \"priority\": 70,\n        \"category\": \"objectCategoryEnumSet.generalCategory\",\n        \"annotationsUrl\":\
    \ \"https://metasys-server.example.com/api/v6/alarms/6443a123-ddcd-47e7-9828-d872db6a7b4f/annotations\",\n        \"self\"\
    : \"https://metasys-server.example.com/api/v6/alarms/6443a123-ddcd-47e7-9828-d872db6a7b4f\",\n        \"triggerValue\"\
    : {\n          \"item\": \"2.0\",\n          \"schema\": {\n            \"type\": \"string\",\n            \"metasysType\"\
    : \"string\",\n            \"units\": {\n              \"id\": \"unitEnumSet.degF\",\n              \"title\": \"deg F\"\
    \n            }\n          }\n        },\n        \"description\": \"\"\n      }\n    },\n    \"effectivePermission\"\
    : {\n      \"id\": \"6443a123-ddcd-47e7-9828-d872db6a7b4f\",\n      \"canAcknowledge\": true,\n      \"canDiscard\": true,\n\
    \      \"canAnnotate\": true\n    }\n  }\n  ```\n\n  </details>\n\n- `activity.audit.new` - A new audit event is sent\
    \ when an audit activity is\n  created.\n\n  <details>\n    <summary><b>New Audit Payload Example</b></summary>\n\n  ```json\n\
    \  {\n    \"subscriptionIds\": [\"7373cc85-37a5-4ad5-b703-6bc61968aa9a\"],\n    \"activity\": {\n      \"id\": \"128d7db4-8ab6-4232-afe1-026fe06d267f\"\
    ,\n      \"itemReference\": \"{hostname}:{deviceHostname}\",\n      \"objectName\": \"MS-NAE5510-3\",\n      \"activityManagementStatus\"\
    : \"pending\",\n      \"creationTime\": \"2021-02-16T16:21:10.23Z\",\n      \"objectUrl\": \"https://metasys-server.example.com/api/v6/objects/CDAC85B9-726F-5677-9CBC-ADC77A14E79B\"\
    ,\n      \"objectId\": \"cdac85b9-726f-5677-9cbc-adc77a14e79b\",\n      \"audit\": {\n        \"actionType\": \"auditActionTypeEnumSet.subsystemAuditActionType\"\
    ,\n        \"status\": null,\n        \"preData\": null,\n        \"postData\": {\n          \"item\": \"10.10.198.131\"\
    ,\n          \"schema\": {\n            \"type\": \"string\",\n            \"metasysType\": \"string\"\n          }\n\
    \        },\n        \"parameters\": [],\n        \"errorString\": null,\n        \"user\": \"MetasysSysAgent\",\n   \
    \     \"signature\": null,\n        \"classLevel\": \"auditClassesEnumSet.userActionAuditClass\",\n        \"originApplication\"\
    : \"auditOriginAppEnumSet.systemSecurityAuditOriginApp\",\n        \"description\": \"auditTrailStringsEnumSet.atstrSecurityUserLoginSuccessful\"\
    ,\n        \"annotationsUrl\": null,\n        \"self\": \"https://metasys-server.example.com/api/v6/audits/128d7db4-8ab6-4232-afe1-026fe06d267f\"\
    \n      }\n    },\n    \"effectivePermission\": {\n      \"id\": \"128d7db4-8ab6-4232-afe1-026fe06d267f\",\n      \"canDiscard\"\
    : true\n    }\n  }\n  ```\n\n    </details>\n\n- `activity.audit.annotate` - An annotate audit event is sent when an annotation\n\
    \  is added to an audit activity, providing the information for the annotated\n  audit.\n\n  <details>\n    <summary><b>Annotate\
    \ Audit Payload Example</b></summary>\n\n  ```json\n  {\n    \"subscriptionIds\": [\"7373cc85-37a5-4ad5-b703-6bc61968aa9a\"\
    ],\n    \"activity\": {\n      \"id\": \"128d7db4-8ab6-4232-afe1-026fe06d267f\",\n      \"itemReference\": \"{hostname}:{deviceHostname}\"\
    ,\n      \"objectName\": \"MS-NAE5510-3\",\n      \"activityManagementStatus\": \"pending\",\n      \"creationTime\":\
    \ \"2021-02-16T16:21:10.23Z\",\n      \"objectUrl\": \"https://metasys-server.example.com/api/v6/objects/CDAC85B9-726F-5677-9CBC-ADC77A14E79B\"\
    ,\n      \"objectId\": \"cdac85b9-726f-5677-9cbc-adc77a14e79b\",\n      \"audit\": {\n        \"actionType\": \"auditActionTypeEnumSet.subsystemAuditActionType\"\
    ,\n        \"status\": null,\n        \"preData\": null,\n        \"postData\": {\n          \"item\": \"10.10.198.131\"\
    ,\n          \"schema\": {\n            \"type\": \"string\",\n            \"metasysType\": \"string\"\n          }\n\
    \        },\n        \"parameters\": [],\n        \"errorString\": null,\n        \"user\": \"MetasysSysAgent\",\n   \
    \     \"signature\": null,\n        \"classLevel\": \"auditClassesEnumSet.userActionAuditClass\",\n        \"originApplication\"\
    : \"auditOriginAppEnumSet.systemSecurityAuditOriginApp\",\n        \"description\": \"auditTrailStringsEnumSet.atstrSecurityUserLoginSuccessful\"\
    ,\n        \"annotationsUrl\": \"https://metasys-server.example.com/api/v6/alarms/6443a123-ddcd-47e7-9828-d872db6a7b4f/annotations\"\
    ,\n        \"self\": \"https://metasys-server.example.com/api/v6/audits/128d7db4-8ab6-4232-afe1-026fe06d267f\"\n     \
    \ }\n    },\n    \"effectivePermission\": {\n      \"id\": \"128d7db4-8ab6-4232-afe1-026fe06d267f\",\n      \"canDiscard\"\
    : true\n    }\n  }\n  ```\n\n  </details>\n\n- `activity.audit.discard` - An audit discard event is sent when the management\n\
    \  status of an audit activity changes to discarded.\n\n  <details>\n    <summary><b>Discard Audit Payload Example</b></summary>\n\
    \n  ```json\n  {\n    \"subscriptionIds\": [\"7373cc85-37a5-4ad5-b703-6bc61968aa9a\"],\n    \"activity\": {\n      \"\
    id\": \"128d7db4-8ab6-4232-afe1-026fe06d267f\",\n      \"itemReference\": \"{hostname}:{deviceHostname}\",\n      \"objectName\"\
    : \"MS-NAE5510-3\",\n      \"activityManagementStatus\": \"discarded\",\n      \"creationTime\": \"2021-02-16T16:21:10.23Z\"\
    ,\n      \"objectUrl\": \"https://metasys-server.example.com/api/v6/objects/CDAC85B9-726F-5677-9CBC-ADC77A14E79B\",\n\
    \      \"objectId\": \"cdac85b9-726f-5677-9cbc-adc77a14e79b\",\n      \"audit\": {\n        \"actionType\": \"auditActionTypeEnumSet.subsystemAuditActionType\"\
    ,\n        \"status\": null,\n        \"preData\": null,\n        \"postData\": {\n          \"item\": \"10.10.198.131\"\
    ,\n          \"schema\": {\n            \"type\": \"string\",\n            \"metasysType\": \"string\"\n          }\n\
    \        },\n        \"parameters\": [],\n        \"errorString\": null,\n        \"user\": \"MetasysSysAgent\",\n   \
    \     \"signature\": null,\n        \"classLevel\": \"auditClassesEnumSet.userActionAuditClass\",\n        \"originApplication\"\
    : \"auditOriginAppEnumSet.systemSecurityAuditOriginApp\",\n        \"description\": \"auditTrailStringsEnumSet.atstrSecurityUserLoginSuccessful\"\
    ,\n        \"annotationsUrl\": \"https://metasys-server.example.com/api/v6/alarms/6443a123-ddcd-47e7-9828-d872db6a7b4f/annotations\"\
    ,\n        \"self\": \"https://metasys-server.example.com/api/v6/audits/128d7db4-8ab6-4232-afe1-026fe06d267f\"\n     \
    \ }\n    },\n    \"effectivePermission\": {\n      \"id\": \"128d7db4-8ab6-4232-afe1-026fe06d267f\",\n      \"canDiscard\"\
    : true\n    }\n  }\n  ```\n\n  </details>\n\n#### Filter Behavior\n\nFilters supplied to an activities request limit the\
    \ results to activities for\nwhich the filters apply. When subscribing to an activities request that uses\nfilters, the\
    \ events received are also limited to the same filter criteria.\nExceptions to this behavior occur when filtering on activity\
    \ management status,\nsuch as for `acknowledged` or `discarded` activities. You receive an update\nwhenever an activity\
    \ management change occurs, regardless of filters, because\nthe change can impact the original set of activities you subscribed\
    \ to. For\nexample, consider the following scenario:\n\n- You subscribe to `acknowledged` activities and receive all acknowledged\n\
    \  activities, receiving updates for any acknowledged thereafter across the\n  stream.\n- In this state, one of the activities\
    \ in your original list is `discarded` by\n  another user.\n\nWhen this occurs, you receive an `activity.alarm.discard`\
    \ message for the\ndiscarded activity even though your filters exclude activities that are\n`discarded`. This is necessary\
    \ so that you can properly maintain the state of\nactivities already received in your application."
  humanURL: https://jci-metasys.github.io/api-landing/
  baseURL: https://{hostname}/api/v6
  tags:
  - Activities
  tags_raw:
  - activities
  properties:
  - type: OpenAPI
    url: openapi/johnson-controls-activities-api-openapi.yml
  - type: Documentation
    url: https://jci-metasys.github.io/api-landing/
  - type: GettingStarted
    url: https://jci-metasys.github.io/api-landing/guides/quickstart
  - type: ChangeLog
    url: https://jci-metasys.github.io/api-landing/guides/api-changelog
  - type: JSONSchema
    url: json-schema/johnson-controls-activities-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-alarm-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-network-device-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-audit-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-equipment-item-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-equipment-points-schema.json
- aid: johnson-controls:johnson-controls-alarms-api
  name: Johnson Controls Alarms API
  description: 'Alarms alert users to potential problems identified by a Metasys system, for

    example high zone temperatures. Use alarms operations to get object alarms,

    network device alarms, single alarms, alarm collections, and alarm annotations.

    Acknowledge or discard alarms with the edit patch operation. Filter the results

    with the query parameters time, priority, type, category, acknowledgement, and

    page. Sort the results by creation time and priority.'
  humanURL: https://jci-metasys.github.io/api-landing/
  baseURL: https://{hostname}/api/v6
  tags:
  - Alarms
  tags_raw:
  - alarms
  properties:
  - type: OpenAPI
    url: openapi/johnson-controls-alarms-api-openapi.yml
  - type: Documentation
    url: https://jci-metasys.github.io/api-landing/
  - type: GettingStarted
    url: https://jci-metasys.github.io/api-landing/guides/quickstart
  - type: ChangeLog
    url: https://jci-metasys.github.io/api-landing/guides/api-changelog
  - type: JSONSchema
    url: json-schema/johnson-controls-activities-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-alarm-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-network-device-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-audit-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-equipment-item-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-equipment-points-schema.json
- aid: johnson-controls:johnson-controls-audits-api
  name: Johnson Controls Audits API
  description: 'How to retrieve, discard, and annotate audits.


    ### Relationships


    Audits have relationships to other resources in the system. Find information

    about the most important below.


    - **objects**


    When users or the system affect objects in the Metasys system, such as analog

    inputs, multistate objects, or binary outputs, audits are generated. Those

    "acted upon" objects then relate to those audits. That relationship is returned

    as part of any audit response.


    - **equipment instances**


    Equipment instance associations to audits build off of the objects association

    explanation. Each equipment instance can contain many points, such as Outdoor

    Air Temperature, Damper Position, or Zone Setpoint. Those points map to actual

    objects in Metasys, as noted above. When users or the system affect those

    objects, audits are generated. If an equipment instance''s point is mapped to one

    of those affected objects the instance is then associated with that audit.


    In short, an equipment instance contains points which map to Metasys objects

    which are affected by an audited action.


    - **spaces**


    Space associations to audits build off of the equipment instance association

    explanation. Equipment instances can serve spaces, such as an Air Handler Unit

    (AHU) serving the floor of a building. Therefore, audits associated with a

    particular equipment instance are associated to the spaces they serve.'
  humanURL: https://jci-metasys.github.io/api-landing/
  baseURL: https://{hostname}/api/v6
  tags:
  - Audit
  tags_raw:
  - audits
  properties:
  - type: OpenAPI
    url: openapi/johnson-controls-audits-api-openapi.yml
  - type: Documentation
    url: https://jci-metasys.github.io/api-landing/
  - type: GettingStarted
    url: https://jci-metasys.github.io/api-landing/guides/quickstart
  - type: ChangeLog
    url: https://jci-metasys.github.io/api-landing/guides/api-changelog
  - type: JSONSchema
    url: json-schema/johnson-controls-activities-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-alarm-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-network-device-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-audit-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-equipment-item-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-equipment-points-schema.json
- aid: johnson-controls:johnson-controls-authentication-api
  name: Johnson Controls Authentication API
  description: Operations to get and refresh an access token.
  humanURL: https://jci-metasys.github.io/api-landing/
  baseURL: https://{hostname}/api/v6
  tags:
  - Authentication
  tags_raw:
  - authentication
  properties:
  - type: OpenAPI
    url: openapi/johnson-controls-authentication-api-openapi.yml
  - type: Documentation
    url: https://jci-metasys.github.io/api-landing/
  - type: GettingStarted
    url: https://jci-metasys.github.io/api-landing/guides/quickstart
  - type: ChangeLog
    url: https://jci-metasys.github.io/api-landing/guides/api-changelog
  - type: JSONSchema
    url: json-schema/johnson-controls-activities-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-alarm-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-network-device-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-audit-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-equipment-item-schema.json
  - type: JSONSchema
    url: json-schema/johnson-controls-equipment-points-schema.json
- aid: johnson-controls:johnson-controls-equipment-api
  name: Johnson Controls Equipment API
  description: This section describes the operations you can perform on equipment. Equipment is a broad term for anything
    that makes a building run, including boilers, chillers, air handling units, lights, meters, and security systems. Use
    equipment operations to get equipment instances and to list equipment points. Apply filters, sorting, and paging to further
    refine the results.
  humanURL: https://jci-metasys.github.io/api-landing/
  baseURL: https://{hostname}/api/v6
  tags:
  - Equipment
  tags_raw:
  - equipment
  properties:
  - type: OpenAPI
    url: openapi/johnson-controls-equipment-api-openapi.yml
  - type: Documentation
    url: https://jci-metasys.github.io/api-landing/
  - type: GettingStarted
    url: https://jci-metasys.github.io/api-landing/guides/quickstart
  - type: ChangeLog
    url: https://jci-metasys.github.io/api-landing/guides/api-changelog
  - type: JSONSchema
    url: json-schema/johnson-controls-activities-schema.json


# --- truncated at 32 KB (55 KB total) ---
# Full source: https://artifacts.apis.io/johnson-controls/apis.yml

Johnson Controls API — frequently asked questions

Does Johnson Controls have an API?

Yes. APIs.io lists 11 APIs from Johnson Controls, including Johnson Controls Activities API, Johnson Controls Alarms API and Johnson Controls Audits API, and 8 more.

Is there an OpenAPI specification for the Johnson Controls API?

Yes. APIs.io indexes 11 OpenAPI specifications for Johnson Controls, each linked for download from this page.

How do I authenticate with the Johnson Controls API?

Johnson Controls uses bearer-token authentication (apiKey/http · 2 schemes). The details are profiled on APIs.io as Johnson Controls Authentication.

Is the Johnson Controls API ready for AI agents?

Johnson Controls has a Kin Score of 41.2 out of 100 (developing) and an Agent Readiness score of 32.5 (agent-ready), scored by API Evangelist on 2026-11-06.

Work with this as data

Every provider 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 providers

9 MCP tools reach this
  • find_providersBrowse and filter every provider in the catalog.
  • get_provider_artifactsEvery artifact this provider publishes, grouped by type.
  • get_provider_operationsEvery operation across all of their OpenAPIs — one call instead of parsing every spec.
  • get_provider_toolsEvery MCP tool they ship, with the operation each wraps.
  • get_provider_evidenceHow each part of their score was established. Free — the basis for a claim should not sit behind it.
  • get_provider_ratingPRO — composite, band, trend and facet scores.
  • 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 provider
curl "https://apis.io/api/v1/providers/johnson-controls"
All providers
curl "https://apis.io/api/v1/providers?limit=25"
Every operation they expose
curl "https://apis.io/api/v1/providers/johnson-controls/operations?limit=25"
How their score was established
curl "https://apis.io/api/v1/providers/johnson-controls/evidence"

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.