User events let an operator-built white-label app send lightweight app interaction telemetry to the platform. Use them to understand app usage, map opens, app activation, vehicle selection, Bluetooth actions, and similar client-side behavior that the backend cannot infer from normal rental, booking, or payment endpoints.
| Related reference: User API | User API Guide | Operations API Events Guide | Fair-Use Policy |
Send the user’s current app/device position on User API requests whenever the app has permission and a reasonably fresh location:
Device-Position: 52.520008;13.404954
The format is WGS84 decimal latitude first, longitude second. Core accepts either ; or a space as the separator. When present and valid, this position is stored on events as the user/device position. This is useful for later analytics such as where users open the app, where they browse the map, and where app actions happen.
Do not send a stale or guessed location. If the user has not granted location permission, omit the header and continue the API call. The backend ignores invalid or missing values.
POST /userevents is for app-posted APP_ events. The backend already creates operational events for rentals, bookings, payments, vehicles, verification, packages, invoices, and other domain actions. Do not manually post those operational events from the app.
The User API currently accepts only event types whose names start with APP_. Deprecated legacy values such as LOGIN, SIGNUP, LOGOUT, and START, and non-app events such as RENTAL_START or USER_PAYMENT_METHOD_ADD, should not be posted by the app.
The request body is optional JSON and is stored as event request information. Keep it small and product-focused.
Use it for non-sensitive UI context, for example:
{
"screen": "vehicle_detail",
"vehicleId": 12345,
"source": "map_marker"
}
Do not send payment details, tokens, passwords, precise personal documents, or large payloads.
Call POST /userevents?type={eventType}. A successful request returns 204 No Content.
POST /userevents?type=APP_VEHICLE_SELECTION
Authorization: Bearer <access-token>
Device-Position: 52.520008;13.404954
Content-Type: application/json
{
"vehicleId": 12345,
"source": "map_marker"
}
The event is linked to the current signed-in user when the app sends a valid access token. The endpoint can also tolerate anonymous app events, but signed-in events are more useful for support and analytics.
| User action | Event type | Suggested payload |
|---|---|---|
| App launches or main app shell is ready | APP_START |
screen, appBuild, sessionId |
| User signs in successfully | APP_LOGIN |
method such as email, phone, social |
| User completes sign-up in the app | APP_SIGNUP |
method, branchId |
| User logs out | APP_LOGOUT |
screen |
| App is backgrounded or closed | APP_CLOSE or APP_INACTIVATE |
screen, sessionDurationSeconds |
| App returns to foreground | APP_ACTIVATE |
screen |
| User moves or refreshes the map | APP_MAP_NAVIGATION |
branchId, zoom, radius, categoryIds |
| User selects a vehicle | APP_VEHICLE_SELECTION |
vehicleId, vehicleCode, source |
| User performs a Bluetooth action | APP_BT_ACTION |
vehicleId, action |
| Bluetooth action fails | APP_BT_ACTION_FAIL |
vehicleId, action, reason |
| Bluetooth lock succeeds | APP_BT_LOCK |
vehicleId, rentalId |
| Bluetooth unlock succeeds | APP_BT_UNLOCK |
vehicleId, rentalId |
Use one event per meaningful interaction, not for every render, animation frame, location update, or polling response.
For location-aware app analytics, use both request parameters and the Device-Position header:
APP_START with Device-Position if location permission is already available.lat, lng, and rad, and include Device-Position with the user’s actual position if known.APP_VEHICLE_SELECTION with Device-Position and vehicleId.Device-Position on normal API calls so backend-created operational events can also capture user position.The map center and the user’s physical position are not always the same. Use discovery parameters for the viewport/search area and Device-Position for the user’s device location.
These are the event types the app should post with POST /userevents:
| Event type | Use it for |
|---|---|
APP_LOGIN |
User signed in successfully in the app. |
APP_SIGNUP |
User completed sign-up in the app. |
APP_LOGOUT |
User logged out. |
APP_CLOSE |
App/session closed. |
APP_MAP_NAVIGATION |
User moved, zoomed, or refreshed the map. |
APP_VEHICLE_SELECTION |
User selected a vehicle from map, list, scan, radar, or deeplink. |
APP_START |
App started or main app shell became active. |
APP_INACTIVATE |
App moved to background/inactive state. |
APP_ACTIVATE |
App returned to active foreground state. |
APP_BT_ACTION |
Bluetooth action was attempted or completed. |
APP_BT_ACTION_FAIL |
Bluetooth action failed. |
APP_BT_LOCK |
Bluetooth lock action succeeded. |
APP_BT_UNLOCK |
Bluetooth unlock action succeeded. |
The platform also creates operational events. These are useful in Operations API event views and analytics, but apps should not post them manually.
| Family | Event types |
|---|---|
| Rental | RENTAL_RESERVATION, RENTAL_START, RENTAL_START_RFID, RENTAL_START_BLUETOOTH, RENTAL_END, RENTAL_END_RFID, RENTAL_END_RFID_IGNORED, RENTAL_END_BLUETOOTH, RENTAL_END_DOCKED, RENTAL_END_INACTIVE, RENTAL_END_USER_BALANCE_DEPLETED, RENTAL_FEEDBACK, RENTAL_DRIVE, RENTAL_DRIVE_BLUETOOTH, RENTAL_PARK, RENTAL_PARK_BLUETOOTH, RENTAL_PARK_INACTIVE, RENTAL_RENEW_RESERVATION, RENTAL_CANCEL_RESERVATION, RENTAL_OPEN_TAILBOX, RENTAL_LIST, RENTAL_DETAILS, RENTAL_BUY_RESERVATION, RENTAL_PRE_END_ACTIONS, RENTAL_OPERATION_FAILED, RENTAL_UPDATE, RENTAL_DEPOSIT_RELEASE, RENTAL_REQUIREMENTS_START_CHECK, RENTAL_REQUIREMENTS_END_CHECK, RENTAL_END_CHECK, RENTAL_FILES_LINKED |
| Booking | BOOKING_CREATED, BOOKING_UPDATED, BOOKING_CANCELED, BOOKING_CANCELED_PAYMENT_FAILURE, BOOKING_SUCCESSFUL, BOOKING_DETAILS, BOOKING_LIST, BOOKING_PICKUP, BOOKING_PICKUP_RFID, BOOKING_PICKUP_BLUETOOTH, BOOKING_TIMESLOT, BOOKING_DELIVERED, BOOKING_CHECKED_IN, BOOKING_APPROVAL, BOOKING_CATEGORY_CHANGED, BOOKING_AVAILABLE_CATEGORIES, BOOKING_AVAILABILITY, BOOKING_STATION_AVAILABILITY, BOOKING_ESTIMATE_EXTENSION, BOOKING_BOOKABLE_CATEGORIES, GROUP_BOOKING_LIST, GROUP_BOOKING_CREATED |
| Vehicle and commands | VEHICLE_LOCATE, VEHICLE_COMMAND_START, VEHICLE_COMMAND_STOP, VEHICLE_COMMAND_LOCK, VEHICLE_COMMAND_UNLOCK, VEHICLE_COMMAND_LOCATE, VEHICLE_COMMAND_OPEN_SADDLE, VEHICLE_COMMAND_OPEN_TAILBOX, VEHICLE_COMMAND_LOCK_TAILBOX, VEHICLE_COMMAND_UNLOCK_TAILBOX, VEHICLE_COMMAND_ALARM_ON, VEHICLE_COMMAND_ALARM_OFF, VEHICLE_COMMAND_SET_MAX_SPEED, VEHICLE_COMMAND_CUSTOM_COMMAND, VEHICLE_COMMAND_UNLOCK_BIKE_LOCK, VEHICLE_COMMAND_UNLOCK_STATION_PORT, VEHICLE_COMMAND_UNKNOWN, VEHICLE_UPDATE, VEHICLE_BRANCH_CHANGED |
| Vehicle state and faults | VEHICLE_SERVICE_STATE_OPERATIONAL, VEHICLE_SERVICE_STATE_OUT_OF_ORDER, VEHICLE_TAGS_UPDATE, VEHICLE_SERVICE_STATE_RETIRED, VEHICLE_COMMAND_REBOOT, VEHICLE_SERVICE_STATE_LOW_SOC, VEHICLE_SERVICE_STATE_UNKNOWN, VEHICLE_FAULT_STATE_FAULT, VEHICLE_FAULT_STATE_ILLEGAL_MOVEMENT, VEHICLE_FAULT_STATE_FALLEN_OVER, VEHICLE_FAULT_STATE_MODULE_REMOVED, VEHICLE_FAULT_STATE_LIFTED_UP, VEHICLE_FAULT_STATE_UNKNOWN, VEHICLE_MAINTENANCE, VEHICLE_OFFLINE, VEHICLE_ONLINE, VEHICLE_OUT_OF_RENTAL_ACTIVITY, VEHICLE_LOST_SCANNED_BY_USER, VEHICLE_IOT_NOT_POWERED, VEHICLE_IOT_POWERED, VEHICLE_BULK_UPDATE, VEHICLE_TASK_BULK_CREATE, VEHICLE_NOTE_BULK_CREATE, VEHICLE_TAGS_BULK_UPDATE |
| Bluetooth, RFID, and charging | VEHICLE_RFID_READER_NO_ACTION, VEHICLE_BLUETOOTH_UNRECOGNIZED_INTERACTION, VEHICLE_BLUETOOTH_INVALID_TOKEN_USAGE, VEHICLE_BLUETOOTH_UNAUTHORIZED_TOKEN_USAGE, VEHICLE_BLUETOOTH_ACTION_UNLOCK, VEHICLE_BLUETOOTH_ACTION_LOCK, VEHICLE_BLUETOOTH_ACTION_UNKNOWN, VEHICLE_BLUETOOTH_NO_ACTION_POSSIBLE, VEHICLE_CHARGING_STARTED, VEHICLE_CHARGING_ENDED, VEHICLE_CHARGING_RESTRICTION_IGNORED |
| Vehicle service state V2 | VEHICLE_SERVICE_STATE_V2_FUNCTIONAL, VEHICLE_SERVICE_STATE_V2_INSPECT, VEHICLE_SERVICE_STATE_V2_RELOCATE, VEHICLE_SERVICE_STATE_V2_COLLECT, VEHICLE_SERVICE_STATE_V2_SERVICE_ON_SITE, VEHICLE_SERVICE_STATE_V2_SERVICE_WORKSHOP, VEHICLE_SERVICE_STATE_V2_SERVICE_EXTERNAL, VEHICLE_SERVICE_STATE_V2_REPLACE, VEHICLE_SERVICE_STATE_V2_IMPOUNDED, VEHICLE_SERVICE_STATE_V2_LOST, VEHICLE_SERVICE_STATE_V2_RETIRED, VEHICLE_SERVICE_STATE_V2_READY_FOR_DEPLOYMENT, VEHICLE_SERVICE_STATE_V2_MAINTENANCE, VEHICLE_SERVICE_STATE_V2_OTHER, VEHICLE_SERVICE_STATE_V2_WAITING_FOR_PARTS, VEHICLE_SERVICE_STATE_V2_UNREPAIRABLE, VEHICLE_SERVICE_STATE_V2_DEFLEETED, VEHICLE_SERVICE_STATE_V2_OPERATIONAL_HOLD, VEHICLE_SERVICE_STATE_V2_AWAITING_ACTION, VEHICLE_SERVICE_STATE_V2_SERVICE_MECHANICS, VEHICLE_SERVICE_STATE_V2_REGULATORY_INSPECTION_READY, VEHICLE_SERVICE_STATE_V2_REGULATORY_INSPECTION, VEHICLE_SERVICE_STATE_V2_SERVICE_WORKSHOP_INSURANCE, VEHICLE_SERVICE_STATE_V2_SERVICE_WORKSHOP_QUEUE, VEHICLE_SERVICE_STATE_V2_READY_FOR_DEPLOYMENT_NEW, VEHICLE_SERVICE_STATE_V2_COLLECT_EXTERNAL |
| Battery | VEHICLE_BATTERY_LEVEL_UNKNOWN, VEHICLE_BATTERY_LEVEL_CRITICAL, VEHICLE_BATTERY_LEVEL_LOW, VEHICLE_BATTERY_LEVEL_MEDIUM, VEHICLE_BATTERY_LEVEL_HIGH |
| User and verification | USER_PASSWORD_RESET_EMAIL, USER_PASSWORD_CHANGED, USER_EMAIL_VERIFIED, USER_EMAIL_CHANGED, USER_LICENCE_VERIFICATION, USER_ID_DOCUMENT_VERIFICATION, USER_MANUAL_VERIFICATION, USER_CUSTOM_EXTERNAL_VERIFICATION, USER_PROFILE_DATA_CHANGED, USER_PAYMENT_METHOD_ADD, USER_PAYMENT_METHOD_CHANGED, USER_PAYMENT_METHOD_REMOVED, USER_PHONE_REGISTRATION_DENIED, USER_PHONE_REGISTRATION_DENIED_SILENT, USER_PHONE_REGISTRATION_NO_SMS_SENT, USER_TERMS_AND_CONDITIONS_ACCEPTED |
| Payment and commercial products | BALANCE_SETTLEMENT_FAILED, BALANCE_SETTLEMENT_SUCCESSFUL, INVOICE_RETRY_PAYMENT, PACKAGE_BUY, PACKAGE_BUY_PUSH, RIDE_PASS_RENEW |
| Cards, driving log, stations, and parking | GENERATE_BLUETOOTH_TOKEN, GENERATE_BLUETOOTH_TOKENS, CUSTOMER_IDENTITY_CARD_CREATE, CUSTOMER_IDENTITY_CARD_CREATE_BULK, CUSTOMER_IDENTITY_CARD_UPDATE, CUSTOMER_IDENTITY_CARD_ASSIGN, CUSTOMER_IDENTITY_CARD_UNASSIGN, VEHICLE_CARD_CREATE, VEHICLE_CARD_CREATE_BULK, VEHICLE_CARD_UPDATE, VEHICLE_CARD_ASSIGN, VEHICLE_CARD_UNASSIGN, DRIVING_LOG_SUBMIT, DRIVING_LOG_ENTRY_CREATE, DRIVING_LOG_ENTRY_UPDATE, DRIVING_LOG_ENTRY_DELETE, PHYSICAL_STATION_SLOT_VEHICLE_CONNECTED, PHYSICAL_STATION_SLOT_VEHICLE_DISCONNECTED, PHYSICAL_STATION_SLOT_VEHICLE_ORPHANED, VEHICLE_CONNECTED_TO_UNKNOWN_SLOT, PARKING_RESERVATION_CREATED, PARKING_RESERVATION_REMOVED, PARKING_RESERVATION_CHANGED |
| Maintenance and notifications | NOTIFICATION, VEHICLE_MAINTENANCE_APPROACH, VEHICLE_MAINTENANCE_DEPLOY, VEHICLE_MAINTENANCE_CLOSE |
| Area | Endpoints |
|---|---|
| Post app event | POST /userevents |
| Retrieve event details and positions | Operations API Events Guide |
APP_ events from the app.Device-Position consistently on User API requests when location permission is available.