SuggestionProperties
Everything about a suggestion that is not a database column of its own, including the predicted entry codes.
Two naming conventions live side by side here, and telling them apart is the key to reading a suggestion:
- A plain name such as
id_projectis a chosen value. It is what the client supplied on the event, or what the person picked when they accepted the suggestion into an entry. - A
_predictname such asid_project_predictis what the Suggestion Engine guessed. It is read-only, and it is a ranked list rather than a single value.
A field absent from this object simply has no value; the engine writes only
what it has. Nothing inside properties can be used with $filter or
$orderBy — see the filtering notes on
List suggestions.
When the event starts, as an ISO 8601 string carrying the offset of the
zone it was supplied in. This is the authoritative start; the
start_timestamp column is the same instant as a UTC epoch value, for
sorting.
2026-09-14T09:00:00-05:00When the event ends, in the same form as start_datetime.
2026-09-14T10:30:00-05:00True for an all-day event, which has no meaningful clock time.
falseA source-specific kind, where the source distinguishes them. The
Exchange source uses Event and Task. Suggestions fed through this
API have no subtype unless the event supplies one.
Note that the engine re-derives this on every write, so a value you send may be replaced.
nullFor a recurring event, the start/end pairs that fall inside the entry
period, as [start_datetime, end_datetime]. The rest of the
suggestion describes the first occurrence.
The comment as chosen, once someone has accepted this suggestion and
edited its text. Until then the readable text lives in the top-level
comment column.
Sprint planning with the platform teamThe comment the engine proposes for the entry. Unlike the entry-code predictions this is a plain string, not a ranked list: it is derived from the event's own text rather than chosen from a set of candidates.
Sprint planning with the platform teamThe project this suggestion is for, when a value has been chosen — by the client on the way in, or by the person who accepted it.
8A2F4B3D5E6C7891A2B3C4D5E6F78901The engine's ranked guesses at the project, best first. Each element is
a two-item array of [id, confidence], where confidence runs from 0.0
to 1.0.
Every _predict field in this object has this shape, except
comment_predict.
[["8A2F4B3D5E6C7891A2B3C4D5E6F78901",1]]The chosen task code, if any.
Ranked [id, confidence] guesses at the task code.
[["Debugging",0.41]]The chosen pay type, if any.
Ranked [id, confidence] guesses at the pay type.
The chosen bill type, if any.
Ranked [id, confidence] guesses at the bill type.
The chosen group, if any.
Ranked [id, confidence] guesses at the group.
Hours to suggest for a time entry. When absent, the entry screen
derives the duration from start_datetime and end_datetime.
1.5How the prediction was reached. Useful for telling a confident match from a fallback:
| Code | Meaning |
|---|---|
| 10 | Matched a previously accepted event in the same recurring series. |
| 20 | Matched the subject or title of a previous event. |
| 30 | Matched the comment of a previous event. |
| 40 | Matched the source ID of a previous event. |
| 50 | Text similar to a previous event. |
| 60 | Text similar to an entry code's name or description. |
| 70 | No close match; the codes shown are frequent or default choices. |
| 75 | Matched entry-code wording, or the person's most-used codes. |
| 80 | Chosen by the trained model. |
| 90 | Chosen by a language model. |
New codes may be added. Treat an unrecognized value as "matched somehow" rather than failing.
60A short human-readable account of the match, suitable for showing next to the suggestion. Its wording is not stable across releases; do not parse it.
Tf-Idf: id_project=top id_code_task=0.410True when the suggestion was dismissed automatically by one of the user's auto-hide phrase rules rather than by hand.
falseThe auto-hide rule that dismissed it, when auto_hidden.
The time record created when this suggestion was accepted. Present only
on an actualized suggestion. There are id_expense_rec and
id_travel_rec equivalents for the other entry types.
Epoch timestamp of the last time the engine processed this suggestion
for time entry. expense_updated and custom_updated are the
equivalents for the other entry types.
1788893391.803951Everything about a suggestion that is not a database column of its own, including the predicted entry codes.
Two naming conventions live side by side here, and telling them apart is the key to reading a suggestion:
- A plain name such as
id_projectis a chosen value. It is what the client supplied on the event, or what the person picked when they accepted the suggestion into an entry. - A
_predictname such asid_project_predictis what the Suggestion Engine guessed. It is read-only, and it is a ranked list rather than a single value.
A field absent from this object simply has no value; the engine writes only
what it has. Nothing inside properties can be used with $filter or
$orderBy — see the filtering notes on
List suggestions.
{
"start_datetime": "2026-09-14T09:00:00-05:00",
"end_datetime": "2026-09-14T10:30:00-05:00",
"is_all_day": false,
"subtype": null,
"occurrences": [
"string"
],
"comment": "Sprint planning with the platform team",
"comment_predict": "Sprint planning with the platform team",
"id_project": "8A2F4B3D5E6C7891A2B3C4D5E6F78901",
"id_project_predict": [
[
"8A2F4B3D5E6C7891A2B3C4D5E6F78901",
1
]
],
"id_code_task": "string",
"id_code_task_predict": [
[
"Debugging",
0.41
]
],
"id_code_pay_type": "string",
"id_code_pay_type_predict": [
null
],
"id_code_bill_type": "string",
"id_code_bill_type_predict": [
null
],
"id_group": "string",
"id_group_predict": [
null
],
"time_amount": 1.5,
"match_code": 60,
"match_description": "Tf-Idf: id_project=top id_code_task=0.410",
"auto_hidden": false,
"auto_hide_rule": {},
"id_time_rec": "string",
"time_updated": 1788893391.803951
}