Skip to main content
The developer API lets an API key create, read, update and delete data in World Asset Register, within the scopes chosen when the key was created and the permissions of the member who created it. This page lists the endpoints an API key can reach, grouped by resource, plus the parts of the app that stay sign-in only. See Developer tools for how to create a key.

Authentication

Send your key on every request as a header:
A key’s access is set in two steps. First, the scopes chosen when the key was created (below) determine which permissions it could hold at most. Second, that set is narrowed to whatever the creating member’s own role actually grants - a key can never reach more than its creator could. There is no separate read-only API mode: a scope that maps to a write permission (for example assets:write) lets the key write by API exactly as a member with that permission can in the app, provided the creator’s role grants it too. See Roles and permissions for how member permissions work, and Developer tools for the scope picker.

Scopes

Each key is created with one or more scopes, chosen when the key is made. Each scope maps to one or more of the permissions used elsewhere in the app - use this table to work back from an endpoint’s Permission column to the scope that grants it: No scope grants asset_schema.manage (asset category writes) or members.invite (inviting, updating or importing members) on its own - only the admin scope does. The tables below mark every route that is reachable only with admin.

Base URL and errors

Every endpoint below is prefixed with /api. Errors share one shape:
For a body that fails validation, message is a list with one entry per problem. Other errors, such as a duplicate value in a unique field, return message as a single string. 401 means the key is missing, invalid, expired or revoked. 403 means the key’s role does not carry the permission the endpoint requires. 429 means the request was rate limited.

Assets

Asset request bodies

The asset endpoints accept only a short list of top-level fields, and they refuse any other field with a 400 (for example property serialNumber should not exist). Everything else about an asset, such as its serial number, location, lifecycle stage or any custom field, goes inside a customFieldValues object. The keys inside customFieldValues are the field keys from your category tree. Read GET /asset-categories to see the fields each category has. Built-in keys include serialNumber, locationId, ownerId, departmentId and lifecycleStage. Relation fields take the id of the record they point to, for example the id of a location for locationId. A select field such as lifecycleStage takes one of its listed options. For a new organisation these are Deployment, In Use, In Repair, Decommission and Disposed. A key the category does not have is dropped without an error, so check the spelling against GET /asset-categories. A field marked required on the category must be sent on create. Create an asset
A successful create returns 201 and the full asset record, including its generated id. Serial number is a unique field, so a second asset with the same serial number is refused with a 400. Update an asset
Send only what you want to change. Keys you leave out of customFieldValues keep their current values. Use the same top-level fields as a create. Create several identical assets
This sends one asset description plus bulkQuantity (from 2 to 500), and creates that many copies, named Conference room chair #1, #2 and so on. It does not take a list of different assets. A field that must be unique, such as serialNumber, cannot be set this way. The response reports created, ids and createdIds. You can also send an optional ids array of UUIDs, with exactly bulkQuantity entries and no repeats, to choose the new assets’ ids. An id that already exists is skipped, so repeating a request that partly failed creates only the missing copies. Update several assets at once
The patch object applies the same change to every asset in ids. It accepts name, category or categoryId, vendorContractIds and customFieldValues.

Asset categories

No non-admin scope grants asset_schema.manage - creating, editing or deleting a category by API requires a key scoped admin.

Locations

Locations follow a four-tier hierarchy (site, facility, level, space). See Locations and mapping for the full model.

Departments

Members

No non-admin scope grants members.invite - every members write above requires a key scoped admin, even though members:read alone is enough to list members.

Map and geo

AI assistant

A key with the ai:use scope drives the same assistant the in-app chat uses, bound by that key’s own permissions and field access - so an ai:use-only key can converse but cannot act on anything unless the key also carries the resource scopes (assets:write, and so on) for what you want it to do. See AI assistant.

Policies and violations

Violations are not resolved or acknowledged by API. They clear on their own when the underlying data is fixed and the policy is re-evaluated. See Policies.

Audit log

No non-admin scope grants audit.rollback, so rolling back by API requires a key scoped admin.

Integrations

The organisation id in the path must be the organisation the key belongs to, otherwise the request is refused with 403. Reading an integration never returns its credentials. Tokens, passwords, API keys and client secrets come back as ••••••••, while connection details such as the base URL and username are shown as saved. When you update an integration, a credential you leave out or send back as •••••••• keeps the saved value, a new value replaces it, and null clears it.

Asset import

The CSV import endpoints under /imports (for example /imports/csv/analyze and /imports/csv/execute) require assets.import, granted by the assets:import scope. See Importing data for what the import does.

Data export (OData)

A read-only OData v4 feed for BI tools, gated by assets.export (scope odata:read - the same scope that covers the CSV/JSON export endpoints above). See Developer tools for the Power BI/Excel connection walkthrough. There is no write path on this feed. The feed is on by default for every organisation; turning it off in Integrations → Power BI answers every query with 409 Conflict rather than 401/403, so a BI client doesn’t misread a disabled feed as bad credentials.

Webhooks

A key can configure webhooks as well as receive them. The path carries an organisation id, but the key’s own organisation is always used. The webhooks:manage scope grants only integrations.manage, not integrations.view. A key that should also list webhooks or read their delivery history needs integrations:read as well. Once a webhook is registered, every delivery is signed:
Compute the same HMAC-SHA256 over the raw request body using your webhook’s secret, and compare it to the header to confirm a delivery genuinely came from World Asset Register. Event types include asset.created, asset.updated and asset.deleted. The secret is returned once, in the response to the request that registers the webhook. Reading a webhook later, or listing webhooks, does not return it, and it cannot be retrieved or rotated afterwards. If you lose it, delete the webhook and register it again.

Not available by API key

These stay sign-in only, whatever permissions the key’s role carries:
  • The data export (OData) on/off toggle for the organisation
  • Reports and report templates
  • Roles
  • Billing
  • GDPR export and erasure