Access API Reference
API endpoints for managing access.
AlgoPIN
Create a Daily AlgoPIN
https://api.igloohome.co/works/devices/{id}/algopin/dailySee POST /devices/{id}/algopin/permanent. Identical shape, different scope. endDate is required for this PIN type (forbidden for permanent/onetime), and variance range is 1–3 (not 1–10).
Path Parameters
| Parameter | Type | Required |
|---|---|---|
| id | string | Yes |
Body Parameters
accessNamestring requireddepartmentIdstring
Required unless the account has a single department.startDatestring required
FormatYYYY-MM-DDTHH:00:00+hh:mm. Must be now or after.endDatestring
FormatYYYY-MM-DDTHH:00:00+hh:mm. Required for daily/hourly, forbidden for onetime/permanent. Must be afterstartDate. Hourly: at most 672 hours afterstartDate.varianceinteger required
Daily/hourly: 1–3. Onetime/permanent: 1–10. Values 6–10 require newer lock firmware (some older locks support them after a firmware update); otherwise use 1–5.
Request Example
Responses
OK. If a matching PIN already exists for this lock, type, and window with the same 'variance', the API returns the same success response without creating a new PIN. This idempotent behavior is not an error.
Bad Request
Unauthorized, invalid or expired authorization token
Missing a required scope: AlgoPIN endpoints need both the general AlgoPIN scope and the scope for the specific PIN type (see the endpoint description).
Response
Missing 'Content-Type: application/json'.
Response body
pinstringpinIdstring
Response body
errorstring
Response body
errorstring
No example response recorded for this status code.
Example response — 402-account-suspended:
Example response — 402-trial-ended:
No example response recorded for this status code.
Create an Hourly AlgoPIN
https://api.igloohome.co/works/devices/{id}/algopin/hourlySee POST /devices/{id}/algopin/permanent. Identical shape, different scope. endDate is required for this PIN type (forbidden for permanent/onetime), and variance range is 1–3 (not 1–10).
Path Parameters
| Parameter | Type | Required |
|---|---|---|
| id | string | Yes |
Body Parameters
accessNamestring requireddepartmentIdstring
Required unless the account has a single department.startDatestring required
FormatYYYY-MM-DDTHH:00:00+hh:mm. Must be now or after.endDatestring
FormatYYYY-MM-DDTHH:00:00+hh:mm. Required for daily/hourly, forbidden for onetime/permanent. Must be afterstartDate. Hourly: at most 672 hours afterstartDate.varianceinteger required
Daily/hourly: 1–3. Onetime/permanent: 1–10. Values 6–10 require newer lock firmware (some older locks support them after a firmware update); otherwise use 1–5.
Request Example
Responses
OK. If a matching PIN already exists for this lock, type, and window with the same 'variance', the API returns the same success response without creating a new PIN. This idempotent behavior is not an error.
Bad Request
Unauthorized, invalid or expired authorization token
Missing a required scope: AlgoPIN endpoints need both the general AlgoPIN scope and the scope for the specific PIN type (see the endpoint description).
Response
Missing 'Content-Type: application/json'.
Response body
pinstringpinIdstring
Response body
errorstring
Response body
errorstring
No example response recorded for this status code.
Example response — 402-account-suspended:
Example response — 402-trial-ended:
No example response recorded for this status code.
Create a One-Time AlgoPIN
https://api.igloohome.co/works/devices/{id}/algopin/onetimeSee POST /devices/{id}/algopin/permanent. Identical shape, different scope.
Path Parameters
| Parameter | Type | Required |
|---|---|---|
| id | string | Yes |
Body Parameters
accessNamestring requireddepartmentIdstring
Required unless the account has a single department.startDatestring required
FormatYYYY-MM-DDTHH:00:00+hh:mm. Must be now or after.endDatestring
FormatYYYY-MM-DDTHH:00:00+hh:mm. Required for daily/hourly, forbidden for onetime/permanent. Must be afterstartDate. Hourly: at most 672 hours afterstartDate.varianceinteger required
Daily/hourly: 1–3. Onetime/permanent: 1–10. Values 6–10 require newer lock firmware (some older locks support them after a firmware update); otherwise use 1–5.
Request Example
Responses
OK. If a matching PIN already exists for this lock, type, and window with the same 'variance', the API returns the same success response without creating a new PIN. This idempotent behavior is not an error.
Bad Request
Unauthorized, invalid or expired authorization token
Missing a required scope: AlgoPIN endpoints need both the general AlgoPIN scope and the scope for the specific PIN type (see the endpoint description).
Response
Missing 'Content-Type: application/json'.
Response body
pinstringpinIdstring
Response body
errorstring
Response body
errorstring
No example response recorded for this status code.
Example response — 402-account-suspended:
Example response — 402-trial-ended:
No example response recorded for this status code.
Create a Passage AlgoPIN
https://api.igloohome.co/works/devices/{id}/algopin/passageAllows unlock with AlgoPIN and keeps the lock unlocked for the duration given in the request body. Supports newer devices with the latest firmware only.
Path Parameters
| Parameter | Type | Required |
|---|---|---|
| id | string | Yes |
Body Parameters
varianceinteger required- Allowed values:
1
- Allowed values:
startDatestring<date-time> required
Date and time when the permission starts. Must be in formatYYYY-MM-DDTHH:00:00+hh:mm(hour resolution only). The PIN is valid fromstartDatefordurationHourshours.- Example:
2022-01-01T12:00:00+08:00
- Example:
durationHoursinteger required
Must be between 1 and 12 hoursaccessNamestring required
Name or short description of the access- Example:
Maintenance guy
- Example:
departmentIdstring
Required unless the account has a single department.
Request Example
Responses
OK. If a matching PIN already exists for this lock, type, and window with the same 'variance', the API returns the same success response without creating a new PIN. This idempotent behavior is not an error.
Bad Request
Unauthorized, invalid or expired authorization token
Missing a required scope: AlgoPIN endpoints need both the general AlgoPIN scope and the scope for the specific PIN type (see the endpoint description).
Response
Missing 'Content-Type: application/json'.
Response body
pinstringpinIdstring
Response body
errorstring
Response body
errorstring
No example response recorded for this status code.
Example response — 402-account-suspended:
Example response — 402-trial-ended:
No example response recorded for this status code.
Create a Permanent AlgoPIN
https://api.igloohome.co/works/devices/{id}/algopin/permanentRequest and response shape match the other AlgoPIN endpoints (onetime/daily/hourly). Requires the algopin-permanent scope. A different AlgoPIN scope (e.g. algopin-daily) is not sufficient and returns a 403.
Path Parameters
| Parameter | Type | Required |
|---|---|---|
| id | string | Yes |
Body Parameters
accessNamestring requireddepartmentIdstring
Required unless the account has a single department.startDatestring required
FormatYYYY-MM-DDTHH:00:00+hh:mm. Must be now or after.endDatestring
FormatYYYY-MM-DDTHH:00:00+hh:mm. Required for daily/hourly, forbidden for onetime/permanent. Must be afterstartDate. Hourly: at most 672 hours afterstartDate.varianceinteger required
Daily/hourly: 1–3. Onetime/permanent: 1–10. Values 6–10 require newer lock firmware (some older locks support them after a firmware update); otherwise use 1–5.
Request Example
Responses
OK. If a matching PIN already exists for this lock, type, and window with the same 'variance', the API returns the same success response without creating a new PIN. This idempotent behavior is not an error.
Bad Request
Unauthorized, invalid or expired authorization token
Missing a required scope: AlgoPIN endpoints need both the general AlgoPIN scope and the scope for the specific PIN type (see the endpoint description).
Response
Missing 'Content-Type: application/json'.
Response body
pinstringpinIdstring
Response body
errorstring
Response body
errorstring
No example response recorded for this status code.
Example response — 402-account-suspended:
Example response — 402-trial-ended:
No example response recorded for this status code.
eKey
Grant eKey Access
https://api.igloohome.co/works/devices/{id}/access/grantCreates an eKey access record for the recipient and logs it in device activity and access history. All error responses on this endpoint use a {message, code} body shape. See the 404 response below for the specific not-found causes.
Path Parameters
| Parameter | Type | Required |
|---|---|---|
| id | string | Yes |
Body Parameters
recipientIdstring requiredstartDateTimestring<date-time> required
Must include an explicit timezone offset ('Z' or '+08:00').endDateTimestring<date-time> required
Must be after startDateTime and after the current time. Same explicit-timezone-offset requirement.permissionsarray of string required
Narrower allow-list than POST /ekey's 56-value list, even though both mint an eKey.departmentRefstringlangstring
Request Example
Responses
Created. If activity logging fails after the API saves the access record, the API still returns 201, but with a different response body (no 'code' field) containing an error message.
Bad Request
Unauthorized, invalid or expired authorization token
Forbidden. One of: (1) the token is valid but lacks the required scope for this endpoint (no body); (2) the user revoked the OAuth client's access ('{error: "The user has revoked access for this application..."}').
RECIPIENT_NOT_FOUND / LOCK_NOT_FOUND / DEPARTMENT_NOT_FOUND.
CONFIGURATION_LOCK_ISSUE / FAILED_GENERATE_EKEY.
Missing 'Content-Type: application/json'.
NON_LOCK_DEVICE_NOT_ALLOWED. Returned when the target device is not a Lock.
FLAT_ORG_DEPT_NOT_FOUND / INTERNAL_SERVER_ERROR.
Response body
messagestringaccessesarray of object_idstringuserRefstringrecipientstringlockRefstringaccessTypestring- Allowed values:
ekey
- Allowed values:
viastringstartDateTimestring<date-time>endDateTimestring<date-time>permissionsarray of stringdepartmentRefstringdescriptionstringbluetoothGuestKeystringkeyIdnumberaccessRightstring
Response body
messagestringcodestring
Response body
errorstring
Response body
errorstring
Response body
errorstring
Response body
messagestringcodestring
Response body
messagestringcodestring
Response body
messagestringcodestring
Response body
messagestringcodestring
No example response recorded for this status code.
Example response — 402-account-suspended:
Example response — 402-trial-ended:
No example response recorded for this status code.
Revoke eKey Access
https://api.igloohome.co/works/devices/{id}/access/revokeRevokes all matching access records for this recipient and permanently deletes their associated key material. You cannot undo this action.
Path Parameters
| Parameter | Type | Required |
|---|---|---|
| id | string | Yes |
Body Parameters
recipientIdstring required
Request Example
Responses
OK.
Query/body validation failure.
Unauthorized, invalid or expired authorization token
Forbidden. One of: (1) the token is valid but lacks the required scope for this endpoint (no body); (2) the user revoked the OAuth client's access ('{error: "The user has revoked access for this application..."}').
RECIPIENT_NOT_FOUND / LOCK_NOT_FOUND / NO_ACTIVE_ACCESS ("Ekey already revoked or not found").
Missing 'Content-Type: application/json'.
INTERNAL_SERVER_ERROR. Unlike grant, revoke has no tolerant fallback if activity/audit-trail logging fails. Any failure here returns a 500.
Response body
messagestring- Allowed values:
Access revoked successfully
- Allowed values:
revokedCountinteger
Response body
errorstring
Response body
errorstring
Response body
errorstring
Response body
errorstring
Response body
messagestringcodestring
Response body
messagestringcodestring
No example response recorded for this status code.
Example response — 402-account-suspended:
Example response — 402-trial-ended:
No example response recorded for this status code.
Generate eKey
https://api.igloohome.co/works/devices/{id}/ekeyReturns an eKey without creating an access record. To create a tracked access record, use Grant eKey Access. Error responses are plain text, not JSON. Only a successful response returns a JSON body.
Path Parameters
| Parameter | Type | Required |
|---|---|---|
| id | string | Yes |
Body Parameters
startDatestring required
FormatYYYY-MM-DDTHH:mm:00Z(minute resolution).endDatestring required
Must be afterstartDate. Same format.permissionsarray of string required
Each must be a valid permission type (56 supported values).
Request Example
Responses
OK.
Bad Request
Unauthorized, invalid or expired authorization token
Forbidden. One of: (1) the token is valid but lacks the required scope for this endpoint (no body); (2) the user revoked the OAuth client's access ('{error: "The user has revoked access for this application..."}').
Plain-text body: '"failed.generate.ekey"' (key derivation failed).
Missing 'Content-Type: application/json'.
Plain-text body. Uncaught exception.
Response body
keyIdnumberbluetoothGuestKeystring
Base64-encoded obfuscated blob.
Response body
errorstring
Response body
errorstring
Response body
errorstring
No example response recorded for this status code.
Example response — 402-account-suspended:
Example response — 402-trial-ended:
No example response recorded for this status code.
Access Records
List Device Access
https://api.igloohome.co/works/devices/{id}/accessA malformed query parameter returns a 400, even if authentication is missing or invalid.
Path Parameters
| Parameter | Type | Required |
|---|---|---|
| id | string | Yes |
Query Parameters
accessTypestring
Comma-separated list frompin,ekey,nfc,fingerprint. Invalid entries → 400{error: "valid 'accessType' - pin,ekey,nfc,fingerprint"}.limitinteger- Constraints:
>= 1,<= 300 - Default:
100
- Constraints:
cursorstringsortstring- Default:
desc - Allowed values:
asc,desc
- Default:
Request Example
Responses
OK.
Query/body validation failure.
Unauthorized, invalid or expired authorization token
Forbidden. One of: (1) the token is valid but lacks the required scope for this endpoint (no body); (2) the user revoked the OAuth client's access ('{error: "The user has revoked access for this application..."}').
Device not found, or (Lock/Keypad only) Property not found.
Property timezone is missing.
Response body
nextCursorstring
Present only if another page exists.payloadarray of objectidstringnamestringaccessTypestring- Allowed values:
pin,ekey,nfc,fingerprint
- Allowed values:
bluetoothDeviceNamestringisCustomPinboolean
Present only if accessType===pin.pinstring
Present only if accessType===pin.pinTypestring
Present only if accessType===pin. The API stores and reports AlgoPIN daily/hourly variants asduration.- Allowed values:
otp,duration,permanent
- Allowed values:
startDateTimestring<date-time>endDateTimestring<date-time>recipientobject
Present only ifaccessTypeisekey.namestringemailstring
createdAtstring<date-time>
Response body
errorstring
Response body
errorstring
Response body
errorstring
Response body
errorstring
Response body
messagestring
Response body
messagestring
No example response recorded for this status code.
Example response — 402-account-suspended:
Example response — 402-trial-ended:
No example response recorded for this status code.