to navigate · to open See all results
POST /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 / Bash
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.

JSON
{
  "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.