Work with this as data
Every API 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 apis
7 MCP tools reach this
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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/demodesk:demodesk-users-api"
All apis
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.
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.
OpenAPI Specification
openapi: 3.2.0
info:
title: Demodesk Public Users API
version: v2
description: Customer-facing API for external integrations.
contact:
email: support@demodesk.com
servers:
- url: https://demodesk.com/api/v2
description: Public demodesk host
security:
- bearerAuth: []
tags:
- name: Users
description: Endpoints regarding user management.
paths:
/me:
get:
tags:
- Users
operationId: getCurrentUser
x-mcp:
enabled: true
toolName: users_get_me
title: Get current user
description: 'Resolve who is authenticated for this API key or OAuth token.
Typical use case: disambiguating prompts like "my meetings" and obtaining the current user''s id/email for follow-up filtering.
Returns the authenticated user''s core profile fields.
'
readOnlyHint: true
idempotentHint: true
destructiveHint: false
openWorldHint: false
timeoutMs: 5000
summary: Get current user
description: 'Returns the user represented by the provided API key or OAuth token.
Rate limits:
- Global: 120 requests per minute per API key.'
responses:
'200':
description: Current user fetched successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/current-user-response'
'401':
$ref: '#/components/responses/unauthorized'
'429':
$ref: '#/components/responses/too-many-requests'
/users:
get:
tags:
- Users
operationId: listUsers
x-mcp:
enabled: true
toolName: users_list
title: List users
description: 'List active users visible to the authenticated user.
Typical use case: selecting or resolving teammates by name/email before filtering recordings or assigning follow-up actions. It can also be used to confirm that users exist when given a specific email address.
'
readOnlyHint: true
idempotentHint: true
destructiveHint: false
openWorldHint: false
timeoutMs: 5000
summary: List users
description: 'Returns active users visible to the authenticated user.
Rate limits:
- Global: 120 requests per minute per API key.'
parameters:
- $ref: '#/components/parameters/search'
- $ref: '#/components/parameters/cursor'
- $ref: '#/components/parameters/limit'
responses:
'200':
description: Users fetched successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/users-index-response'
'400':
$ref: '#/components/responses/bad-request'
'401':
$ref: '#/components/responses/unauthorized'
'429':
$ref: '#/components/responses/too-many-requests'
components:
schemas:
current-user-item:
type: object
required:
- id
- firstName
- lastName
- email
- role
- locale
- timeZone
- groups
properties:
id:
type: string
description: Internal user id.
examples:
- '12345'
firstName:
type: string
description: First name of the authenticated user.
examples:
- Max
lastName:
type: string
description: Last name of the authenticated user.
examples:
- Mustermann
email:
type: string
format: email
description: Primary email of the authenticated user.
examples:
- max@example.com
role:
type: string
description: Role of the authenticated user within the company.
enum:
- user
- manager
- company_admin
locale:
type: string
description: Locale of the authenticated user.
examples:
- en
timeZone:
type: string
description: IANA time zone of the authenticated user.
examples:
- Europe/Berlin
groups:
type: array
description: Groups the authenticated user belongs to.
items:
$ref: '#/components/schemas/recording-group-item'
recording-group-item:
type: object
required:
- groupId
- groupName
properties:
groupId:
type: string
description: Internal group ID as string.
examples:
- '456'
groupName:
type: string
description: Name of the group.
examples:
- Enterprise Sales
current-user-response:
type: object
required:
- data
properties:
data:
$ref: '#/components/schemas/current-user-item'
users-index-response:
type: object
required:
- data
- meta
properties:
data:
type: array
items:
$ref: '#/components/schemas/user-list-item'
meta:
type: object
required:
- hasNext
- limit
properties:
hasNext:
type: boolean
limit:
type: integer
nextCursor:
type:
- string
- 'null'
user-list-item:
type: object
required:
- id
- firstName
- lastName
- email
- role
- locale
- timeZone
properties:
id:
type: string
description: Internal user id.
examples:
- '12345'
firstName:
type: string
description: First name of the user.
examples:
- Max
lastName:
type: string
description: Last name of the user.
examples:
- Mustermann
email:
type: string
format: email
description: Primary email of the user.
examples:
- max@example.com
role:
type: string
description: Role of the user within the company.
enum:
- user
- manager
- company_admin
locale:
type: string
description: Locale of the user.
examples:
- en
timeZone:
type: string
description: IANA time zone of the user.
examples:
- Europe/Berlin
error-response:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
- requestId
properties:
code:
type: string
message:
type: string
requestId:
type: string
parameters:
cursor:
name: cursor
in: query
required: false
description: Opaque cursor returned by a previous list response.
schema:
type: string
search:
name: search
in: query
required: false
description: 'Case-insensitive partial search across full name and email.
'
examples:
byName:
summary: Search by name
value: max
byEmail:
summary: Search by email
value: mustermann@example.com
schema:
type: string
limit:
name: limit
in: query
required: false
description: Page size for recordings list.
schema:
type: integer
minimum: 1
maximum: 100
default: 100
responses:
bad-request:
description: Request validation failed.
content:
application/json:
schema:
$ref: '#/components/schemas/error-response'
too-many-requests:
description: Rate limit exceeded.
headers:
Retry-After:
description: Seconds until the next request is allowed.
schema:
type: integer
unauthorized:
description: API key is missing or invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/error-response'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: API key or OAuth token
description: 'Pass your API key or OAuth token as a Bearer token in the `Authorization` HTTP header.
```
curl -H "Authorization: Bearer YOUR_API_KEY" https://demodesk.com/api/v2/recordings
```
**Obtaining a key:** Generate an API key in your Demodesk account under
*Settings > Integrations > Other*.
**Permissions:** The key inherits the permissions of the user who created it.
So when trying to access resources of your whole company, make sure to use the API key of an admin user who is
member of all restricted groups.
'