Overview
The Mobaro Public API lets a script create, update, move and delete Assets. Use it for a one-time bulk import when you set up Mobaro, or to keep your Assets in step with a CMMS or asset register.
This article covers the Asset endpoints, the fields you can set, the order to import in, and the traps to avoid. For keys, headers and paging, see Getting started with the Mobaro API.
At a glance |
|
Who can do this | Your integration, with an API key that isn't Read-only. Keys are created by users with Organization › Administrate. |
Where | Public API, |
Works on | Public API |
Availability | Enabled per organization by Mobaro — ask your CSM |
💡 Why this matters: Creating hundreds of Assets by hand is slow and error-prone. A re-runnable script gets you to a working Asset library quickly and keeps it matched to your source system.
ℹ️ Note: The Asset endpoints are labelled (BETA) in the Mobaro API documentation: they may change. Check the documentation for the current request and response schemas.
The Asset endpoints
Operation | Endpoint | Notes |
List |
| Filter by |
Get one |
|
|
History |
| The Asset's activity history. |
Create |
| One Asset per request. Returns the new ID. |
Update |
| Changes fields only, not the Location or parent. |
Move |
| New parent: a Location or an Asset. |
Delete |
| Also deletes every descendant. |
Property lists |
| IDs of Manufacturers, their Models, and Categories. |
There's no endpoint that takes several Assets at once: send one request per Asset.
Fields you can set
name: required on create.location: required on create. The Mobaro ID of an existing Location, for examplelocations/123456-A.parent: optional. The Mobaro ID of an Asset at the same Location. Leave it out for a top-level Asset.description,externalId,code,serial: free text.manufacturer,model,category: IDs from the property-definition endpoint. Mobaro maintains these lists.
PUT accepts the same fields except location and parent. Short name and Custom Scanner Code can only be set in the Backend. For what each field means, see Understanding Asset fields and properties. For ID formats, see Understanding IDs in Mobaro.
Import Assets in the right order
1. Prepare your source data
Use one row per Asset, with its Name, Location, parent, External ID and any other fields. Put the identifier from your source system in External ID: it's what lets you find the Asset again.
2. Look up the IDs you need
Get your Location IDs with GET /api/customers/locations, and Manufacturer, Model and Category IDs from the property-definition endpoint. Create any missing Locations first.
3. Create parents before children
Sort your rows by depth in the hierarchy and create top-down. Keep a map of External ID to the Mobaro ID each create returns, and use it to fill in parent for the next level.
🛑 Critical: A child can only be created once its parent exists, at the same Location. If you create children first, or point at a parent at another Location, those Assets aren't created and your hierarchy is incomplete.
4. Check the result
List the Assets for each Location and compare them with your source. Spot-check the children and descendants of key parents. See Asset hierarchies and parent/child relationships.
Example: create a child Asset
curl "https://app.mobaro.com/api/customers/assets" \
--request POST \
--header "Content-Type: application/json" \
--header "X-Api-Key: YOUR_API_KEY" \
--data '{
"name": "MCC1",
"description": "Maintenance Control Panel 1",
"externalId": "MCC1-GC-001",
"location": "locations/123456-A",
"parent": "assets/234567-B"
}'
The response contains the new Asset's ID.
Move or delete Assets
To give an Asset a new parent, or move it to another Location, send POST /api/customers/assets/move with Asset (the Asset's ID) and Parent (a Location ID for a top-level position, or an Asset ID):
curl "https://app.mobaro.com/api/customers/assets/move?Asset=assets/345678-C&Parent=assets/234567-B" \
--request POST \
--header "X-Api-Key: YOUR_API_KEY"
A move works like Move in the Backend: the Asset's whole branch moves with it, you can't move an Asset under itself or its descendants, and RideOps Assets can't be moved. Moving to another Location also moves the Assets' Assignments there. See Linking Assets to Locations.
🛑 Critical: DELETE removes the Asset and all of its descendants, and takes them off every Schedule that targets them. It can't be undone. A sync script that deletes a parent row deletes the whole branch.
Common traps
Duplicates: Mobaro doesn't check Names or External IDs for uniqueness, so re-running a create-only script duplicates Assets. Look each row up first with
GET /api/customers/assets/{externalId}: a 404 means create, a match means update.Rate limits: each key can make up to 10 requests per second. Above that you get 429 Too Many Requests; wait and retry. See Handling errors, rate limits, and retry logic.
Read-only keys: creates, updates, moves and deletes return 403 Forbidden.
Wrong endpoint for moves:
PUTignoresparentandlocation. Use the move endpoint.
Best practices
Make the script re-runnable: look each row up by External ID, then create or update.
Test with ten or twenty rows that include your deepest hierarchy and trickiest names before running everything.
Add a dry-run mode that logs what would be created, and review it for missing parents and wrong Locations.
Run your first full import on one Location, and send requests one after another rather than in parallel, so children never race ahead of parents.
Keep your source data and scripts in version control, and log every delete.
Frequently asked questions
I need to create 60 child assets (seats 1–60). Is there a quicker way than one by one?
Yes, with the Public API. A short script can send one POST /api/customers/assets per seat, each with the same parent and location. The Backend's asset tree creates Assets one at a time.
How do I move assets under another asset with the API? PUT ignores the parent.
Use POST /api/customers/assets/move with Asset and the new Parent (a Location ID or an Asset ID). PUT only changes an Asset's fields, never its Location or parent. The Asset's children move with it.
Is there a CSV or Excel import for assets?
No, not in the Backend. Read your file in a script and send one create request per row, parents first. For low-code flows, the Power Automate connector has the same Asset actions; see Getting started with Mobaro's Power Automate connector.
Can I set the short name or scanner code through the API?
No. The API can set Name, Description, External ID, Code, Serial, Manufacturer, Model, Category, Location and parent. Set Short name and Custom Scanner Code in the Backend; see Understanding Asset fields and properties.
Which permission does the API need to create assets?
None beyond the key. An API key acts with Super User access to your organization, so any key that isn't Read-only can create, edit, move and delete Assets at every Location. A Read-only key gets 403 Forbidden.
