| mode | No | Settings of the test from show_typing_test, used to label the result and build a challenge link. Example: timed. | |
| seed | No | Seed from show_typing_test, e.g. 4821, so a challenge link reproduces the same passage. | |
| samples | No | Optional, sent by the widget: cumulative count of characters entered at the end of each whole second, e.g. [5, 11, 16]. Used for per-second speed and consistency. | |
| seconds | Yes | Elapsed typing time in seconds, from the first keystroke to the end (the full duration for a timed test), e.g. 60. Must be between 1 and 3600. | |
| difficulty | No | Difficulty from show_typing_test, e.g. words. | |
| focus_keys | No | Drill keys from show_typing_test, e.g. 'eth'. | |
| typed_text | Yes | Exactly what the user typed, including mistakes, e.g. 'the quikc brown fox'. May be empty. | |
| custom_text | No | Sent by the widget for custom-text tests: the full custom text from show_typing_test, e.g. 'The early bird catches the worm.', so the challenge link reproduces the whole passage. Omit otherwise. | |
| missed_keys | No | Optional, sent by the widget: one character per mistyped keystroke, giving the key that was expected (including mistakes later corrected), e.g. 'eet'. Used to find weak keys. | |
| target_text | Yes | The passage the user was asked to type, exactly as shown, e.g. 'the quick brown fox'. | |
| duration_seconds | No | Timed-test length from show_typing_test, e.g. 60. | |