Update part of the onboarding preference.
PATCH
/api/users/me/onboarding
const url = 'https://api.tradr.cloud/api/users/me/onboarding';const options = { method: 'PATCH', headers: {'Content-Type': 'application/json'}, body: '{"calculatorFirstUsedAt":"2026-04-15T12:00:00Z","coachMarkSeen":"partial-close","sidebarPinned":true,"status":"pending"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://api.tradr.cloud/api/users/me/onboarding \ --header 'Content-Type: application/json' \ --data '{ "calculatorFirstUsedAt": "2026-04-15T12:00:00Z", "coachMarkSeen": "partial-close", "sidebarPinned": true, "status": "pending" }'Authed. Partial: send only what changes. The server merges the named fields into the stored preference, so omitting a field leaves it as it was — a body carrying only status does not clear the coach marks. coachMarkSeen appends one key to the seen set and is idempotent; sending the same key again is not an error and does not duplicate it. At least one field is required.
Request Bodyrequired
Section titled “Request Bodyrequired”Media typeapplication/json
object
calculatorFirstUsedAt
When the calculator was first used.
string format: date-time
coachMarkSeen
One surface key to add to the seen set — singular, because the whole set is never sent. Ignored once the set holds 64 keys.
string
Example
partial-closesidebarPinned
Pin (true) or unpin (false) the expanded nav rail.
boolean
status
string
Responses
Section titled “Responses”The merged onboarding preference, in the same shape as the GET.
Unknown field, empty body, or an invalid status or timestamp.
Authentication required.