Fixed Assets

Fixed assets represent long-term tangible property (equipment, vehicles, furniture, etc.) that depreciates over time. This feature requires the Fixed Assets add-on.

Asset Lifecycle

Status Description
draft Recorded but not yet in service — no depreciation
active In service and depreciating
fully_depreciated Book value has reached salvage value
disposed Sold, traded, scrapped, lost or donated

Asset Categories

Organize assets by category with default depreciation settings and the ledgers each posting should hit:

bash
curl -X POST "https://api.ondayzero.com/api/v1/fixed-assets/categories" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Computer Equipment",
    "default_useful_life_months": 36,
    "default_depreciation_method": "straight_line",
    "default_salvage_percent": 10,
    "asset_ledger_id": "ASSET_LEDGER_UUID",
    "accumulated_depreciation_ledger_id": "ACCUM_DEPR_LEDGER_UUID",
    "depreciation_expense_ledger_id": "DEPR_EXPENSE_LEDGER_UUID"
  }'

Depreciation methods: straight_line, declining_balance, double_declining, units_of_production.

Seed standard categories (furniture, vehicles, equipment, etc.):

bash
curl -X POST "https://api.ondayzero.com/api/v1/fixed-assets/categories/seed-defaults" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID"

GET /api/v1/fixed-assets/categories lists them; PATCH / DELETE /api/v1/fixed-assets/categories/{category_id} edit or remove one.

Create a Fixed Asset

bash
curl -X POST "https://api.ondayzero.com/api/v1/fixed-assets" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "MacBook Pro M4",
    "category_id": "CATEGORY_UUID",
    "original_cost": 349900,
    "purchase_date": "2026-03-01",
    "useful_life_months": 36,
    "salvage_value": 30000,
    "depreciation_method": "straight_line",
    "serial_number": "C02XYZ123",
    "vendor_id": "VENDOR_UUID"
  }'

original_cost and salvage_value are in cents. 349900 = $3,499.00.

Required: name, original_cost, purchase_date. useful_life_months defaults to 60, salvage_value to 0, depreciation_method to straight_line. Pass in_service_date to place the asset in service immediately; otherwise it is created as a draft. For units_of_production, also set total_expected_units.

Capitalize from bank transactions

If the purchase already sits in a bank feed, turn those transactions into an asset instead of re-typing the cost:

bash
curl -X POST "https://api.ondayzero.com/api/v1/fixed-assets/from-transactions" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Delivery van",
    "ledger_id": "VEHICLES_LEDGER_UUID",
    "transaction_ids": ["TRANSACTION_UUID"],
    "useful_life_months": 84,
    "auto_place_in_service": true
  }'

The cost basis is the sum of the transactions' absolute amounts; all of them must already be categorized to ledger_id. POST /api/v1/fixed-assets/suggest-capitalization asks the AI which recent transactions look like capital purchases.

List Fixed Assets

bash
curl "https://api.ondayzero.com/api/v1/fixed-assets?status=active" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID"
Parameter Type Description
status string draft, active, fully_depreciated, disposed
category_id UUID Filter by asset category
search string Match on name, asset number or serial number
cursor / limit Standard pagination

Each asset in the response includes computed book_value, accumulated_depreciation, depreciable_amount, monthly_depreciation_amount and remaining_life_months.

Place in Service

Start depreciation on a draft asset:

bash
curl -X POST "https://api.ondayzero.com/api/v1/fixed-assets/{asset_id}/place-in-service" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{"in_service_date": "2026-03-15"}'

Depreciation

View Schedule

bash
curl "https://api.ondayzero.com/api/v1/fixed-assets/{asset_id}/depreciation-schedule" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID"

GET /api/v1/fixed-assets/{asset_id}/depreciation-entries returns the entries actually recorded so far, and GET /api/v1/fixed-assets/depreciation-matrix?start_date=…&end_date=… gives a month-by-asset grid across the whole register.

Preview Period Depreciation

See what depreciation entries would be generated for a specific period:

bash
curl "https://api.ondayzero.com/api/v1/fixed-assets/depreciation-preview?period_date=2026-03-31" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID"

Run Depreciation

Post depreciation for a period — all active assets, or only asset_ids:

bash
curl -X POST "https://api.ondayzero.com/api/v1/fixed-assets/run-depreciation" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{"period_date": "2026-03-31", "create_journal_entries": true}'

Scheduled depreciation

DayZero can also queue every future depreciation entry up front and post each one when its date arrives:

  • POST /api/v1/fixed-assets/generate-schedules queues draft entries for active assets that have none (a backfill; creates no journal entries).
  • GET /api/v1/fixed-assets/scheduled-journal-entries?through_date=… shows what is queued.
  • POST /api/v1/fixed-assets/post-scheduled-depreciation with an optional {"as_of": "2026-03-31"} posts everything due. It is idempotent — a retry cannot double-post.

Dispose an Asset

Record the disposal (sale, write-off, etc.) of an asset:

bash
curl -X POST "https://api.ondayzero.com/api/v1/fixed-assets/{asset_id}/dispose" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "disposal_date": "2026-06-15",
    "disposal_method": "sold",
    "disposal_amount": 100000,
    "disposal_notes": "Sold to employee"
  }'

disposal_method is one of sold, traded, scrapped, lost, donated; disposal_amount (proceeds, in cents) defaults to 0. Disposal automatically calculates the gain or loss against book value and creates the corresponding journal entries. Disposal is irreversible — confirm the asset and amount first.

Update or Delete

PATCH /api/v1/fixed-assets/{asset_id} edits descriptive fields (name, description, asset_number, serial_number, location, notes, category_id, vendor_id) and, while the asset is still a draft, its depreciation settings — cost, useful life and method are locked once the asset is in service.

DELETE /api/v1/fixed-assets/{asset_id} removes an asset that has no posted depreciation. Add ?force=true to also remove its depreciation entries and every journal entry posted for it (capitalization, depreciation, disposal) — for assets that were set up by mistake.