Conventions
The CHeKT Partner API is the single endpoint surface used by both Platform partners (running Platform Linking) and Dealer apps (CHeKT Apps). The same paths, the same auth, the same response shapes — what differs is the scope of dealers a token is granted access to.
- Base URL
- https://api.chekt.com — all endpoints versioned under /partner/v1.
- Auth (most endpoints)
- OAuth 2.0 Client Credentials Grant. POST /oauth/token with client_id + client_secret returns an access_token; send as Authorization: Bearer <token>.
- Auth (connect endpoint)
- The /partner/v1/dealers/connect endpoint requires an Authorization access token tied to a user, not a client credential — that flow binds the dealer in the token to your external_dealer_id.
- Tracing header
- Optional x-partner-trace-id UUID propagated through CHeKT logs. Send your correlation ID to make support requests trivial.
- Status
- Currently version 0.8 — the API is in active draft. Breaking changes are still possible.
A first call
Exchange your client credentials for an access token, then list sites under a dealer. The x-partner-trace-id header is optional but recommended — we use it to correlate requests across our edge and core.
# 1) Get an access token (OAuth 2.0 Client Credentials Grant)
curl -X POST https://api.chekt.com/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=${CLIENT_ID}&client_secret=${CLIENT_SECRET}"
# 2) Use the access_token to list a dealer's sites
curl https://api.chekt.com/partner/v1/dealers/${DEALER_ID}/sites \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "x-partner-trace-id: 550e8400-e29b-41d4-a716-123456789000"[
{
"site_id": 1,
"external_site_id": "1234567890",
"name": "Gangnam Headquarters",
"monitoring_station_id": 12345,
"external_monitoring_station_id": "12345",
"account_number": "1234567890",
"address1": "123 Teheran-ro, Gangnam-gu, Seoul",
"timezone": "Asia/Seoul",
"is_activated": 1,
"created_at": "2025-01-01 00:00:00"
}
]Query strings on list endpoints
List endpoints accept a small set of query parameters that let you select columns, filter, sort, and paginate without a separate query language.
fields- Comma-separated column names. Use tableName.column when joining. Example: fields=site_id,name,timezone
filter- Format: filter=column,value,operator. Operators: eq (default), neq, lt, lte, gt, gte, regex. Multiple filter params combine with AND.
sort- Column name to sort by. Example: sort=created_at
dir- Sort direction: asc (default) or desc.
limit- Maximum rows returned. Example: limit=50
offset- Skip this many rows before returning results. Use with limit for offset pagination.
GET /partner/v1/dealers/42/sites
?fields=site_id,name,timezone
&filter=is_activated,1,eq
&sort=created_at&dir=desc
&limit=50&offset=0Resource families
Jump to any section below, or scroll through the full reference.
Dealers
Connect and disconnect dealer accounts, read and update dealer metadata.
/partner/v1/dealers/connectBind the dealer in the access token to your external_dealer_id.
Parameters
external_dealer_idstringrequiredYour system's identifier for this dealer.
company_namestringrequiredRegistered name of the dealer company.
Responses
- 200Returns the connected ResponseDealerDto.
- 401Invalid or missing access token.
/partner/v1/dealers/{dealerId}/disconnectUnbind the dealer from your external_dealer_id mapping.
Parameters
dealerIdstringrequiredThe CHeKT dealer ID.
Responses
- 200Returns the disconnected ResponseDealerDto.
/partner/v1/dealers/{dealerId}Retrieve a single dealer by ID.
Parameters
dealerIdstringrequiredThe CHeKT dealer ID.
Responses
- 200ResponseDealerDto.
- 404Dealer not found.
/partner/v1/dealers/{dealerId}Update dealer company info (name, address, contact details).
Parameters
dealerIdstringrequiredThe CHeKT dealer ID.
company_namestringRegistered name.
company_address1stringPrimary street address.
company_address2stringSuite, floor, or unit.
company_emailstringContact email.
company_phone_numberstringContact phone.
Responses
- 200Updated ResponseDealerDto.
Sites
Physical or logical locations a dealer monitors. Sites group devices, contacts, and arming configuration.
/partner/v1/dealers/{dealerId}/sitesCreate a site.
Parameters
external_site_idstringrequiredYour system's identifier.
namestringrequiredDisplay name, e.g. Gangnam Headquarters.
timezonestringrequiredIANA timezone ID, e.g. Asia/Seoul, America/New_York.
monitoring_station_idnumberCHeKT monitoring station to route alarms to.
account_numberstringSite's monitoring account number.
address1stringStreet address.
address2stringSuite, floor.
Responses
- 201Returns ResponseSiteBasicDto with the new site_id.
/partner/v1/dealers/{dealerId}/sitesList sites for a dealer.
Parameters
dealerIdstringrequiredDealer ID.
fields / filter / sort / dir / limit / offsetqueryStandard query-string controls — see Conventions.
Responses
- 200Array of ResponseSiteBasicDto.
/partner/v1/dealers/{dealerId}/sites/{siteId}Retrieve a single site with full detail (includes has_physical_bridge).
Parameters
dealerIdstringrequiredDealer ID.
siteIdstringrequiredSite ID.
Responses
- 200ResponseSiteDto.
/partner/v1/dealers/{dealerId}/sites/{siteId}Update site name, address, timezone, monitoring assignment.
Responses
- 200Updated ResponseSiteBasicDto.
/partner/v1/dealers/{dealerId}/sites/{siteId}/activation-statusToggle site activation (0 inactive ↔ 1 active).
Responses
- 200ResponseSiteBasicDto with updated is_activated.
/partner/v1/dealers/{dealerId}/sites/{siteId}Delete a site.
Responses
- 204Deleted.
Monitoring Stations
The central stations that receive alarms from sites. Configure routing prefix and linecard per station.
/partner/v1/dealers/{dealerId}/monitoring-stationsCreate a monitoring station entry.
Parameters
external_monitoring_station_idstringrequiredYour system's identifier.
namestringrequiredDisplay name.
prefixstringPrefix prepended to account numbers for classification.
linecardstringHardware module handling incoming phone/signal lines.
Responses
- 201ResponseMonitoringStationDto.
/partner/v1/dealers/{dealerId}/monitoring-stationsList all monitoring stations for a dealer.
Responses
- 200Array of ResponseMonitoringStationDto.
/partner/v1/dealers/{dealerId}/monitoring-stations/{monitoringStationId}Retrieve a single monitoring station.
Responses
- 200ResponseMonitoringStationDto.
/partner/v1/dealers/{dealerId}/monitoring-stations/{monitoringStationId}Update name, prefix, or linecard.
Responses
- 200Updated ResponseMonitoringStationDto.
/partner/v1/dealers/{dealerId}/monitoring-stations/{monitoringStationId}Delete a monitoring station.
Responses
- 204Deleted.
Contacts
People associated with a site who receive verification calls or notifications.
/partner/v1/dealers/{dealerId}/sites/{siteId}/contactsCreate a contact tied to a site.
Parameters
external_contact_idstringrequiredYour system's identifier.
first_namestringrequiredFirst name.
last_namestringrequiredLast name.
phone_numberstringPrimary phone.
emailstringContact email.
Responses
- 201ResponseContactDto.
/partner/v1/dealers/{dealerId}/sites/{siteId}/contactsList contacts for a site.
Responses
- 200Array of ResponseContactDto.
/partner/v1/dealers/{dealerId}/sites/{siteId}/contacts/{contactId}Retrieve a single contact.
Responses
- 200ResponseContactDto.
/partner/v1/dealers/{dealerId}/sites/{siteId}/contacts/{contactId}Update contact details.
Responses
- 200Updated ResponseContactDto.
/partner/v1/dealers/{dealerId}/sites/{siteId}/contacts/{contactId}Delete a contact.
Responses
- 204Deleted.
Devices
Cameras and bridges installed at a site. Bulk-create, bulk-update, and bulk-delete are supported because devices are typically provisioned in batches.
/partner/v1/dealers/{dealerId}/sites/{siteId}/devicesBulk-create devices. Send an array; receive a per-device success/failure result.
Parameters
bodyarray<CreateDeviceDto>requiredArray of devices. Each item has external_device_id, device_type (camera | bridge), zone_number, name, mac, model, etc.
Responses
- 201BulkDeviceCreationResponseDto with success_count, failure_count, and per-item results.
/partner/v1/dealers/{dealerId}/sites/{siteId}/devicesList devices at a site.
Responses
- 200Array of ResponseDeviceDto.
/partner/v1/dealers/{dealerId}/sites/{siteId}/devices/{deviceId}Retrieve a single device.
Responses
- 200ResponseDeviceDto.
/partner/v1/dealers/{dealerId}/sites/{siteId}/devicesBulk-update devices. Same shape as bulk-create.
Responses
- 200BulkDeviceUpdateResponseDto.
/partner/v1/dealers/{dealerId}/sites/{siteId}/devices/bulk-deleteBulk-delete devices by ID list.
Parameters
deviceIdsarray<number>requiredIDs to delete, e.g. [123, 891].
Responses
- 200BulkDeviceDeleteResponseDto.
Arming Settings
Per-site arming configuration. Choose which security system handles the site (CHeKT video, alarm panel via bridge, or external security system).
/partner/v1/dealers/{dealerId}/sites/{siteId}/arming-settingsRead the site's current arming setting.
Responses
- 200ResponseArmingSettingDto with security_type (1–4).
/partner/v1/dealers/{dealerId}/sites/{siteId}/arming-settingsSwitch the site's security system.
Parameters
security_typenumberrequired1 = Alarm Panel — Primary Bridge · 2 = Alarm Panel — Individual Bridge · 3 = CHeKT Video Security System · 4 = External security system.
Responses
- 200Updated ResponseArmingSettingDto.
Alarm Verifications
Respond to alarm verification requests CHeKT initiates. Each verification has a verification_id (UUID) and is tied to one contact_id.
/partner/v1/dealers/{dealerId}/sites/{siteId}/alarm-verifications/{verificationId}Submit dispatch or disregard action for a pending verification.
Parameters
verificationIdstring<uuid>requiredUUID assigned by CHeKT when the verification was created.
contact_idnumberrequiredContact who handled the verification.
actionenumrequireddispatch | disregard.
responded_atISO-8601requiredWhen the action was taken.
Responses
- 200ResponseAlarmVerificationDto echoing the recorded action.
- 404verificationId not found or expired.
Common response shapes
Every endpoint returns a documented DTO. The most-used shapes below — the full schema lives in the OpenAPI spec.
ResponseDealerDto
{
"dealer_id": 12345,
"external_dealer_id": "ext-67890",
"company_name": "CHeKT Security Solutions Inc.",
"company_address1": "456 Market Street",
"company_address2": "Suite 801, 8th Floor",
"company_email": "support@chektdealer.com",
"company_phone_number": "+1-555-123-4567",
"created_at": "2024-03-27T12:34:56.000Z"
}ResponseSiteDto
{
"site_id": 1,
"external_site_id": "1234567890",
"name": "Gangnam Headquarters",
"monitoring_station_id": 12345,
"external_monitoring_station_id": "12345",
"account_number": "1234567890",
"address1": "123 Teheran-ro, Gangnam-gu, Seoul",
"address2": "7th Floor, Suite 701",
"timezone": "Asia/Seoul",
"is_activated": 1,
"has_physical_bridge": true,
"created_at": "2025-01-01 00:00:00"
}ResponseDeviceDto
{
"device_id": 1,
"external_device_id": "ext-67890",
"device_type": "camera",
"name": "Front Door",
"zone_number": "001",
"additional_zone_numbers": "002,003",
"mac": "1234567890",
"manufacturer": "CHeKT",
"model": "CHEKT-CAM-001",
"serial_number": "1234567890",
"registered_by_partner": "chekt",
"created_at": "2021-07-01T00:00:00.000Z",
"updated_at": "2021-07-01T00:00:00.000Z"
}Bulk device response (Create / Update / Delete)
Bulk endpoints return per-item success or failure so partial failure is recoverable on your side.
{
"success_count": 2,
"failure_count": 1,
"results": [
{ "is_successful": true, "req": { /* CreateDeviceDto */ }, "res": { /* ResponseDeviceDto */ } },
{ "is_successful": true, "req": { /* … */ }, "res": { /* … */ } },
{
"is_successful": false,
"status_code": 400,
"error_message": "name must not be empty",
"req": { /* CreateDeviceDto that failed */ }
}
]
}Error responses
Every endpoint uses the same four error codes for predictable client handling:
- 400 Bad Request
- Invalid input — missing required field, wrong type, or failed validation. Inspect the response body for the failed field.
- 401 Unauthorized
- Token missing, expired, or invalid. Refresh via the OAuth token endpoint.
- 403 Forbidden
- Token is valid but lacks scope for this resource. Common when a Partner token tries to read a dealer that is not connected.
- 404 Not Found
- Resource ID does not exist or has been deleted. Double-check IDs in the URL.