Skip to main content

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_project is 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 _predict name such as id_project_predict is 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_datetimestring

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.

Example: 2026-09-14T09:00:00-05:00
end_datetimestring

When the event ends, in the same form as start_datetime.

Example: 2026-09-14T10:30:00-05:00
is_all_dayboolean

True for an all-day event, which has no meaningful clock time.

Example: false
subtypestringnullable

A 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.

Example: null
occurrencesarray[]

For 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.

commentstring

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.

Example: Sprint planning with the platform team
comment_predictstring

The 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.

Example: Sprint planning with the platform team
id_projectstring

The 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.

Example: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
id_project_predictarray[]

The 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.

Example: [["8A2F4B3D5E6C7891A2B3C4D5E6F78901",1]]
id_code_taskstring

The chosen task code, if any.

id_code_task_predictarray[]

Ranked [id, confidence] guesses at the task code.

Example: [["Debugging",0.41]]
id_code_pay_typestring

The chosen pay type, if any.

id_code_pay_type_predictarray[]

Ranked [id, confidence] guesses at the pay type.

id_code_bill_typestring

The chosen bill type, if any.

id_code_bill_type_predictarray[]

Ranked [id, confidence] guesses at the bill type.

id_groupstring

The chosen group, if any.

id_group_predictarray[]

Ranked [id, confidence] guesses at the group.

time_amountnumber

Hours to suggest for a time entry. When absent, the entry screen derives the duration from start_datetime and end_datetime.

Example: 1.5
match_codeinteger

How the prediction was reached. Useful for telling a confident match from a fallback:

CodeMeaning
10Matched a previously accepted event in the same recurring series.
20Matched the subject or title of a previous event.
30Matched the comment of a previous event.
40Matched the source ID of a previous event.
50Text similar to a previous event.
60Text similar to an entry code's name or description.
70No close match; the codes shown are frequent or default choices.
75Matched entry-code wording, or the person's most-used codes.
80Chosen by the trained model.
90Chosen by a language model.

New codes may be added. Treat an unrecognized value as "matched somehow" rather than failing.

Example: 60
match_descriptionstring

A 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.

Example: Tf-Idf: id_project=top id_code_task=0.410
auto_hiddenboolean

True when the suggestion was dismissed automatically by one of the user's auto-hide phrase rules rather than by hand.

Example: false
auto_hide_ruleobjectnullable

The auto-hide rule that dismissed it, when auto_hidden.

id_time_recstring

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.

time_updatednumber

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.

Example: 1788893391.803951
property name*any

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_project is 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 _predict name such as id_project_predict is 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.

SuggestionProperties
{
"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
}