@dougschaefer/appspace
v2026.04.27.1
Appspace Cloud v3 API administration toolkit — devices, reservations, users, visitors, and the custom card development lifecycle (scaffold, pull existing, validate, package, register instances). Walk-in workflows fire DropIn invitations through Appspace's native notification routing (Teams Passport, in-app push, Concierge) with no external webhook required.
Repository
https://github.com/dougschaefer6/swamp-appspace
Labels
appspaceavdigital-signageroom-reservationmeeting-roomsvisitor-managementcard-development
Contents
Quality score
How well-documented and verifiable this extension is.
Grade A
- Has README or module doc2/2earned
- README has a code example1/1earned
- README is substantive1/1earned
- Most symbols documented1/1earned
- No slow types1/1earned
- Has description1/1earned
- At least one platform tag (or universal)1/1earned
- Two or more platform tags (or universal)1/1earned
- License declared1/1earned
- Verified public repository2/2earned
Install
$ swamp extension pull @dougschaefer/appspace@dougschaefer/appspace-cardv1.0.0appspace/card.ts
scaffoldCreate a new Appspace card project at the given path with manifest.json, schema.json, model.json, index.html, and a placeholder thumbnail. Defaults to a plain HTML/JS template (zero build step) — extend with React/Angular as needed.
| Argument | Type | Description |
|---|---|---|
| path | string | Destination directory (created if missing). Should be empty. |
| id | string | Reverse-DNS card identifier (e.g., 'com.example.lobby.welcome') |
| name | string | Human-readable card name |
| developer | string | Developer/author name for the manifest (your company or org) |
validateValidate a card project's Big Three (manifest.json, schema.json, model.json) for required fields and consistency. Returns warnings without modifying files.
| Argument | Type | Description |
|---|---|---|
| path | string | Path to card project directory |
buildRun a build command in the card project directory (e.g., 'npm run build'). Skip for plain-HTML cards that need no build.
| Argument | Type | Description |
|---|---|---|
| path | string | Path to card project directory |
| command | string | Build executable |
| args | array | Build command arguments |
packagePackage a card project into a .zip ready for upload to Appspace. Handles the 'zip contents not folder' gotcha by archiving entries with paths relative to the source dir. Run validate first.
| Argument | Type | Description |
|---|---|---|
| sourceDir | string | Directory whose contents to package (typically build/ or the project root for plain cards) |
| outputZip | string | Path where the .zip should be written (e.g., 'dist/my-card.zip') |
| excludeGlobs | array | Top-level entries to skip (matched against the entry name, not full path) |
listTemplateTypesList all card template types installed on the Appspace tenant. Use the returned 'id' as cardTemplateTypeId when creating new template instances.
listTemplatesList configured card template instances in the Appspace library.
| Argument | Type | Description |
|---|---|---|
| maxItems? | number |
getTemplateGet a single card template by ID.
| Argument | Type | Description |
|---|---|---|
| id | string | Card template ID |
createTemplateCreate a new configured card template instance from a registered template type. The 'model' and 'schema' fields override the template type's defaults for this instance.
| Argument | Type | Description |
|---|---|---|
| cardTemplateTypeId | string | ID of the template type to instantiate (from listTemplateTypes) |
| name | string | Display name for the instance |
| model? | record | Per-instance model.json overrides |
| schema? | record | Per-instance schema.json overrides |
| permissions? | array | |
| theme? | record |
pullCardDownload a card's source files from its templateUrl on the Appspace tenant. Fetches manifest/schema/model/index.html plus every script and stylesheet referenced from index.html (preserving the relative directory structure). Use this to stage an existing card for customization.
| Argument | Type | Description |
|---|---|---|
| templateId | string | Card template instance ID (UUID). Find via listTemplates. |
| destDir | string | Destination directory. Created if missing; existing files are overwritten. |
| includeAssets | boolean | When true (default), follow JS/CSS references from index.html and download those too. When false, only fetches root files (manifest, schema, model, index.html, thumbnail.svg). |
updateTemplateUpdate a configured card template instance (name, model overrides, schema overrides, theme).
| Argument | Type | Description |
|---|---|---|
| id | string | Card template instance ID |
| name? | string | |
| model? | record | |
| schema? | record | |
| theme? | record |
Resources
cardTemplateType(infinite)— Registered card template type — the developer-uploaded card 'class' that instances are created from
cardTemplate(infinite)— Configured card template instance — references a cardTemplateType and stores the per-instance schema/model overrides
cardProject(infinite)— Local card project on disk — directory containing manifest.json, schema.json, model.json, and the card's web app
cardPackage(infinite)— Built and zipped card ready to upload to Appspace
cardPull(infinite)— Source files pulled from a card's templateUrl on the Appspace tenant — manifest, schema, model, index.html, and all referenced JS/CSS/asset bundles
@dougschaefer/appspace-devicev2026.04.27.1appspace/device.ts
listQuery devices with optional filtering. Pages through results automatically.
| Argument | Type | Description |
|---|---|---|
| locationId? | string | Filter by location ID |
| groupId? | string | Filter by device group ID |
| status? | string | Filter by status (Online, Offline, etc.) |
| maxItems? | number | Maximum devices to return |
getGet details for a specific device by ID.
| Argument | Type | Description |
|---|---|---|
| id | string | Device ID (UUID) |
getStatusesQuery live status for devices (online/offline, sync state, etc.).
| Argument | Type | Description |
|---|---|---|
| deviceIds? | array | Optional list of device IDs to filter on |
getPropertiesGet all Player Properties for a device. These are key/value pairs used to override card configuration per device (e.g., API credentials, datasourceurl).
| Argument | Type | Description |
|---|---|---|
| deviceId | string | Device ID |
setPropertiesUpsert one or more Player Properties on a device. Property names must be lowercase and case-sensitive.
| Argument | Type | Description |
|---|---|---|
| deviceId | string | Device ID |
| properties | record | Map of property name (lowercase) → value |
deletePropertiesRemove specific Player Properties from a device.
| Argument | Type | Description |
|---|---|---|
| deviceId | string | Device ID |
| propertyNames | array | Property names to delete |
sendCommandSend a command to a device (restart, reload, screenshot, etc.). Available commands depend on device type.
| Argument | Type | Description |
|---|---|---|
| deviceId | string | Device ID |
| command | string | Command name (e.g., 'restart', 'reload', 'screenshot') |
| parameters? | record | Optional command parameters |
getConfigurationGet the runtime configuration for a device.
| Argument | Type | Description |
|---|---|---|
| deviceId | string | Device ID |
screenCaptureGet the latest screen capture URL for a device (only available for devices with screencapture capability).
| Argument | Type | Description |
|---|---|---|
| deviceId | string | Device ID |
listGroupsList all device groups.
syncTrigger a content sync on one or more devices (push channel/playlist updates).
| Argument | Type | Description |
|---|---|---|
| deviceIds | array | Device IDs to sync |
listIntegrationsList third-party device integrations configured for the account (e.g., Crestron Fusion, Cisco Webex).
listTaskDeploymentsQuery task deployments (firmware updates, configuration pushes, etc.) by location, device, or group.
| Argument | Type | Description |
|---|---|---|
| locationId? | string | |
| deviceId? | string | |
| deviceGroupId? | string |
createTaskDeploymentDeploy a task (firmware update, configuration, command) to one or more targets.
| Argument | Type | Description |
|---|---|---|
| taskTemplateId | string | Task template ID to deploy |
| targetType | enum | What to target |
| targetIds | array | IDs of targets |
| scheduledAt? | string | ISO 8601 datetime to schedule the deployment (defaults to immediate) |
getTaskResponsesGet task execution responses for a device (results of firmware updates, command executions, etc.).
| Argument | Type | Description |
|---|---|---|
| deviceId | string | Device ID |
| taskClass? | string | Optional task class filter |
Resources
device(infinite)— Appspace-managed display device with location, group, channel, and runtime status
deviceGroup(infinite)— Group of Appspace devices for batch operations
deviceProperties(infinite)— Player Properties for a specific device (used for per-device card overrides like API credentials)
taskDeployment(infinite)— Task deployed to a device, group, or location (firmware update, command, etc.)
@dougschaefer/appspace-reservationv2026.04.27.1appspace/reservation.ts
listEventsList reservation events with optional date and resource filtering. Pages automatically.
| Argument | Type | Description |
|---|---|---|
| startAt? | string | ISO 8601 — return events at or after this time |
| endAt? | string | ISO 8601 — return events at or before this time |
| resourceId? | string | Filter by resource ID (room, desk, etc.) |
| maxItems? | number |
getEventGet details for a specific event.
| Argument | Type | Description |
|---|---|---|
| eventId | string |
cancelEventCancel an event.
| Argument | Type | Description |
|---|---|---|
| eventId | string | |
| reason? | string |
endEventEnd an event early (releases the resource for the remaining duration).
| Argument | Type | Description |
|---|---|---|
| eventId | string |
extendEventExtend an event's end time.
| Argument | Type | Description |
|---|---|---|
| eventId | string | |
| endAt | string | New end time (ISO 8601) |
releaseEventRelease resources from an event without cancelling it.
| Argument | Type | Description |
|---|---|---|
| eventId | string |
checkinEventCheck in to an event (confirm occupancy).
| Argument | Type | Description |
|---|---|---|
| eventId | string |
listReservationsQuery reservations with optional filtering. Pages automatically.
| Argument | Type | Description |
|---|---|---|
| startAt? | string | |
| endAt? | string | |
| resourceId? | string | |
| organizer? | string | Filter by organizer email |
| maxItems? | number |
getReservationGet details for a specific reservation.
| Argument | Type | Description |
|---|---|---|
| reservationId | string |
createReservationCreate a new reservation.
| Argument | Type | Description |
|---|---|---|
| title | string | Reservation title |
| startAt | string | Start time (ISO 8601) |
| endAt | string | End time (ISO 8601) |
| resourceIds | array | Reservable resource IDs (rooms, desks, etc.) |
| organizerEmail? | string | Organizer email (defaults to token user) |
| attendees? | array | Attendee emails |
| notes? | string | |
| isAllDay? | boolean |
updateReservationUpdate one or more properties of an existing reservation.
| Argument | Type | Description |
|---|---|---|
| reservationId | string | |
| title? | string | |
| startAt? | string | |
| endAt? | string | |
| notes? | string |
deleteReservationDelete a reservation.
| Argument | Type | Description |
|---|---|---|
| reservationId | string |
listReservableResourcesList resources (rooms, desks, equipment) that can be reserved.
| Argument | Type | Description |
|---|---|---|
| resourceType? | string | Filter by type (e.g., 'Room', 'Desk') |
| buildingId? | string | |
| maxItems? | number |
getMyEventsGet events related to the current user (the Service Account behind the token).
| Argument | Type | Description |
|---|---|---|
| startAt? | string | |
| endAt? | string |
checkUserAvailabilityCheck whether one or more users are available during a given time window.
| Argument | Type | Description |
|---|---|---|
| attendees | array | List of attendee emails |
| startAt | string | Start time (ISO 8601) |
| endAt | string | End time (ISO 8601) |
getScheduleGet a schedule view across resources for a given time window.
| Argument | Type | Description |
|---|---|---|
| resourceIds | array | Resources to include |
| startAt | string | |
| endAt | string |
Resources
event(infinite)— Reservation event — a scheduled instance bound to one or more resources, possibly synced from an external calendar provider
reservation(infinite)— Reservation record — the booking abstraction that owns one or more events and tracks attendees, checkpoints, and resources
reservableResource(infinite)— Resource (room, desk, equipment) that can be reserved
@dougschaefer/appspace-userv2026.04.27.1appspace/user.ts
listQuery users with pagination. Returns the full user directory by default; pass maxItems to cap.
| Argument | Type | Description |
|---|---|---|
| maxItems? | number | Maximum users to return |
| userType? | string | Filter by user type (e.g. 'User', 'Visitor') |
getGet a specific user by ID.
| Argument | Type | Description |
|---|---|---|
| id | string | User UUID |
findByEmailFind users by email — workaround for the missing email-filter on /users. Pages through the directory and matches case-insensitively. Returns the matched user(s) as data; logs a warning if directory exceeds maxScan.
| Argument | Type | Description |
|---|---|---|
| string | Email to find (case-insensitive). Substring match by default. | |
| exact | boolean | When true, match exact email; when false, substring match. |
| maxScan? | number | Maximum directory entries to scan before giving up |
meGet the current user (the Service Account behind the API token). Useful for confirming token identity and inspecting account context.
listGroupsList all user groups in the account.
| Argument | Type | Description |
|---|---|---|
| maxItems? | number |
getGroupMembersList members of a specific user group.
| Argument | Type | Description |
|---|---|---|
| groupId | string | User group UUID |
| maxItems? | number |
Resources
user(infinite)— Appspace user — directory record with email, location, roles, group memberships
userGroup(infinite)— Appspace user group with role assignments and network
me(1d)— Current user (the Service Account behind the API token); useful to confirm token identity
@dougschaefer/appspace-visitorv2026.04.27.1appspace/visitor.ts
listQuery the visitor list with optional filtering.
| Argument | Type | Description |
|---|---|---|
| maxItems? | number |
getGet a specific visitor by ID.
| Argument | Type | Description |
|---|---|---|
| id | string | Visitor UUID |
createCreate a visitor record. Required: firstName, lastName, email, visitorType. customFields must be empty array unless the account has custom visitor fields configured. Note: bare visitor creation does NOT trigger the host-notification chain — pair with createDropInInvitation for walk-in workflows.
| Argument | Type | Description |
|---|---|---|
| firstName | string | |
| lastName | string | |
| string | ||
| visitorType | string | Visitor type label — free-form string. Defaults to 'Guest'. |
| customFields | array | Custom field values. Field IDs must be pre-configured in /visitormanagement/configurations/me/visitorfields. |
deleteDelete a visitor by ID.
| Argument | Type | Description |
|---|---|---|
| id | string | Visitor UUID |
getConfigurationGet the account's Visitor Management configuration — required fields, custom field definitions, visit purposes, visitor types, retention, and the notification config block that controls Teams Passport / Appspace app push / email routing.
createDropInInvitationCreate a walk-in visitor + DropIn invitation in a single call. Mirrors the kiosk's `visitorsKioskCreateDropin` flow: creates the visitor record, then POSTs an invitation tied to the host. Appspace's configured Notifications fan out from there.
| Argument | Type | Description |
|---|---|---|
| firstName | string | |
| lastName | string | |
| string | ||
| company? | string | |
| notes? | string | |
| hostUserId | string | Appspace user UUID who hosts the drop-in (receives notification) |
| hostEmail | string | Same user's email |
| resourceId? | string | Optional reservation resource UUID (routes to that resource's Concierges) |
| durationMinutes | number | Length of the drop-in invitation in minutes |
| visitorType | string | |
| purpose | string | |
| timezone | string | IANA timezone for the invitation (e.g. 'America/New_York'). Default 'UTC'. |
listEventsQuery visitor events (the runtime instances of invitations — when visitors are actually checking in/out).
| Argument | Type | Description |
|---|---|---|
| startAt? | string | |
| endAt? | string | |
| maxItems? | number |
checkinCheck a visitor in to an event.
| Argument | Type | Description |
|---|---|---|
| eventId | string | |
| visitorId | string |
checkoutCheck a visitor out of an event.
| Argument | Type | Description |
|---|---|---|
| eventId | string | |
| visitorId | string |
Resources
visitor(infinite)— Visitor record in the Appspace Visitor Management system
visitorConfiguration(1d)— Visitor Management configuration for the account — required fields, custom field definitions, visit purposes, types, retention, and notification settings (the rules that drive Teams Passport / push / email routing)
invitation(infinite)— Visitor invitation — links visitors to hosts/resources and triggers Appspace's notification chain (Teams Passport bot, in-app push, Concierge, email)