/api/v1/assets
Create an asset
Create a new asset in your organization.
Last updated
Request
POST /api/v1/assets
Requires assets:create. See token permissions. Every listed permission is required for this endpoint.
Send Authorization: Bearer YOUR_API_TOKEN and Accept: application/json. Send request bodies as JSON with Content-Type: application/json.
Request body
| Field | Type | Usage |
|---|---|---|
category_id |
integer | Required on creation. Asset category ID from options. |
model |
string | Required on creation. Up to 255 characters; cannot be empty when supplied. |
asset_tag |
string or null | Optional. Up to 255 characters; unique within the organization. |
manufacturer |
string or null | Optional. Up to 255 characters. |
model_number |
string or null | Optional. Up to 255 characters. |
serial_number |
string or null | Optional. Up to 255 characters. |
manufacture_date |
string or null | Optional. YYYY-MM-DD. |
parent_id |
integer or null | Optional. Parent asset in this organization; null removes the component relationship. Cycles are rejected. |
parent_cost_rollup |
boolean | Optional. Including component costs requires a parent asset. |
custom_fields |
object | Optional unless the category has required fields. Key values by field ID. Use the category options to discover fields. Changing category requires its required fields. |
custom_field_times |
object | Optional. Key HH:mm times by date-field ID; also supply the matching custom_fields date. |
Fetch available values before choosing IDs. IDs and required fields vary by organization.
Example
Set ASSETCENTER_API_TOKEN as described in the quick start. Replace example record and option IDs with values from your organization.
curl --request POST "https://my.assetcenter.app/api/v1/assets" \
--header "Authorization: Bearer $ASSETCENTER_API_TOKEN" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data '{"category_id":7,"model":"Field laptop","asset_tag":"LAP-042"}'
Response
201 Created. Example response; IDs, values, and timestamps will differ in your organization.
{
"data": {
"id": 123,
"asset_tag": "LAP-042",
"manufacturer": null,
"model": "Field laptop",
"model_number": null,
"serial_number": null,
"manufacture_date": null,
"parent_id": null,
"parent_cost_rollup": false,
"status": "available",
"category_id": 7,
"person_id": null,
"location_id": null,
"sublocation_id": null,
"is_in_storage": false,
"person_loan_due": null,
"location_loan_due": null,
"condition_id": null,
"decommission_event_type_id": null,
"created_at": "2026-09-07T16:00:00.000000Z",
"updated_at": "2026-09-07T16:00:00.000000Z"
}
}
Behavior and constraints
Required: category_id and model, plus required category fields. Creation respects plan limits. Use only the fields listed here; assignments, status, IDs, timestamps, and file uploads are not writable through this endpoint. Each successful POST creates a new record. Inventory creation has no idempotency replay protection. Assets begin available; use the assignment and lifecycle endpoints to record custody and acquisition.
Errors
401 means the token is missing, expired, revoked, or not a customer API token. 403 means a required permission or administrator access is missing. 422 identifies invalid or unsupported input; inspect the errors object when present. 409 indicates a conflicting state or concurrent change; inspect the message and refresh the record before deciding how to proceed. 429 means a rate limit was reached. See error handling and rate limits.