200 - data contains access_token, refresh_token, access_token_expires_in, refresh_token_expires_in (epoch seconds), is_onboarded (bool - route to onboarding if false), name, email.422 - OTP expired or invalid | 406 - device not registered | 429 - too many attempts (locked){
"current_lat": 19.076,
"current_lng": 72.8777,
"device_id": "device_a1b2c3d4e5",
"email": "user@example.com",
"otp": "482910"
}curl --location 'https://uat-api.hastaai.in/api/v1/auth/verify-otp' \
--header 'Content-Type: application/json' \
--data-raw '{
"current_lat": 19.076,
"current_lng": 72.8777,
"device_id": "device_a1b2c3d4e5",
"email": "user@example.com",
"otp": "482910"
}'{
"success": true,
"message": "Login successful",
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InVzZXJAZXhhbXBsZS5jb20iLCJyb2xlIjoiYXV0aGVudGljYXRlZF91c2VyIiwidHlwZSI6InVzZXJfYXV0aF90b2tlbiIsImV4cCI6MTc0Njk2NTQwMH0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
"access_token_expires_in": 100,
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InVzZXJAZXhhbXBsZS5jb20iLCJyb2xlIjoiYXV0aGVudGljYXRlZF91c2VyIiwidHlwZSI6InVzZXJfcmVmcmVzaF90b2tlbiIsImV4cCI6MTc1MzY1NzgwMH0.abc123def456ghi789",
"refresh_token_expires_in": 200,
"is_onboarded": false,
"name": "Test User",
"email": "user@example.com"
}
}