EndpointsAuth
Email + password signup (verify)
Step 2: consume the verification token, create the User and password method, and start a session.
POST
application/json- body
token*stringapplication/json- response
accessToken*stringJWT access token for authentication
user*Authenticated user
curl -X POST 'https://api.routess.com/auth/verify-email' \ -H 'Content-Type: application/json' \ -d '{ "token": "0a1b2c3d…"}'{ "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "user": { "id": 1, "email": "[email protected]", "name": "Jane Doe", "handle": "jane-doe", "avatar": "https://example.com/avatar.jpg", "isEmailVerified": true, "role": "user", "preferences": { "units": "km", "showPois": true, "terrain3d": false, "autoSnap": true, "defaultActivity": "Cycling", "selectedSports": [ "cycle", "run" ], "sportSpeeds": { "run": 10, "cycle": 25, "walk": 5 }, "mapStyle": "outdoors", "overlays": { "heatmap": true, "contour": false, "bike": true, "surface": false, "wind": false, "hikingNodes": false, "cyclingNodes": false }, "defaultRouteVisibility": "private", "routingDefaults": { "cycle": { "surfacePreference": "mixed", "avoidFerries": true, "avoidHighways": true }, "run": { "surfacePreference": "mixed", "avoidFerries": true, "avoidHighways": true }, "walk": { "surfacePreference": "mixed", "avoidFerries": true, "avoidHighways": true } } }, "idHash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", "deletionStatus": "active", "deletionRequestedAt": "2026-05-09T08:00:00.000Z", "hasPassword": true }}Email + password signup (request)
Step 1 of email+password signup. Validates the password (length 12-128, HIBP breach check) and emails a verification link. The User row is NOT created until the verification link is clicked. Always returns 200 regardless of whether the email is already registered (no enumeration); existing accounts get a 'you already have an account' email instead of a verification link.
Email + password login
Authenticates with email + password. Returns a session JWT. Generic error message on failure.