reco Recommendation
A size answer was shown to the shopper: the status, the sizes and the answers' summary, never a body measurement.
When to send it
Shopper app, after each size answer shown (T07.09.10).
- Sent only after the shopper gave analytics consent; dropped, never queued, before it.
- Kept 25 months.
- Needs a non-null tracking_id: without one the event is rejected.
Required fields
| Field | Type | Rules | Description |
|---|---|---|---|
client_id |
integer |
greater than 0 | |
event |
"reco" |
||
tracking_id |
string |
a UUID | |
timestamp_ms |
integer |
||
product_id |
string |
1–255 characters | |
available |
boolean | null |
Optional fields
| Field | Type | Rules | Description |
|---|---|---|---|
event_id |
string |
1–255 characters | |
schema_version |
1 |
||
user_agent |
string |
at most 2048 characters | |
shop_country |
string | null |
at most 8 characters; may be null | |
channel |
string | null |
at most 64 characters; may be null | |
instance_id |
string |
1–255 characters | |
brand_id |
integer | null |
greater than 0; may be null | |
product_associated |
boolean |
||
ab_data |
object |
||
testEvent |
true |
||
extra |
object |
||
reco_id |
string |
1–255 characters | |
status |
"recommended" | "between_sizes" | "needs_measurements" | "no_match" |
||
recommended_size |
string | null |
1–64 characters; may be null | |
closest_size |
string | null |
1–64 characters; may be null | |
alternatives |
array of string |
at most 20 items | |
direction_hint |
"size_up_for_relaxed" | "size_down_for_slim" | null |
may be null | |
primary_size_system |
string |
1–16 characters | |
chart_id |
string |
1–255 characters | |
chart_revision |
string |
1–64 characters | |
mode |
"classic" | "social_proof" | "usual_size" | "shoes" | "head" |
||
input_source |
"questions" | "measurements" | "mixed" | "usual_size" | "profile" |
||
predicted_dimensions |
array of "height" | "chest" | "underbust" | "waist" | "pelvisGirth" | "hipsMax" | "upperArm" | "wrist" | "thigh" | "calf" | "neck" | "upperArmLength" | "forearmLength" | "upperLegLength" | "lowerLegLength" | "inseam" | "shoulderWidth" | "backLength" | "torsoHeight" | "sleeveLength" | "footLength" | "headCircumference" |
at most 40 items | |
entered_dimensions |
array of "height" | "chest" | "underbust" | "waist" | "pelvisGirth" | "hipsMax" | "upperArm" | "wrist" | "thigh" | "calf" | "neck" | "upperArmLength" | "forearmLength" | "upperLegLength" | "lowerLegLength" | "inseam" | "shoulderWidth" | "backLength" | "torsoHeight" | "sleeveLength" | "footLength" | "headCircumference" |
at most 40 items | |
engine_version |
string |
1–64 characters | |
predictor_version |
string |
1–64 characters | |
body_model_version |
string |
1–64 characters | |
product_body_part |
string |
1–16 characters | |
comforts |
object |
||
size_conversions |
object |
||
physical_infos |
object |
||
references |
array of object |
at most 10 items | |
references[].brand_id |
integer | string |
greater than 0; 1–64 characters | |
references[].brand_type_id |
integer | string |
greater than 0; 1–64 characters | |
references[].size_name |
string |
1–64 characters | |
references[].size_system |
string | null |
1–16 characters; may be null | |
found |
boolean |
||
size |
string | null |
1–64 characters; may be null | |
size_system |
string | null |
1–16 characters; may be null | |
sizing_chart_id |
integer | string | null |
greater than 0; 1–255 characters; may be null | |
model |
string | null |
1–64 characters; may be null |
Example
Test values only. This example passes the event's schema.
{
"event": "reco",
"client_id": 1000,
"tracking_id": "3f0b8c2e-4d5a-4b6c-8d7e-9f0a1b2c3d4e",
"timestamp_ms": 1792000000000,
"product_id": "TEST-JACKET-01",
"reco_id": "reco_01JTESTEXAMPLE000000000000",
"status": "recommended",
"recommended_size": "M",
"closest_size": "M",
"alternatives": [
"L"
],
"direction_hint": null,
"available": true,
"primary_size_system": "EU",
"chart_id": "8030",
"chart_revision": "3",
"mode": "classic",
"input_source": "questions",
"predicted_dimensions": [
"chest",
"waist",
"hipsMax"
],
"entered_dimensions": [],
"engine_version": "chart-fit-3.0",
"predictor_version": "anny-predictor-1.2.0",
"comforts": {
"chest": "ADJUSTED",
"waist": "LOOSE"
},
"size_conversions": {
"M": {
"FR": {
"size_name": "38"
}
}
},
"physical_infos": {
"gender": "female",
"age": 34,
"height": 168,
"weight": 62,
"body_shape": "X",
"bra": {
"band": 75,
"cup": "B",
"region": "EU"
}
},
"references": [
{
"brand_id": 12,
"brand_type_id": 340,
"size_name": "M",
"size_system": "EU"
}
],
"found": true,
"size": "M",
"size_system": "EU",
"sizing_chart_id": 8030,
"model": null
}
Checks and messages
What Tracking debug in your back office checks for this event, with its exact message. An error means the event is not counted; a warning means it is counted but something is likely wrong; an info is a hint.
| Level | Check | Message |
|---|---|---|
| error | invalid_field |
what is wrong with the field |
| error | over_limit |
the field is over the limit of <limit> |
| error | product_id_missing |
missing product_id |
| error | tracking_id_missing |
missing tracking_id: the event is rejected. Send the visitor id (fmt_device_id) with every event. |
| warning | product_unknown |
product not found in your catalogue or has no size chart |
| warning | size_not_in_product |
size "<value>" is not one of the product's sizes |
| warning | timestamp_missing |
timestamp_ms is missing or not a time in milliseconds: the time the event was received is used |
| warning | timestamp_out_of_range |
timestamp_ms is more than 30 days old or more than 3 days ahead: the time the event was received is used |
| info | size_lower_case |
size "<value>" was sent in lower case. Use uppercase letters or numbers. |
JSON schema
The schema the API checks this event against: reco.schema.json.