Jobs: recurrence settings
Control repetition of per-occurrence overrides
/a/JobRecurrence_setLoopRecurrence
Choose whether configured occurrence templates cycle beyond their last numbered entry.
When to use this endpoint
Use with setSchedule for repeating form, stock, rates and type patterns, not for enabling the recurrence itself.
Authentication and permissions
Authenticate with signed API-key fields or a logged-in CRM session. Tenant context is required. The Job edit-restriction bit 128 applies, with the existing client-administrator exception.
IDs resolve inside the authenticated tenant. There is no additional department-visibility or recurrence-ownership filter.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | Integer string | Yes | Positive recurrence ID in canonical integer form; not a job ID. The record must exist. |
val | Integer string | Yes | Exactly 0 disables or 1 enables repeating numbered override templates. |
Example request
$result = FM_api('JobRecurrence_setLoopRecurrence', [
'id' => '1042',
'val' => '1',
]);
Example response
{"ok":1}
A post-save follow-up failure adds saved=1 and warning/warnings without undoing the settings. Read the warning and reload affected objects rather than blindly replaying the operation.
Errors and unusual responses
| Response | Condition |
|---|---|
{"error":"not logged in"} | No authenticated tenant context is available. Invalid signed credentials can be rejected by the dispatcher before the handler runs. |
{"error":"missing or invalid parameter: id"} | ID missing, invalid or not positive. |
{"error":"job recurrence 1042 does not exist"} | No matching recurrence; numeric ID varies. |
{"error":"No permission to edit"} | The Job edit restriction applies and the caller is not a client administrator. |
{"error":"Unable to save job delivery changes"} | The checked local transaction failed; settings/history are rolled back. |
{"error":"Invalid saved recurrence metadata"} | The saved metadata cannot be decoded as an array/object; it is not silently erased. |
{"error":"missing or invalid parameter: val"} | The value is missing when required, has an unsupported type, or fails the operation-specific range/shape/date rules. |
Legacy application errors may be returned with HTTP 200. Check the decoded response for error, not only the HTTP status.
Behaviour and edge cases
- Stores meta.loop_recurrence. Missing/0 uses recurrence-number indexing; 1 cycles form/stock/rate/type maps independently.
- The existing schedule must pass structural validation when looping is enabled. Empty maps are skipped safely; sparse maps can still leave some occurrences using defaults.
- Does not itself change frequency/active state, reset children or bump priority. Valid other metadata is preserved.
- The surrounding Job_save recurrence editor invokes this setter internally. Its wider generation-setting save separately requests reset-from-now and now propagates failures/saved warnings. Direct endpoint effects above do not describe the whole editor save.
Side effects
- The existing recurrence is locked and changed settings, edit timestamp/operation marker and history are committed together in a checked local transaction. Failed local persistence rolls back; an unchanged value normally returns ok without a new local write.
- Cleanup, child-target changes and global scheduler/reminder reconciliation run after the local save. A failed follow-up preserves committed settings and returns ok=1, saved=1, warning/warnings. Inspect current state and any partial progress before retrying; tenant and global effects are not distributed-atomic.
See it in Fieldmotion
CRM1
No direct production CRM1 caller to this focused endpoint was found. The recurrence configuration dialog instead saves settings with JobRecurrence_set or as part of Job_save.
CRM2
No direct production CRM2 caller to this focused endpoint was found. The job recurrence editor carries configuration through Job_save; the recurring-jobs module also uses JobRecurrence_set and mapped updates. The shared job recurrence editor also reaches this setter indirectly through Job_save; observe Job_save in the Network panel rather than expecting a separate request to this focused route.
Related endpoints
JobRecurrence_setSchedulestores the maps to cycle.JobRecurrence_setActiveenables or pauses the sequence itself.