P4 Software / activoHQ English

Audit and life cycle

API: Audit and life cycle

This page assumes the X-Api-Key header and the ?companyId= parameter described in the REST API for developers overview.


Audit and life cycle (read-only)

These endpoints expose the data produced by physical inventory counts, asset transfers, check-out / check-in operations and reservations. They are all GET only, require X-Api-Key and ?companyId=, and return the standard paging envelope ({items, total, skip, take}) - except GET /api/v1/count-sessions/{id}, which returns the object directly.

GET /api/v1/count-sessions

A paged list of physical inventory Count sessions.

curl -s "https://acme.activohq.cloud/api/v1/count-sessions?companyId=3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "X-Api-Key: $ACTIVOHQ_API_KEY"

Response item fields:

{
  "id": "...",
  "code": "CNT-2025-001",
  "name": "Mid-year physical count",
  "openedDate": "2025-06-01",
  "status": "Reconciled",
  "expectedCount": 312,
  "reconciledDate": "2025-06-05",
  "notes": "Annual mid-year audit."
}

GET /api/v1/count-sessions/

A single count session - the same fields as above (without the paging envelope).


GET /api/v1/count-results

A paged list of count result lines. Use ?sessionId= to get one session's results.

Response item fields:

{
  "id": "...",
  "countSessionId": "...",
  "assetId": "...",
  "epc": "E28011700000020F4B1C0D5A",
  "status": "Found",
  "expectedLocationId": "...",
  "readLocationId": "...",
  "transferApplied": false
}

Possible status values: Found, Missing, Unexpected, Moved.


GET /api/v1/transfers

A paged list of asset Location transfers (including those generated automatically from a count). Filter with ?assetId=.

Response item fields:

{
  "id": "...",
  "assetId": "...",
  "fromLocationId": "...",
  "toLocationId": "...",
  "transferDate": "2025-06-05",
  "reason": "Moved during count reconciliation.",
  "sourceCountResultId": "..."
}

sourceCountResultId is null on manually created transfers.


GET /api/v1/checkouts

A paged list of asset check-out / check-in records. Filter with ?assetId=.

Response item fields:

{
  "id": "...",
  "assetId": "...",
  "employeeId": "...",
  "checkoutDate": "2025-06-10",
  "expectedReturnDate": "2025-06-17",
  "actualReturnDate": "2025-06-16",
  "notes": "Required for field visit.",
  "returnCondition": "Good",
  "damageNotes": null
}

actualReturnDate is null while the asset is still checked out. returnCondition values: Good, MinorWear, Damaged, Lost.


GET /api/v1/reservations

A paged list of Asset reservations. Filter with ?assetId=.

Response item fields:

{
  "id": "...",
  "assetId": "...",
  "employeeId": "...",
  "startDate": "2025-07-01",
  "endDate": "2025-07-05",
  "status": "Confirmed",
  "notes": "Reserved for training session."
}

status values: Pending, Confirmed, Cancelled.


Life-cycle actions

The following POST endpoints run asset life-cycle transitions and record the same journal entries the web application does. They all require X-Api-Key and ?companyId=. On success they return 200 {"status":"ok"}. Business rule violations return 400 with {"error":"...message..."}; "not found" returns 404.

POST /api/v1/Assets/

Check an asset out to an employee.

Field Type Required Notes
employeeId guid Yes The employee receiving the asset. Use GET /api/v1/Employees to list the ids.
expectedReturnDate date (ISO) No For example "2025-07-15".
notes string No Free-text notes for the check-out.

An example 400 business-rule error: {"error":"Asset is already checked out"}.

curl -s -X POST "https://acme.activohq.cloud/api/v1/Assets/f47edba8-67fe-42ce-8209-0e20e1abc17e/checkout?companyId=3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "X-Api-Key: $ACTIVOHQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "employeeId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "expectedReturnDate": "2025-07-15",
    "notes": "Required for field visit."
  }'

Response (200 OK):

{ "status": "ok" }

POST /api/v1/Assets/

Check a checked-out asset back in.

Field Type Required Notes
notes string No Return notes.
condition string No The return condition by enum name: Good, MinorWear, Damaged or Lost. Defaults to Good.
damageNotes string No A description of the damage (relevant when condition is Damaged or Lost).

POST /api/v1/Assets/

Reserve an asset for an employee over a date range.

Field Type Required Notes
employeeId guid Yes The employee the reservation is for.
startDate date (ISO) Yes The reservation's first day.
endDate date (ISO) Yes The reservation's last day.
notes string No Free-text notes.

An example 400 business-rule error: {"error":"Reservation conflicts with an existing reservation"}.


POST /api/v1/reservations/

Cancel an existing reservation. No request body is needed.


POST /api/v1/Assets/

Dispose of (retire or sell) an asset. It records the disposal's journal entry.

Field Type Required Notes
date date (ISO) Yes The disposal date.
proceeds decimal Yes The sale proceeds (use 0 for a write-off / retirement).
retirement boolean Yes true for a retirement / write-off; false for a sale.
notes string No Free-text notes.

An example 400 business-rule error: {"error":"Only active Assets can be disposed"}.


POST /api/v1/Assets/

Record an asset revaluation or impairment.

Field Type Required Notes
date date (ISO) Yes The effective date.
type string Yes Revaluation (an upward adjustment) or Impairment (a reduction in value).
amount decimal Yes The adjustment amount (always positive; type sets the direction).
notes string No Free-text notes.

Was this page helpful?