Guide

Asset programs and their rules

What each setting of your asset program decides, and where to read them.

Your asset program's settings decide which records Fence accepts and how it treats your assets. Fence sets them with you when you start, and changes them as your data shows what it needs. You can read them at any time, and so can your systems.

Read your program's settings

Sign in to these docs and open My programs to see, for each program, the fields each record must carry, the rules Fence applies and an example batch it accepts.

Your systems read the same thing from the API:

curl -s "$FENCE_API/v1/api/asset-programs/$PROGRAM_ID" -H "Authorization: Bearer $TOKEN"

Each setting comes twice: as stored (asset_state) and in force (asset_state_in_force), the second with Fence's defaults filled in. Read the one in force. Add ?at=2026-10-21T13:00:00Z to see the settings as they were at that moment.

What each setting decides

Setting

What it decides

time_zone

Your program's calendar: which day a due date, a payment or a change of state falls on. Example: Europe/Madrid.

allowed_currencies

The currencies an asset may be in. An asset in another one is refused currency_not_allowed.

asset_schema

The fields of an asset's details, and each field's rules (below).

group_schemas

The kinds of asset group your program takes (an employer, a school), each with the same field rules over the group's details. A kind with no schema refuses its records.

payment_plans

Whether Fence takes payment plans, in which modes (built, custom), the defaults for terms a plan leaves out, the rounding, and how many re-ages it accepts. With no setting, every plan is refused.

asset_state

When an asset counts as late and in default. See Asset state.

allocation

What Fence does with a collection that names no instalment (it holds it), and a payment tolerance per currency. See Payments and allocation.

A field's rules

Each field of asset_schema and of a group schema may have:

  • checks: required (a value, not blank), one_of (one of a list of values), date (a YYYY-MM-DD day), after (later than another field) and pairs (allowed pairs of this field's value and another's). A record that fails a check is refused check_failed, naming the field and the kind of check.
  • cleaning, applied in order as the value is read: trim removes the spaces around it, upper turns it to capitals, blank_is_absent reads blank text as no value.
  • source: the name you send the field under, when Fence keeps it under another.
  • default or default_from: the value the field takes when you leave it out, fixed or taken from another field.
  • locked: once Fence holds a value, a record that changes it is refused field_cannot_change.

A field with no rules is kept as you send it.

When settings change

A record is always decided by the settings in force when its batch was received. A change of rules never re-judges records Fence already decided. Every version is kept, with who changed it and when.