DemandFlow Support Centre

Versioning and Timestamps

ReferenceEntity Reference16/04/2026Updated 16/04/2026
How DemandFlow tracks changes to objects, _df_version, created, updated, ownerId, updatedId, and what each tells you.

Versioning and Timestamps

Every DemandFlow object carries five fields that describe its change history. These are server-maintained and sufficient for most "when did this last change and who did it" questions without consulting an audit log.

The five fields

FieldSet whenValue
createdPOSTEpoch ms at creation. Never changes.
ownerIdPOSTThe user who created the object. Never changes.
updatedPOST and every PATCHEpoch ms of the most recent write.
updatedIdPOST and every PATCHThe user behind the most recent write.
_df_version0 on POST, +1 on every PATCHMonotonically incrementing integer.

Detecting changes

_df_version is the safest field to compare. Two reads of the same object that return the same _df_version are guaranteed to have identical content. Two reads with different versions definitely differ.

updated is fine for human display ("Last edited 5 minutes ago") but isn't safe to compare for change detection, two PATCHes within the same millisecond would share an updated value.

Optimistic concurrency

Read the object, note _df_version, send your PATCH. If another writer changed the object in between, your PATCH will still succeed (PATCH does not currently enforce a version condition) but the resulting _df_version will be your read value + 2 or more, signalling that an interleaved write happened. Decide your reconciliation policy based on that.

For workflows that need strict last-writer-wins protection, read the object after your PATCH and compare the returned _df_version to readVersion + 1.

What you cannot set yourself

The PATCH endpoint silently ignores attempts to change id, ownerId, or created. The server overwrites updated, updatedId, and _df_version with its own values regardless of what you send.

For full history

The five fields above tell you about the most recent change only. For a complete audit trail (every previous value, who changed each field, when), use the per-tenant audit log queryable via the LOG entity.

See also

versioningversiontimestampsupdatedcreatedownerhistoryaudit

Was this article helpful?

← Back to Knowledge Base