Overview
The Integrations section lets you connect UniAsset to external systems — IoT platforms, ERP systems, automation tools, and your Microsoft directory. It is split into five areas accessible from the sub-navigation:
| Section | Purpose |
|---|---|
| Overview | Summary of available integrations and all webhook events |
| API Keys | Create and revoke keys for external systems to call the UniAsset API |
| Webhooks | Subscribe external endpoints to real-time UniAsset events |
| Activity Log | Combined audit log of API calls and webhook deliveries |
| Developer Guide | Example requests and payload reference |
| Microsoft Entra ID | Directory sync for user provisioning (Enterprise only) |
Who Can Access This
| Page | Roles |
|---|---|
| Overview, API Keys, Webhooks, Developer Guide | Owner only |
| Activity Log | Owner, Admin, Manager |
| Microsoft Entra ID | Any authenticated user (gated by Enterprise plan) |
Admins and Members are redirected away from the API Keys, Webhooks, and Developer Guide pages.
Security note: API keys grant write access to your UniAsset data. Store them in secret managers, never in source code or client-side environments.
How to Access
- Log in to your UniAsset account
- Click Settings in the left sidebar
- Select Integrations
Plan Requirements
| Feature | Minimum plan |
|---|---|
| Viewing the Integrations section | Growth (API access flag) |
| Creating API keys and using the integration API | Enterprise |
| Configuring webhooks | Enterprise |
| Microsoft Entra ID directory sync | Enterprise |
| Viewing the Activity Log | Growth (Owner/Admin/Manager) |
The integration API middleware enforces the Enterprise plan at the authentication layer — requests using an API key on any lower plan receive a 403 ENTERPRISE_REQUIRED error even if the key was created.
API Keys
What API keys are for
API keys allow external systems to authenticate with the UniAsset integration API and perform write operations on your data — such as creating assets, logging maintenance, updating assignments, and reporting GPS positions.
Key format
All keys are prefixed ua_live_ followed by 64 random hex characters, for example:
ua_live_a1b2c3d4e5f6...
Keys are never stored in plain text. UniAsset stores only a bcrypt hash and a short lookup prefix (the first 12 characters). The full key is shown only once — at the moment of creation.
API key permissions
When creating a key, you select one or more permissions that scope what the key can do:
| Permission | What it allows |
|---|---|
asset:create | Create new assets via the integration API |
asset:update | Update existing asset records |
asset:location | Update an asset's geographic position |
assignment:update | Update asset user or department assignments |
maintenance:create | Create maintenance records for assets |
A key with no permissions assigned cannot perform any write operations.
How to create an API key
- Navigate to Settings > Integrations > API Keys
- Click Create API Key
- Enter a descriptive name (e.g. "ERP Connector – Production")
- Select the permissions this key needs
- Click Create
- Copy the full key immediately — it will not be shown again
API key registry
The API Keys page lists all keys for your organization with:
- Name — the label you gave the key
- Key prefix — the first 12 characters (e.g.
ua_live_a1b2…) used to identify the key without exposing it - Permissions — the scopes assigned
- Last used — timestamp of the most recent authenticated request, or "Never"
- Created — date and the user who created the key
Revoking an API key
To revoke a key, open its actions menu and select Revoke. Revoked keys are immediately rejected by the API — any system using that key must be updated with a new one. Revoked keys remain visible in the registry for audit purposes.
Using an API key
Pass the key as a Bearer token in the Authorization header of every request:
Authorization: Bearer ua_live_xxxxx...
The server derives your tenant identity from the key — never from a request body field.
Webhooks
What webhooks are for
Webhooks let UniAsset push real-time notifications to your own systems when events occur. Instead of your system polling for changes, UniAsset sends a signed HTTP POST to your endpoint the moment an event fires.
How webhook delivery works
- An event occurs in UniAsset (e.g. an asset is created)
- A delivery job is written to the queue for every active webhook that subscribes to that event
- A background processor sends a signed HTTP POST to each endpoint
- The delivery result (success or failure) is recorded in the Activity Log
Delivery is asynchronous — the original action completes immediately regardless of webhook delivery status.
Webhook payload format
Every delivery is a JSON POST with the following structure:
{
"event": "asset.created",
"timestamp": "2026-03-08T09:15:00.000Z",
"data": {
"assetId": "asset_123",
"assetName": "Forklift A-17",
"categoryName": "Vehicles",
"statusName": "ACTIVE"
}
}
Webhook request headers
Each POST includes these headers for verification:
| Header | Value |
|---|---|
Content-Type | application/json |
X-UniAsset-Event | The event name (e.g. asset.created) |
X-UniAsset-Timestamp | ISO 8601 timestamp |
X-UniAsset-Signature | HMAC-SHA256 hex signature of the request body |
Verifying webhook signatures
Compute HMAC-SHA256 over the raw request body using your webhook's secret as the key, and compare it to the X-UniAsset-Signature header. Reject requests where the signatures do not match.
UniAsset has a 10-second timeout per delivery attempt. Endpoints that do not respond within 10 seconds are treated as failed.
Available webhook events
| Event | Triggered when |
|---|---|
asset.created | A new asset is created |
asset.updated | An asset record is updated |
asset.assigned | An asset assignment changes |
geo_position.updated | Asset geo-position data is updated |
maintenance.created | A maintenance record is created |
maintenance.due_soon | Maintenance is approaching its due date |
maintenance.overdue | Maintenance passes its due date |
document.expiring | A linked document is near expiration |
document.expired | A linked document has expired |
document_asset.expiring | A document-type asset is near expiration |
document_asset.expired | A document-type asset has expired |
warranty.expiring | An asset warranty is near expiration |
incident.created | A new incident is recorded |
How to create a webhook
- Navigate to Settings > Integrations > Webhooks
- Click Create Webhook
- Enter a name (e.g. "ERP Event Sink")
- Enter the endpoint URL (must be HTTPS and publicly reachable)
- Select the events you want to subscribe to (one or more)
- Click Create — a signing secret is generated automatically
Webhook status indicators
Each webhook row shows a health badge:
| Badge | Meaning |
|---|---|
| Healthy | Active and the most recent delivery succeeded |
| Failing | Active but the most recent delivery failed |
| Paused | Manually paused; no deliveries are sent |
Managing webhooks
Each webhook has an actions menu with the following options:
- Send Test Event — immediately queues a
asset.createdtest delivery to verify your endpoint is reachable - Edit — update the name, URL, or event subscriptions
- View Logs — opens the Activity Log filtered to this webhook
- Pause / Resume — temporarily suspend or re-enable deliveries without deleting the webhook
- Delete — permanently removes the webhook and all queued deliveries for it
Activity Log
The Activity Log shows the last 100 API requests and the last 100 webhook delivery attempts, merged and sorted by most recent first.
Access: Owner, Admin, and Manager roles.
Log columns
| Column | Description |
|---|---|
| Timestamp | When the event occurred |
| Source | "API" for integration API calls, "Webhook" for outbound deliveries, "System" for system-initiated events |
| Event | The endpoint called or the webhook event name |
| Resource | The API key name or webhook name involved |
| Status | HTTP status code (API) or delivery status (delivered, pending, failed) |
| Details | Source IP (API) or error message / attempt count (webhook) |
Clicking any row expands the full payload and headers for debugging.
API log status categories
- 2xx — success
- 4xx / 5xx — failed
Webhook delivery statuses
| Status | Meaning |
|---|---|
delivered | POST succeeded (2xx response from your endpoint) |
pending | Queued, not yet attempted |
failed | All attempts exhausted or endpoint returned a non-2xx response |
Sensitive fields in logged request bodies (passwords, tokens, secrets, credit card data) are automatically redacted to [REDACTED] before storage.
Microsoft Entra ID Directory Sync
Microsoft Entra ID integration (formerly Azure AD) allows you to automatically provision and deprovision UniAsset users from your Microsoft directory. This is an Enterprise-only feature.
What it does
- Syncs users and security groups from your Microsoft tenant into UniAsset
- Automatically provisions new users when they are added to mapped groups
- Can deprovision users when they are removed from the directory (configurable)
- Maps Entra groups to UniAsset roles
Plan requirement
The Entra ID page is accessible to all authenticated users but shows a plan-gate overlay on all plans below Enterprise. The entraDirectorySync limit flag is only true on the Enterprise plan.
Setup overview
- Navigate to Settings > Integrations > Microsoft Entra ID
- Connect your Microsoft tenant using the OAuth flow (requires a Microsoft admin account with directory read permissions)
- Once connected, the page shows your verified domain and last sync timestamp
- Use the Group Mapper section to map your Entra security groups to UniAsset roles (Owner, Admin, Member, Viewer)
- Configure Auto Provision and Deprovision Sync options:
- Auto Provision — automatically creates UniAsset accounts for synced group members
- Deprovision Sync — removes UniAsset access when a user is removed from the group in Entra
Group mapping
Once connected, your Microsoft security groups are listed. Assign each group a UniAsset role. Users in that group who are provisioned will receive the mapped role.
Connection health
If the Microsoft Graph token becomes stale, the group list on the page will be empty rather than returning an error — the connection status is shown at the top of the page. Re-authenticate to refresh the token.
Developer Guide
The Developer Guide page (Owner only) provides copyable example requests for all integration API endpoints:
| Endpoint | Purpose |
|---|---|
POST /api/integrations/assets/create | Create a new asset |
POST /api/integrations/assets/maintenance | Log a maintenance record |
POST /api/integrations/assets/assignment | Update an asset assignment |
POST /api/integrations/assets/geo-position | Report a GPS position |
All requests use Authorization: Bearer ua_live_... and return JSON.
Important Notes & Limitations
API keys are shown only once
- Copy and store the full key immediately after creation. There is no way to retrieve it afterwards — revoke and create a new key if it is lost.
Enterprise plan is required to use API keys
- The API key management UI is accessible to Owners on any plan, but the integration API itself rejects requests from tenants on plans below Enterprise with a
403 ENTERPRISE_REQUIREDerror.
Webhook delivery is asynchronous
- Events are queued and sent by a background processor. Your endpoint will receive the POST within seconds of the event, but not synchronously within the same request cycle.
Webhook endpoints must return 2xx within 10 seconds
- Endpoints that time out or return non-2xx responses are recorded as failed deliveries. Check the Activity Log for error details.
Deleting a webhook also deletes all queued deliveries
- Pending deliveries for a deleted webhook are discarded. Pause instead of deleting if you need to temporarily stop deliveries.
Activity Log retains the last 100 entries per type
- The page shows the 100 most recent API calls and 100 most recent webhook deliveries. Older records are not shown in the UI (though they remain in the database).
Microsoft Entra ID requires an Enterprise plan
- Upgrading from Enterprise is not self-serve. Contact sales via Settings > Billing & Plans.
Frequently Asked Questions
I created an API key but my requests are getting 403 ENTERPRISE_REQUIRED — why?
The integration API requires an Enterprise plan regardless of which plan tier shows apiAccess: true in the feature list. API key creation is available on Growth and above, but actual API authentication enforces Enterprise. Contact sales to upgrade.
Can I have multiple API keys?
Yes. You can create as many keys as needed — for example, one per external system or environment. Each key has its own permission scope and can be revoked independently.
How do I rotate an API key?
Create a new key with the same permissions, update your external system to use the new key, then revoke the old key. There is no in-place rotation.
Can I subscribe a webhook to all events at once?
No. You must select events individually when creating or editing a webhook. Subscribe only to the events your endpoint needs to minimize unnecessary traffic.
My webhook shows "Failing" — what should I check?
Go to Activity Log and filter by the webhook. Check the status and error details column for the failed deliveries. Common causes are: endpoint unreachable, TLS certificate errors, response timeout (>10 seconds), or the endpoint returning a non-2xx status.
Can I test my webhook without waiting for a real event?
Yes. Click Send Test Event in the webhook's action menu. This queues an asset.created test delivery immediately, regardless of whether any assets have been created.
Who can see the Activity Log?
Owners, Admins, and Managers. Members and Viewers cannot access it.
Is Microsoft Entra ID the same as Azure Active Directory?
Yes — Microsoft renamed Azure AD to Microsoft Entra ID. The integration connects to the Microsoft Graph API and works with both the legacy Azure AD and the rebranded Entra ID.
Need Help?
If you have questions not covered in this article, our support team is here to help.
Contact Support