Phase fields are configured per phase: each phase has its own set of fields, ordering ( index), and section grouping. The same field name can exist on different phases with no relationship between the instances.
| Method | Path | Description |
|---|---|---|
GET | /v1/flows/{id}/phases/{phaseId}/fields | Lists the fields configured on the phase |
PUT | /v1/flows/{id}/phases/{phaseId}/fields | Fully replaces the phase's fields |
PUT | /v1/flows/{id}/phases/{phaseId}/fields/rules | Configures conditional rules between fields |
Naming note: in this domain, the flow path parameter is literally {id}— unlike other AgFlow API domains, which use{flowId}.
| Type | Description |
|---|---|
shortText | Single-line text |
longText | Free multi-line text |
select | Single-choice option list — options as an array of strings |
radio | Single-choice radio buttons — options as an array of strings |
checkList | Multiple choice — options as an array of strings |
attachment | File upload |
document | Document upload |
date | Date |
number | Numeric |
currency | Monetary value |
email | |
phone | Phone number |
year | Year |
percentage | Percentage |
cropYear | Crop year |
float | Numeric with decimal places |
hour | Time of day |
currencyWithSelect | Monetary value with a unit/currency selector |
cep | Postal code |
The moneyvalue, accepted in other AgFlow API domains (technical opinion, messaging), is not accepted on phase fields — usecurrencyfor monetary values instead.
PUT .../fields) is a full replace: the array you send replaces the entire configuration of the phase. To keep an existing field, include its id; to remove it, simply omit it.id of an existing field does not delete it — the API marks it active:false and index:null, preserving the history of values already filled in on cards.description field is generated automatically by the API; the guidance text shown to the user should be sent in help.options is always an array of plain strings — never an array of {label, value} objects.uiComponent and rules fields are not accepted in the field-update payload: uiComponent is automatically derived from type, and conditional rules are configured separately, via PUT .../fields/rules.PUT .../fields/rules) can only reference fields that already exist — configure the fields first, then the rules, always in separate calls.onChange rules react to value changes (showing, hiding, requiring/making optional, clearing, or setting the value of another field). onCalculate rules automatically compute a field's value from an expression involving other fields.select, radio, and checkList fields, the value is always stored as an array — use the in operator (with an array value) in rule conditions, rather than = with a plain string.sectionMetadata on every field, even when the phase has a single section, to keep the display consistent across the interface.