Skip to main content
A KODE API connector lets you bring devices and points from your own system into a building in KODE OS. You create the connector, send the devices and points you want, and follow each request as a background job. This guide takes you from a building to ingested devices and points. To send point values after the points exist, continue with Ingest device and point data. Each linked endpoint can switch the sample between cURL, JavaScript, Python, and PowerShell, or send the request for you.
Every request in this guide that is not a read adds data to a real building in your organization. Ingested devices and points appear in KODE OS next to the rest of the building data. Use a test building first.

Before you begin

You need:
  • An access token. See the quickstart.
  • A service account whose KODE OS role allows the actions you use:

Choose a building

You can use a building that already exists or create one.
Call List buildings and note the _id of the building to use as buildingId.
If a call on the building returns 403, the building does not exist, is not available to your service account, or has no api product enabled. The API gives the same answer in each case.

Ingest devices and points

1

Check for an existing connector

Call List connectors. The list holds every connector in the building. A connector you can ingest into has integrationType set to API_KODE.
If one fits, note its _id as connectorId and go to the ingest steps. Otherwise create one.
2

Create a KODE API connector

Send a name to Create a KODE API connector.
Keep the _id from the response as connectorId. The name is free text. The API does not reject a repeated name, so a second request with the same name creates a second connector.The integrations endpoints call a connector a data source, and its _id is the datasourceId they use.
3

Ingest the devices

Send your devices to Ingest devices through a connector. Use stable identifiers from your system for deviceExternalId.
The response has status 202 and holds a job:
Keep the job _id as jobId. Send up to 1,000 devices in one request. Sending a deviceExternalId again updates the name and location of that device. It does not create a duplicate.
4

Wait for the devices job

Call Get a job every few seconds until status is COMPLETED or FAILED.
Polling counts toward your rate limits, so wait a few seconds between calls.
5

Ingest the points

Points belong to devices, so ingest the devices first. Each point item names its parent device with the same deviceExternalId and deviceExternalPath you sent in the previous step. Send the items to Ingest points through a connector.
Use these rules:
  • pointKind is Number, Str, or Bool, with that capitalization.
  • pointUnit is the _id of an ontology unit. An unknown unit returns 400.
  • pointEnum is one comma-separated string, such as off,on,auto.
  • pointMinVal cannot be higher than pointMaxVal.
  • pointWritable defaults to false.
If a parent device was not ingested on this connector, the request returns 400 and names the missing deviceExternalId values. Fix the request and send it again. Then wait for the job as you did for the devices.
6

Confirm the result

A completed job tells you that it ran to the end. It does not list what it stored. Read the data back:

Send point values

After the points exist, send their values with the timeseries endpoints. See Ingest device and point data, which covers current values, history, and rate limits.

Update what you sent

Send a device again with the same deviceExternalId to change its name or location. Send a point again with the same pointExternalId and the API does not create a second point.

Limits

Ingest requests count toward your rate limits.

Troubleshooting

Last modified on November 10, 2026