KISI Members API
The Members API from KISI — 2 operation(s) for members.
The Members API from KISI — 2 operation(s) for members.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/kisi:kisi-members-api"
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.
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: 3.2.0
info:
version: 1.0.0
title: Kisi Members API
description: '## Introduction
Welcome to the Kisi API documentation.'
contact:
name: Kisi Support
email: support@getkisi.com
servers:
- url: https://api.kisi.io
description: Kisi Production
tags:
- name: Members
paths:
/members:
get:
operationId: fetchMembers
summary: Fetch members
tags:
- Members
security:
- Kisi-Login: []
- OAuth2: []
deprecated: true
parameters:
- name: ids
in: query
schema:
type: string
description: Filter by object IDs
- name: place_id
in: query
schema:
type: integer
description: 'Filters members that have access to given place.
'
- name: sort
in: query
schema:
type: string
enum:
- name
- -name
- unlock
- -unlock
- access_enabled
- -access_enabled
description: 'Sort the results. Prepend `-` to sort in reverse order.
`name` - sort by member name, alphabetically<br>
`unlock` - sort by last unlock; no unlocks first, then oldest to most recent
'
- name: group_id
in: query
schema:
type: integer
description: Filter by group ID
- name: query
in: query
schema:
type: string
description: 'Filter by a freetext string. Properties searched: `user.email`, `user.name`, `user.notes`
'
- name: user_id
in: query
schema:
type:
- integer
- string
description: Filter by user ID or by current user if value is `me`.
- name: limit
in: query
schema:
type: integer
default: 50
maximum: 100
description: The number of objects to return
- name: offset
in: query
schema:
type: integer
default: 0
maximum: 20000
description: The number of objects to offset
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
type: object
title: Member
properties:
id:
type: integer
description: The ID of the member
resource_type:
type: string
description: The resource type of the member
const: Member
name:
type: string
description: The name of the member
image:
type:
- string
- 'null'
description: The URL to the profile picture of the member.
password_flow_enabled:
type: boolean
description: Whether the member can login with password flow. Only relevant for organizations.
access_enabled:
type: boolean
description: 'Whether the member is allowed to access locks and elevators.
If the user is managed by SCIM, user access will be disabled
unless *both* the `access_enabled` field and
`scim_access_enabled` fields are set to `true`.
'
scim_access_enabled:
type: boolean
description: 'Whether the member is allowed to access locks and elevators.
This field is read-only and can only be managed using SCIM. (See `access_enabled`)
It will always be set to `true` if the member is not managed by SCIM.
'
last_accessed_at:
type:
- string
- 'null'
format: date-time
description: When the user last accessed a door.
created_at:
type: string
format: date-time
description: When the member was created
updated_at:
type: string
format: date-time
description: When the member was updated
role_id:
type: string
description: The role ID of the member.
deprecated: true
notes:
type:
- string
- 'null'
description: The notes for the member.
metadata:
type:
- object
description: 'The metadata for the member.
- Nested values are not accepted.
- Keys have a limit of 50 characters.
- Values have a limit of 500 characters.
- Keys number is limited to 50.
'
organization_id:
type:
- integer
- 'null'
description: The organization ID of the member
user_id:
type: integer
description: The user ID of the member
user:
type: object
title: User
description: The user of the member
properties:
id:
type: integer
description: The ID of the user
resource_type:
type: string
description: The resource type of the user
const: User
email:
type: string
format: email
description: The email of the user.
name:
type: string
description: The name of the user
otp_required_for_login:
type: boolean
description: Whether OTP/2FA is required for login.
required:
- id
- resource_type
- email
- name
- otp_required_for_login
additionalProperties: false
place_id:
deprecated: true
type: 'null'
shares_count:
deprecated: true
type: integer
confirmed:
deprecated: true
type: boolean
required:
- id
- resource_type
- name
- image
- password_flow_enabled
- access_enabled
- scim_access_enabled
- last_accessed_at
- created_at
- updated_at
- role_id
- notes
- metadata
- organization_id
- user_id
- user
- place_id
- shares_count
- confirmed
additionalProperties: false
headers:
X-Collection-Range:
description: 'Pagination information for offset based pagination. `start-end` represents the range
of items requested. `total` represents the total count of items. If there is a total
of 15 items and an offset of 10 and limit of 10 is used, the resulting header is:
`10-19/15`.
'
schema:
type: string
pattern: ^(?<start>\d+)-(?<end>\d+)/(?<total>\d+)$
example: 0-9/200
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
operationId: createMember
summary: Create Member
tags:
- Members
security:
- Kisi-Login: []
- OAuth2: []
deprecated: true
requestBody:
content:
application/json:
schema:
type: object
title: Member
properties:
member:
type: object
properties:
name:
type: string
description: The name of the member
image:
type:
- string
- 'null'
description: The URL to the profile picture of the member.
send_emails:
type: boolean
description: Whether the member should receive emails. Can only be specified for organization members.
confirm:
type: boolean
description: 'Whether the member''s corresponding user should be auto-confirmed on creation.
Can only be specified for organization members.
'
access_enabled:
type: boolean
description: 'Whether the member is allowed to access locks and elevators.
If the user is managed by SCIM, user access will be disabled
unless *both* the `access_enabled` field and
`scim_access_enabled` fields are set to `true`.
'
password_flow_enabled:
type: boolean
description: Whether the member can login with password flow. Only relevant for organizations.
metadata:
type:
- object
description: 'The metadata for the member.
- Nested values are not accepted.
- Keys have a limit of 50 characters.
- Values have a limit of 500 characters.
- Keys number is limited to 50.
'
notes:
type:
- string
- 'null'
description: The notes for the member.
email:
type: string
format: email
description: The email of the member.
required:
- email
required:
- member
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
title: Member
properties:
id:
type: integer
description: The ID of the member
resource_type:
type: string
description: The resource type of the member
const: Member
name:
type: string
description: The name of the member
image:
type:
- string
- 'null'
description: The URL to the profile picture of the member.
password_flow_enabled:
type: boolean
description: Whether the member can login with password flow. Only relevant for organizations.
access_enabled:
type: boolean
description: 'Whether the member is allowed to access locks and elevators.
If the user is managed by SCIM, user access will be disabled
unless *both* the `access_enabled` field and
`scim_access_enabled` fields are set to `true`.
'
scim_access_enabled:
type: boolean
description: 'Whether the member is allowed to access locks and elevators.
This field is read-only and can only be managed using SCIM. (See `access_enabled`)
It will always be set to `true` if the member is not managed by SCIM.
'
last_accessed_at:
type:
- string
- 'null'
format: date-time
description: When the user last accessed a door.
created_at:
type: string
format: date-time
description: When the member was created
updated_at:
type: string
format: date-time
description: When the member was updated
role_id:
type: string
description: The role ID of the member.
deprecated: true
notes:
type:
- string
- 'null'
description: The notes for the member.
metadata:
type:
- object
description: 'The metadata for the member.
- Nested values are not accepted.
- Keys have a limit of 50 characters.
- Values have a limit of 500 characters.
- Keys number is limited to 50.
'
organization_id:
type:
- integer
- 'null'
description: The organization ID of the member
user_id:
type: integer
description: The user ID of the member
user:
type: object
title: User
description: The user of the member
properties:
id:
type: integer
description: The ID of the user
resource_type:
type: string
description: The resource type of the user
const: User
email:
type: string
format: email
description: The email of the user.
name:
type: string
description: The name of the user
otp_required_for_login:
type: boolean
description: Whether OTP/2FA is required for login.
required:
- id
- resource_type
- email
- name
- otp_required_for_login
additionalProperties: false
place_id:
deprecated: true
type: 'null'
shares_count:
deprecated: true
type: integer
confirmed:
deprecated: true
type: boolean
required:
- id
- resource_type
- name
- image
- password_flow_enabled
- access_enabled
- scim_access_enabled
- last_accessed_at
- created_at
- updated_at
- role_id
- notes
- metadata
- organization_id
- user_id
- user
- place_id
- shares_count
- confirmed
additionalProperties: false
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Unprocessable Content
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
/members/{id}:
get:
operationId: fetchMember
summary: Fetch Member
tags:
- Members
security:
- Kisi-Login: []
- OAuth2: []
deprecated: true
parameters:
- name: id
in: path
schema:
type: integer
required: true
description: The ID of the object
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
title: Member
properties:
id:
type: integer
description: The ID of the member
resource_type:
type: string
description: The resource type of the member
const: Member
name:
type: string
description: The name of the member
image:
type:
- string
- 'null'
description: The URL to the profile picture of the member.
password_flow_enabled:
type: boolean
description: Whether the member can login with password flow. Only relevant for organizations.
access_enabled:
type: boolean
description: 'Whether the member is allowed to access locks and elevators.
If the user is managed by SCIM, user access will be disabled
unless *both* the `access_enabled` field and
`scim_access_enabled` fields are set to `true`.
'
scim_access_enabled:
type: boolean
description: 'Whether the member is allowed to access locks and elevators.
This field is read-only and can only be managed using SCIM. (See `access_enabled`)
It will always be set to `true` if the member is not managed by SCIM.
'
last_accessed_at:
type:
- string
- 'null'
format: date-time
description: When the user last accessed a door.
created_at:
type: string
format: date-time
description: When the member was created
updated_at:
type: string
format: date-time
description: When the member was updated
role_id:
type: string
description: The role ID of the member.
deprecated: true
notes:
type:
- string
- 'null'
description: The notes for the member.
metadata:
type:
- object
description: 'The metadata for the member.
- Nested values are not accepted.
- Keys have a limit of 50 characters.
- Values have a limit of 500 characters.
- Keys number is limited to 50.
'
organization_id:
type:
- integer
- 'null'
description: The organization ID of the member
user_id:
type: integer
description: The user ID of the member
user:
type: object
title: User
description: The user of the member
properties:
id:
type: integer
description: The ID of the user
resource_type:
type: string
description: The resource type of the user
const: User
email:
type: string
format: email
description: The email of the user.
name:
type: string
description: The name of the user
otp_required_for_login:
type: boolean
description: Whether OTP/2FA is required for login.
required:
- id
- resource_type
- email
- name
- otp_required_for_login
additionalProperties: false
place_id:
deprecated: true
type: 'null'
shares_count:
deprecated: true
type: integer
confirmed:
deprecated: true
type: boolean
required:
- id
- resource_type
- name
- image
- password_flow_enabled
- access_enabled
- scim_access_enabled
- last_accessed_at
- created_at
- updated_at
- role_id
- notes
- metadata
- organization_id
- user_id
- user
- place_id
- shares_count
- confirmed
additionalProperties: false
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
patch:
operationId: updateMember
summary: Update Member
tags:
- Members
security:
- Kisi-Login: []
- OAuth2: []
deprecated: true
parameters:
- name: id
in: path
schema:
type: integer
required: true
description: The ID of the object
requestBody:
content:
application/json:
schema:
type: object
title: Member
properties:
member:
type: object
properties:
name:
type: string
description: The name of the member
image:
type:
- string
- 'null'
description: The URL to the profile picture of the member.
access_enabled:
type: boolean
description: 'Whether the member is allowed to access locks and elevators.
If the user is managed by SCIM, user access will be disabled
unless *both* the `access_enabled` field and
`scim_access_enabled` fields are set to `true`.
'
password_flow_enabled:
type: boolean
description: Whether the member can login with password flow. Only relevant for organizations.
metadata:
type:
- object
description: 'The metadata for the member.
- Nested values are not accepted.
- Keys have a limit of 50 characters.
- Values have a limit of 500 characters.
- Keys number is limited to 50.
'
notes:
type:
- string
- 'null'
description: The notes for the member.
required: []
required:
- member
responses:
'204':
description: No Content
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
operationId: deleteMember
summary: Delete Member
tags:
- Members
security:
- Kisi-Login: []
- OAuth2: []
deprecated: true
parameters:
- name: id
in: path
schema:
type: integer
required: true
description: The ID of the object
responses:
'204':
description: No Content
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Unprocessable Content
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
components:
schemas:
Errors:
description: Schema describing validation errors.
type: object
properties:
errors:
type: object
additionalProperties:
type: array
items:
type: string
example:
email:
- can't be blank or invalid
password:
- can't be blank
required:
- errors
Error:
description: Schema describing errors.
type: object
properties:
error:
type: string
description: The error message.
example: Wrong email address or password.
code:
type: string
description: An identifier of the error.
example: afc516
required:
- error
- code
securitySchemes:
Webhook-Signature:
type: apiKey
in: header
name: X-Signature
description: 'Authorize using a signature of the request body. The signature is a HMAC-SHA256 hash of the request body using a secret key. <br><br>E.g. `X-Signature: 123`'
Kisi-Login:
type: apiKey
in: header
name: Authorization
description: 'Authorize using a login. Prefix the value with `KISI-LOGIN`<br><br>Example: `Authorization: KISI-LOGIN 123`'
Kisi-Access-Key:
type: apiKey
in: header
name: Authorization
description: 'Authorize using an access key. Prefix the value with `KISI-ACCESS-KEY`<br><br>Example: `Authorization: KISI-ACCESS-KEY 123`'
Kisi-Group-Link:
type: apiKey
in: header
name: Authorization
description: 'Authorize using a group link. Prefix the value with `KISI-GROUP-LINK`<br><br>Example: `Authorization: KISI-GROUP-LINK 123`'
Kisi-Service:
type: apiKey
in: header
name: Authorization
description: 'Authorize using a service. Prefix the value with `KISI-SERVICE`<br><br>Example: `Authorization: KISI-SERVICE 123`'
OAuth2Basic:
type: http
scheme: basic
description: Username is the client id. Password is the client secret.
OAuth2:
type: oauth2
description: 'OAuth access tokens are sent as bearer tokens. Example: `Authorization: Bearer youraccesstoken`'
flows:
authorizationCode:
authorizationUrl: https://api.kisi.io/oauth/authorize
tokenUrl: https://api.kisi.io/oauth/token
scopes: {}
x-provenance:
method: harvested
publisher: KISI
source: https://api.getkisi.com/openapi/apps.yaml
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)