Sponsored

Rivian API

the_mace

Well-Known Member
First Name
Rob
Joined
Apr 8, 2022
Threads
10
Messages
368
Reaction score
304
Location
Boston, MA
Vehicles
Tesla Model S75D, Ford F350 Diesel, Mercedes GLC30
Occupation
CTO
Hmm, I thought that may be the case but I get the same thing on both my account and my wife's
Ah my wifes was fine, I have the CLI set up to use either a saved token in an ENV variable or to fetch from a json state file. The ENV variable was stale. All good, both accounts going fine.
Sponsored

 

Jiji

Well-Known Member
First Name
Rick
Joined
Jun 21, 2023
Threads
11
Messages
160
Reaction score
228
Location
Finger Lakes, NY
Website
github.com
Vehicles
Rivian Blue R1S
Anyone look/find the new tire pressure endpoints shown in the new update to theRivian app? I’m thinking there should be new endpoints as the old ones were valid and “OK” and never had a pressure value.

i did try out mitmproxy, works fine with my app but seems the Rivian app doesn’t care for it being there.🤔 Maybe someone with a security background or perhaps poking into the Android version can help figure these out.
 

edman007

Well-Known Member
First Name
Ed
Joined
Aug 10, 2022
Threads
0
Messages
99
Reaction score
96
Location
New York
Vehicles
CY R1S
Good activity for my evening!

There is a new tirePressure* items
Code:
subscription tirePressureState($vehicleID: String!) { vehicleState(id: $vehicleID) { tirePressureStatusFrontLeft { timeStamp value } tirePressureStatusFrontRight { timeStamp value } tirePressureStatusRearLeft { timeStamp value } tirePressureStatusRearRight { timeStamp value } tirePressureFrontLeft { timeStamp value } tirePressureFrontRight { timeStamp value } tirePressureRearLeft { timeStamp value } tirePressureRearRight { timeStamp value } } }
That didn't take nearly enough time...I'll see if I can put it into https://github.com/the-mace/rivian-python-api and do a pull request if I figure it out
 
Last edited:

edman007

Well-Known Member
First Name
Ed
Joined
Aug 10, 2022
Threads
0
Messages
99
Reaction score
96
Location
New York
Vehicles
CY R1S
Hrm, so those tire pressure things don't actually work when I query them...do they only work for a subscription. I'm going to try to figure out how to get them working later, maybe tomorrow

Anyways, for anyone doing API debugging, here are all the app queries I could find, lots of interesting/undocumented stuff here. I figure someone needs this to pop up in google.

Code:
mutation AcceptVehicleInvite($inviteId: String!) { acceptVehicleInvite(inviteId: $inviteId) { success } }
mutation CancelVehicleInvite($inviteId: String!) { cancelVehicleInvite(inviteId: $inviteId) { success } }
mutation CreateDepartureSchedule($vehicleId: String!, $schedule: InputDepartureSchedule!) { createDepartureSchedule(vehicleId: $vehicleId, schedule: $schedule) { success } }
mutation DeclineVehicleInvite($inviteId: String!) { declineVehicleInvite(inviteId: $inviteId) { success } }
mutation DeregisterPushNotificationToken($data: DeregistrationInput!) { deregisterPushNotificationToken(data: $data) { success } }
mutation DisenrollPhone($attrs: DisenrollPhoneAttributes!) { disenrollPhone(attrs: $attrs) { success } }
mutation EnrollPhone($attrs: EnrollPhoneAttributes!) { enrollPhone(attrs: $attrs) { success } }
mutation InviteUserToVehicle($attrs: VehicleInviteAttributes!) { inviteUserToVehicle(attrs: $attrs) { success } }
mutation Login($email: String!, $password: String!) { login(email: $email, password: $password) { __typename ... on MobileLoginResponse { accessToken refreshToken userSessionToken } ... on MobileMFALoginResponse { otpToken } } }
mutation LoginWithOTP($email: String!, $otpCode: String!, $otpToken: String!) { loginWithOTP(email: $email, otpCode: $otpCode, otpToken: $otpToken) { accessToken refreshToken userSessionToken } }
mutation Logout { logout { success } }
mutation ParseAndShareLocationToVehicle($str: String!, $vehicleId: String!) { parseAndShareLocationToVehicle(str: $str, vehicleId: $vehicleId) { publishResponse { result } } }
mutation ReassignKey($attrs: ReassignKeyAttributes!) { reassignKey(attrs: $attrs) { success } }
mutation RegisterPushNotificationToken($data: RegistrationInput!) { registerPushNotificationToken(data: $data) { deviceTokenId locale success token } }
mutation RemoveUserFromVehicle($attrs: RemoveUserFromVehicleAttributes!) { removeUserFromVehicle(attrs: $attrs) { success } }
mutation ResendOTPCode($otpToken: String!) { resendOTPCode(otpToken: $otpToken) { success } }
mutation SetChargingSchedule($vehicleId: String!, $chargingSchedules: [InputChargingSchedule!]!) { setChargingSchedules(vehicleId: $vehicleId, chargingSchedules: $chargingSchedules) { success } }
mutation SetDistanceUnit($unit: DistanceUnit!, $timeStamp: UnixTimestamp!) { setDistanceUnit(unit: $unit, timestamp: $timeStamp) }
mutation SetTemperatureUnit($unit: TemperatureUnit!, $timeStamp: UnixTimestamp!) { setTemperatureUnit(unit: $unit, timestamp: $timeStamp) }
mutation SetVehicleName($vehicleId: String!, $name: String!) { setVehicleName(vehicleId: $vehicleId, name: $name) { value } }
mutation StartNewChargerSession($locationId: ID, $chargingNetwork: ID!, $evseId: ID!, $serialNumber: ID!, $vehicleId: ID) { startNewChargerSession(locationId: $locationId, chargingNetwork: $chargingNetwork, evseId: $evseId, serialNumber: $serialNumber, vehicleId: $vehicleId) { id sessionId status errorMessage errorId } }
mutation UpdateDepartureSchedule($vehicleId: String!, $scheduleId: String!, $schedule: InputDepartureSchedule!) { updateDepartureSchedule(vehicleId: $vehicleId, scheduleId: $scheduleId, schedule: $schedule) { success } }
mutation acceptDelivery($orderId: ID!) { acceptDelivery(input: { orderId: $orderId } ) { vehicleId } }
mutation activateWallbox($wallboxId: String!) { activateWallbox(wallboxId: $wallboxId) { linked } }
mutation createBugTicket($userVehicleData: UserVehicleInfoInput!) { createBugTicket(userVehicleData: $userVehicleData) { jiraTicketUrl } }
mutation creditCheck { payment { postCreditCheck(source: "ENERGY_CHARGING", intent: FULL_PAYMENT, verbose: TRUE) { passed rules { name passed } } } }
mutation deleteDepartureSchedule($vehicleId: String!, $scheduleId: String!) { deleteDepartureSchedule(vehicleId: $vehicleId, scheduleId: $scheduleId) { success } }
mutation deleteTrip($tripId: String!) { deleteTrip(tripId: $tripId) }
mutation departNow($vehicleId: String!, $scheduleId: String!, $skipDate: String!) { departNow(vehicleId: $vehicleId, scheduleId: $scheduleId, skipDate: $skipDate) { success } }
mutation disableKey($keyIdentityId: ID!, $HRID: String!) { disableKey(keyIdentityId: $keyIdentityId, HRID: $HRID) { success } }
mutation enableKey($keyIdentityId: ID!, $HRID: String!) { enableKey(keyIdentityId: $keyIdentityId, HRID: $HRID) { success } }
mutation removeWallbox($wallboxId: String!) { removeWallbox(wallboxId: $wallboxId) { linked } }
mutation saveTrip($attrs: TripPlanInput!) { saveTrip(attrs: $attrs) }
mutation sendTripToVehicle($attrs: SendTripToVehicleInput!) { sendTripToVehicle(attrs: $attrs) }
mutation sendVehicleCommand($attrs: VehicleCommandAttributes!) { sendVehicleCommand(attrs: $attrs) { id command state } }
mutation skipNextScheduledDeparture($vehicleId: String!, $scheduleId: String!, $skipDate: String!) { skipNextScheduledDeparture(vehicleId: $vehicleId, scheduleId: $scheduleId, skipDate: $skipDate) { success } }
mutation transferOwnership($vehicleID: String!) { transferOwnership(vehicleId: $vehicleID) { success } }
mutation updateTrip($tripId: String!, $attrs: TripPlanInput!) { updateTrip(tripId: $tripId, attrs: $attrs) }
mutation updateTripTimestamp($tripId: String!) { updateTripTimestamp(tripId: $tripId) }
mutation updateWallbox($wallboxId: String!, $wifiId: String, $name: String, $latitude: String, $longitude: String) { updateWallbox(wallboxId: $wallboxId, wifiId: $wifiId, name: $name, latitude: $latitude, longitude: $longitude) { wallboxId userId wifiId name linked latitude longitude chargingStatus power currentVoltage currentAmps softwareVersion model serialNumber maxPower maxVoltage maxAmps } }
query ChargerDetails($ids: [String!]!, $userLocation: GeoCoordinatesInput) { chargerByIds(ids: $ids, userLocation: $userLocation) { id name location { addressComponents { type shortName longName } formattedAddress coordinate { latitude longitude } navCoordinate { latitude longitude } } distance driveDetails { driveDistance driveDuration detourDistance detourDuration } chargingStation { network networkId maxKw note chargers { locationId pluginDependency connectors { id evseId evseUid name level maxKw chargingPrice { level description amount currency lastUpdateTime symbol type unit } type free vend state } } operatingHours { alwaysOpen hours { close day open } } } adapterRequired } }
query ChargingSiteDiscovery($filter: ChargingSiteQueryParams!) { chargingSiteDiscovery(filter: $filter) { id name location { addressComponents { type shortName longName } formattedAddress coordinate { latitude longitude } navCoordinate { latitude longitude } } distance driveDetails { driveDistance driveDuration detourDistance detourDuration } chargingStation { network networkId maxKw note operatingHours { alwaysOpen hours { day open close } } chargers { locationId pluginDependency connectors { id evseId evseUid name level maxKw chargingPrice { level description amount currency lastUpdateTime symbol type unit } type free vend state } } } adapterRequired } }
query CheckChargePointLinking($rivianId: ID!) { chargepoint { checkByRivianId(rivianId: $rivianId) } }
query CurrentUser { currentUser { __typename ...CurrentUserFields } }  fragment CurrentUserFields on User { id settings { distanceUnit { value timestamp } temperatureUnit { value timestamp } } firstName lastName email address { country } vehicles { id owner roles vin vas { vasVehicleId vehiclePublicKey } vehicle { deviceSlots { phone { max free } } model mobileConfiguration { trimOption { optionId optionName } exteriorColorOption { optionId optionName } interiorColorOption { optionId optionName } driveSystemOption { optionId optionName } tonneauOption { optionId optionName } wheelOption { optionId optionName } driveSystemTowingDriveModes driveSystemDriveModes maxVehiclePower } maintenanceSchedule { sections { items { description isDue } serviceLifetime { __typename ... on MaintenanceDistanceLimit { km mi } ... on MaintenanceDateLimit { year } } } } } settings { name { value } } } enrolledPhones { vas { vasPhoneId publicKey } enrolled { deviceType deviceName vehicleId identityId shortName } } pendingInvites { id invitedByFirstName role status vehicleId vehicleModel email } }
query CurrentUserForLogin { currentUser { __typename ...CurrentUserFields } }  fragment CurrentUserFields on User { id settings { distanceUnit { value timestamp } temperatureUnit { value timestamp } } firstName lastName email address { country } vehicles { id owner roles vin vas { vasVehicleId vehiclePublicKey } vehicle { deviceSlots { phone { max free } } model mobileConfiguration { trimOption { optionId optionName } exteriorColorOption { optionId optionName } interiorColorOption { optionId optionName } driveSystemOption { optionId optionName } tonneauOption { optionId optionName } wheelOption { optionId optionName } driveSystemTowingDriveModes driveSystemDriveModes maxVehiclePower } maintenanceSchedule { sections { items { description isDue } serviceLifetime { __typename ... on MaintenanceDistanceLimit { km mi } ... on MaintenanceDateLimit { year } } } } } settings { name { value } } } enrolledPhones { vas { vasPhoneId publicKey } enrolled { deviceType deviceName vehicleId identityId shortName } } pendingInvites { id invitedByFirstName role status vehicleId vehicleModel email } }
query FileWrapper($locale: String, $slug: String) { files: egFileWrapperCollection(limit: 1, locale: $locale, where: { slug: $slug } ) { items { file { url size sys { publishedAt } } } } }
query GetAdventureFeed($locale: String!, $slug: String!) { egAdventureFeedCollection(locale: $locale, limit: 1, where: { slug: $slug } ) { items { slug entryTitle cardsCollection(limit: 15) { items { __typename ... on EgAdventureFeedStoryCard { slug entryTitle title subtitle cover { entryTitle sourcesCollection(limit: 1) { items { entryTitle media auxiliaryData { __typename ... on EgImageAuxiliaryData { altText } } } } } slidesCollection { items { entryTitle duration theme gradient mediaCollection(limit: 2) { items { __typename ... on EgCloudinaryMedia { entryTitle sourcesCollection(limit: 1) { items { entryTitle media auxiliaryData { __typename ... on EgImageAuxiliaryData { altText } } } } } ... on EgLottieAnimation { entryTitle altText media mode } } } } } } ... on EgAdventureFeedEditorialCard { slug entryTitle title subtitle cover { entryTitle sourcesCollection(limit: 1) { items { entryTitle media auxiliaryData { __typename ... on EgImageAuxiliaryData { altText } } } } } sectionsCollection { items { entryTitle theme mediaCollection(limit: 2) { items { __typename ... on EgCloudinaryMedia { entryTitle sourcesCollection(limit: 1) { items { entryTitle media auxiliaryData { __typename ... on EgImageAuxiliaryData { altText } } } } } ... on EgLottieAnimation { entryTitle altText media mode } } } } } } } } } } }
query GetChargingSchedule($vehicleId: String!) { getVehicle(id: $vehicleId) { chargingSchedules { startTime duration location { latitude longitude } amperage enabled weekDays } } }
query GetChargingSessionStatus($jobId: ID!, $userId: ID!) { getSessionStatus(jobId: $jobId, userId: $userId) { status errorMessage errorId sessionId } }
query GetReverseGeocode($params: ReverseGeocodeQueryParams!) { reverseGeocode(params: $params) { id name location { addressComponents { type shortName longName } formattedAddress coordinate { latitude longitude } navCoordinate { latitude longitude } } distance } }
query GetShareFeedbackURL($vehicleId: String!) { getShareFeedbackURL(vehicleId: $vehicleId) }
query GetTrailerProfiles($getVehicleId: String!) { getVehicle(id: $getVehicleId) { trailerProfiles { trailerDefault { __typename ...TrailerProfileFields } trailer1 { __typename ...TrailerProfileFields } trailer2 { __typename ...TrailerProfileFields } trailer3 { __typename ...TrailerProfileFields } } } }  fragment TrailerProfileFields on TrailerProfile { rangeStatus weight onRoadEfficiency offRoadEfficiency name }
query GetVehicle($getVehicleId: String) { getVehicle(id: $getVehicleId) { invitedUsers { __typename ... on ProvisionedUser { devices { type mappedIdentityId id hrid deviceName isPaired isEnabled } firstName lastName email roles userId } ... on UnprovisionedUser { email inviteId status } } } }
query GetVehicleState($vehicleID: String!) { vehicleState(id: $vehicleID) { __typename ...vehicleStateFields } }  fragment vehicleStateFields on VehicleState { gnssLocation { latitude longitude timeStamp isAuthorized } gnssSpeed { timeStamp value } gnssAltitude { timeStamp value } gnssError { timeStamp positionVertical positionHorizontal speed bearing } alarmSoundStatus { timeStamp value } timeToEndOfCharge { timeStamp value } doorFrontLeftLocked { timeStamp value } doorFrontLeftClosed { timeStamp value } doorFrontRightLocked { timeStamp value } doorFrontRightClosed { timeStamp value } doorRearLeftLocked { timeStamp value } doorRearLeftClosed { timeStamp value } doorRearRightLocked { timeStamp value } doorRearRightClosed { timeStamp value } windowFrontLeftClosed { timeStamp value } windowFrontRightClosed { timeStamp value } windowFrontLeftCalibrated { timeStamp value } windowFrontRightCalibrated { timeStamp value } windowRearLeftCalibrated { timeStamp value } windowRearRightCalibrated { timeStamp value } windowsNextAction { timeStamp value } closureFrunkLocked { timeStamp value } closureFrunkClosed { timeStamp value } closureFrunkNextAction { timeStamp value } gearGuardLocked { timeStamp value } closureLiftgateLocked { timeStamp value } closureLiftgateClosed { timeStamp value } closureLiftgateNextAction { timeStamp value } windowRearLeftClosed { timeStamp value } windowRearRightClosed { timeStamp value } closureSideBinLeftLocked { timeStamp value } closureSideBinLeftClosed { timeStamp value } closureSideBinRightLocked { timeStamp value } closureSideBinRightClosed { timeStamp value } closureSideBinLeftNextAction { timeStamp value } closureSideBinRightNextAction { timeStamp value } closureTailgateLocked { timeStamp value } closureTailgateClosed { timeStamp value } closureTailgateNextAction { timeStamp value } closureTonneauLocked { timeStamp value } closureTonneauClosed { timeStamp value } wiperFluidState { timeStamp value } powerState { timeStamp value } batteryHvThermalEventPropagation { timeStamp value } twelveVoltBatteryHealth { timeStamp value } vehicleMileage { timeStamp value } brakeFluidLow { timeStamp value } gearStatus { timeStamp value } batteryLevel { timeStamp value } chargerState { timeStamp value } batteryLimit { timeStamp value } remoteChargingAvailable { timeStamp value } batteryHvThermalEvent { timeStamp value } rangeThreshold { timeStamp value } distanceToEmpty { timeStamp value } otaAvailableVersionGitHash { timeStamp value } otaAvailableVersion { timeStamp value } otaCurrentVersionGitHash { timeStamp value } otaCurrentVersion { timeStamp value } otaDownloadProgress { timeStamp value } otaInstallDuration { timeStamp value } otaInstallProgress { timeStamp value } otaInstallReady { timeStamp value } otaInstallTime { timeStamp value } otaInstallType { timeStamp value } otaStatus { timeStamp value } otaCurrentStatus { timeStamp value } cabinClimateInteriorTemperature { timeStamp value } cabinPreconditioningStatus { timeStamp value } cabinPreconditioningType { timeStamp value } petModeStatus { timeStamp value } petModeTemperatureStatus { timeStamp value } cabinClimateDriverTemperature { timeStamp value } gearGuardVideoStatus { timeStamp value } gearGuardVideoMode { timeStamp value } gearGuardVideoTermsAccepted { timeStamp value } defrostDefogStatus { timeStamp value } steeringWheelHeat { timeStamp value } seatFrontLeftHeat { timeStamp value } seatFrontRightHeat { timeStamp value } seatRearLeftHeat { timeStamp value } seatRearRightHeat { timeStamp value } chargerStatus { timeStamp value } seatFrontLeftVent { timeStamp value } seatFrontRightVent { timeStamp value } chargerDerateStatus { timeStamp value } driveMode { timeStamp value } serviceMode { timeStamp value } trailerStatus { timeStamp value } btmFfHardwareFailureStatus { timeStamp value } btmIcHardwareFailureStatus { timeStamp value } btmLfdHardwareFailureStatus { timeStamp value } btmRfHardwareFailureStatus { timeStamp value } btmRfdHardwareFailureStatus { timeStamp value } carWashMode { timeStamp value } chargePortState { timeStamp value } chargingTimeEstimationValidity { timeStamp value } limitedAccelCold { timeStamp value } limitedRegenCold { timeStamp value } rearHitchStatus { timeStamp value } }
query LegalPage($slug: String, $locale: String) { pageData: egLegalPageCollection(limit: 1, where: { AND: [{ slug_exists: true } ,{ slug: $slug } ] } , locale: $locale) { items { entryTitle } } }
query Places($params: PlacesQueryParams!) { places(params: $params) { dataProvider results { id name distance location { addressComponents { type shortName longName } coordinate { latitude longitude } navCoordinate { latitude longitude } formattedAddress } driveDetails { detourDistance detourDuration driveDistance driveDuration } } } }
query SupportedFeatures { currentUser { vehicles { id vehicle { vehicleState { supportedFeatures { name status } } } } } }
query chatSession { getLatestChatSession { status } }
query defaultPaymentMethods { payment { getPaymentMethods { default card { brand lastFour } } } }
query delivery($orderId: ID!) { delivery(orderId: $orderId) { status carrier deliveryAddress { addressLine1 addressLine2 city state country zipcode } appointmentDetails { appointmentId startDateTime endDateTime timeZone } vehicleVIN } }
query getEstimatedRange($vehicleId: String!, $startSoc: Float!, $driveMode: String, $trailerProfile: String) { getVehicle(id: $vehicleId) { estimatedRange(startSoc: $startSoc, driveMode: $driveMode, trailerProfile: $trailerProfile) } }
query getLiveSessionData($vehicleId: ID, $transactionId: ID, $chargerId: ID) { getLiveSessionData(vehicleId: $vehicleId, transactionId: $transactionId, chargerId: $chargerId) { isRivianCharger isFreeSession vehicleChargerState { value updatedAt } chargerId startTime timeElapsed timeRemaining { value updatedAt } kilometersChargedPerHour { value updatedAt } power { value updatedAt } rangeAddedThisSession { value updatedAt } totalChargedEnergy { value updatedAt } timeRemaining { value updatedAt } vehicleChargerState { value updatedAt } kilometersChargedPerHour { value updatedAt } currentPrice } }
query getLiveSessionHistory($vehicleId: ID) { getLiveSessionHistory(vehicleId: $vehicleId) { chartData { kw time } } }
query getNonRivianUserSession { getNonRivianUserSession { chargerId transactionId isRivianCharger vehicleChargerState { value updatedAt } } }
query getOTAUpdateDetails($vehicleId: String!) { getVehicle(id: $vehicleId) { availableOTAUpdateDetails { url version locale } currentOTAUpdateDetails { url version locale } } }
query getRegisteredWallboxes { getRegisteredWallboxes { wallboxId userId wifiId name linked latitude longitude chargingStatus power currentVoltage currentAmps softwareVersion model serialNumber maxPower maxVoltage maxAmps } }
query getSavedTrips { getSavedTrips { id name startingSOC stops { name location { latitude longitude } targetArrivalSOCPercent type placeId { value dataProvider } } driveMode networkPreferences { networkId preference } trailerProfile avoidAdapterRequired createdAt updatedAt departureTime } }
query getVehicleImages($extension: String!, $resolution: String!, $versionForVehicle: String!, $versionForPreOrdere: String!) { getVehicleOrderMobileImages(resolution: $resolution, extension: $extension, version: $versionForPreOrdere) { orderId url resolution size design placement overlays { url overlay zIndex } } getVehicleMobileImages(resolution: $resolution, extension: $extension, version: $versionForVehicle) { vehicleId url resolution size design placement overlays { url overlay zIndex } } }
query getWallboxStatus($wallboxId: String!) { getWallboxStatus(wallboxId: $wallboxId) { wallboxId userId wifiId name linked latitude longitude chargingStatus power currentVoltage currentAmps softwareVersion model serialNumber maxPower maxVoltage maxAmps } }
query locales { locales { localeCode fullRegionName shortRegionName localeName } }
query planTrip($origin: CoordinatesInput!, $destination: CoordinatesInput!, $bearing: Float!, $vehicleId: String!, $startingSoc: Float!, $startingRangeMeters: Float!, $targetArrivalSocPercent: Float, $driveMode: String, $networkPreferences: [NetworkPreference!]) { planTrip(bearing: $bearing, vehicleId: $vehicleId, startingSoc: $startingSoc, origin: $origin, destination: $destination, startingRangeMeters: $startingRangeMeters, targetArrivalSocPercent: $targetArrivalSocPercent, driveMode: $driveMode, networkPreferences: $networkPreferences) { routes { routeResponse destinationReached totalChargingDuration arrivalSOC arrivalReachableDistance waypoints { waypointType entityId name latitude longitude maxPower chargeDuration arrivalSOC arrivalReachableDistance departureSOC departureReachableDistance } energyConsumptionOnLeg batteryEmptyToDestinationDistance batteryEmptyLocationLatitude batteryEmptyLocationLongitude } tripPlanStatus chargeStationsAvailable socBelowLimit } }
query planTripWithMultiStop($waypoints: [CoordinatesInput!]!, $originBearing: Float!, $vehicleId: String!, $startingSoc: Float!, $startingRangeMeters: Float, $targetArrivalSocPercent: Float, $driveMode: String, $networkPreferences: [NetworkPreference!], $trailerProfile: String, $avoidAdapterRequired: Boolean, $supportedConnectorTypes: [String!]) { planTripMultiStop(originBearing: $originBearing, vehicleId: $vehicleId, startingSoc: $startingSoc, waypoints: $waypoints, startingRangeMeters: $startingRangeMeters, targetArrivalSocPercent: $targetArrivalSocPercent, driveMode: $driveMode, networkPreferences: $networkPreferences, trailerProfile: $trailerProfile, avoidAdapterRequired: $avoidAdapterRequired, supportedConnectorTypes: $supportedConnectorTypes) { routes { routeResponse destinationReached totalChargingDuration arrivalSOC arrivalReachableDistance waypoints { waypointType entityId name latitude longitude maxPower chargeDuration arrivalSOC arrivalReachableDistance departureSOC departureReachableDistance adapterRequired } energyConsumptionOnLeg batteryEmptyToDestinationDistance batteryEmptyLocationLatitude batteryEmptyLocationLongitude } tripPlanStatus chargeStationsAvailable socBelowLimit } }
query vehicleOrders { orders(input: { orderTypes: [PRE_ORDER,VEHICLE] pageInfo: { from: 0 size: 10000 }  } ) { data { id state fulfillmentSummaryStatus items { sku } consumerStatuses { isConsumerFlowComplete } } } }
subscription tirePressureState($vehicleID: String!) { vehicleState(id: $vehicleID) { tirePressureStatusFrontLeft { timeStamp value } tirePressureStatusFrontRight { timeStamp value } tirePressureStatusRearLeft { timeStamp value } tirePressureStatusRearRight { timeStamp value } tirePressureFrontLeft { timeStamp value } tirePressureFrontRight { timeStamp value } tirePressureRearLeft { timeStamp value } tirePressureRearRight { timeStamp value } } }
subscription vehicleCloudConnection($vehicleID: String!) { vehicleCloudConnection(id: $vehicleID) { isOnline lastSync } }
subscription vehicleCommandState($id: String!) { vehicleCommandState(id: $id) { __typename ...vehicleCommandStateFields } }  fragment vehicleCommandStateFields on GetVehicleCommandState { id command createdAt state responseCode statusCode }
subscription vehicleDepartureSchedules($vehicleId: String!) { vehicleDepartureSchedules(vehicleId: $vehicleId) { id name isEnabled occurrence { __typename ... on RepeatsWeekly { days startsAtMin skippedOn } } departureSettings { __typename ... on DepartureSettings { shouldOverrideChargeSchedule comfortSettings { __typename ... on ComfortSettings { surfaceHeatVentLevels { __typename ... on SurfaceHeatVentLevels { frontLeftSeat frontRightSeat rearLeftSeat rearRightSeat steeringWheel } } cabinTempCelsius frontDefogDefrost } } } } } }
subscription vehicleState($vehicleID: String!) { vehicleState(id: $vehicleID) { __typename ...vehicleStateFields } }  fragment vehicleStateFields on VehicleState { gnssLocation { latitude longitude timeStamp isAuthorized } gnssSpeed { timeStamp value } gnssAltitude { timeStamp value } gnssError { timeStamp positionVertical positionHorizontal speed bearing } alarmSoundStatus { timeStamp value } timeToEndOfCharge { timeStamp value } doorFrontLeftLocked { timeStamp value } doorFrontLeftClosed { timeStamp value } doorFrontRightLocked { timeStamp value } doorFrontRightClosed { timeStamp value } doorRearLeftLocked { timeStamp value } doorRearLeftClosed { timeStamp value } doorRearRightLocked { timeStamp value } doorRearRightClosed { timeStamp value } windowFrontLeftClosed { timeStamp value } windowFrontRightClosed { timeStamp value } windowFrontLeftCalibrated { timeStamp value } windowFrontRightCalibrated { timeStamp value } windowRearLeftCalibrated { timeStamp value } windowRearRightCalibrated { timeStamp value } windowsNextAction { timeStamp value } closureFrunkLocked { timeStamp value } closureFrunkClosed { timeStamp value } closureFrunkNextAction { timeStamp value } gearGuardLocked { timeStamp value } closureLiftgateLocked { timeStamp value } closureLiftgateClosed { timeStamp value } closureLiftgateNextAction { timeStamp value } windowRearLeftClosed { timeStamp value } windowRearRightClosed { timeStamp value } closureSideBinLeftLocked { timeStamp value } closureSideBinLeftClosed { timeStamp value } closureSideBinRightLocked { timeStamp value } closureSideBinRightClosed { timeStamp value } closureSideBinLeftNextAction { timeStamp value } closureSideBinRightNextAction { timeStamp value } closureTailgateLocked { timeStamp value } closureTailgateClosed { timeStamp value } closureTailgateNextAction { timeStamp value } closureTonneauLocked { timeStamp value } closureTonneauClosed { timeStamp value } wiperFluidState { timeStamp value } powerState { timeStamp value } batteryHvThermalEventPropagation { timeStamp value } twelveVoltBatteryHealth { timeStamp value } vehicleMileage { timeStamp value } brakeFluidLow { timeStamp value } gearStatus { timeStamp value } batteryLevel { timeStamp value } chargerState { timeStamp value } batteryLimit { timeStamp value } remoteChargingAvailable { timeStamp value } batteryHvThermalEvent { timeStamp value } rangeThreshold { timeStamp value } distanceToEmpty { timeStamp value } otaAvailableVersionGitHash { timeStamp value } otaAvailableVersion { timeStamp value } otaCurrentVersionGitHash { timeStamp value } otaCurrentVersion { timeStamp value } otaDownloadProgress { timeStamp value } otaInstallDuration { timeStamp value } otaInstallProgress { timeStamp value } otaInstallReady { timeStamp value } otaInstallTime { timeStamp value } otaInstallType { timeStamp value } otaStatus { timeStamp value } otaCurrentStatus { timeStamp value } cabinClimateInteriorTemperature { timeStamp value } cabinPreconditioningStatus { timeStamp value } cabinPreconditioningType { timeStamp value } petModeStatus { timeStamp value } petModeTemperatureStatus { timeStamp value } cabinClimateDriverTemperature { timeStamp value } gearGuardVideoStatus { timeStamp value } gearGuardVideoMode { timeStamp value } gearGuardVideoTermsAccepted { timeStamp value } defrostDefogStatus { timeStamp value } steeringWheelHeat { timeStamp value } seatFrontLeftHeat { timeStamp value } seatFrontRightHeat { timeStamp value } seatRearLeftHeat { timeStamp value } seatRearRightHeat { timeStamp value } chargerStatus { timeStamp value } seatFrontLeftVent { timeStamp value } seatFrontRightVent { timeStamp value } chargerDerateStatus { timeStamp value } driveMode { timeStamp value } serviceMode { timeStamp value } trailerStatus { timeStamp value } btmFfHardwareFailureStatus { timeStamp value } btmIcHardwareFailureStatus { timeStamp value } btmLfdHardwareFailureStatus { timeStamp value } btmRfHardwareFailureStatus { timeStamp value } btmRfdHardwareFailureStatus { timeStamp value } carWashMode { timeStamp value } chargePortState { timeStamp value } chargingTimeEstimationValidity { timeStamp value } limitedAccelCold { timeStamp value } limitedRegenCold { timeStamp value } rearHitchStatus { timeStamp value } }
 

Jiji

Well-Known Member
First Name
Rick
Joined
Jun 21, 2023
Threads
11
Messages
160
Reaction score
228
Location
Finger Lakes, NY
Website
github.com
Vehicles
Rivian Blue R1S
Anyways, for anyone doing API debugging, here are all the app queries I could find, lots of interesting/undocumented stuff here. I figure someone needs this to pop up in google.
Thanks, I have a Swift playground for trying out API endpoints so will start trying out some of these, the ‘twelveVoltBatteryHealth’ is new and interesting to check out.

Not sure how you got these but looks like a goldmine to explore.
 

Sponsored

edman007

Well-Known Member
First Name
Ed
Joined
Aug 10, 2022
Threads
0
Messages
99
Reaction score
96
Location
New York
Vehicles
CY R1S
Not sure how you got these but looks like a goldmine to explore.
Download the APK with adb, unzip the APK, run strings on the dex files, and egrep the output. I still got a lot of stuff to look at...but that was the easy part. I think I need to learn graphql...
 

Jiji

Well-Known Member
First Name
Rick
Joined
Jun 21, 2023
Threads
11
Messages
160
Reaction score
228
Location
Finger Lakes, NY
Website
github.com
Vehicles
Rivian Blue R1S
Download the APK with adb, unzip the APK, run strings on the dex files, and egrep the output. I still got a lot of stuff to look at...but that was the easy part. I think I need to learn graphql...
I play on iOS and that would be my next try with the iPhone Rivian app IPA file. Everything appears easier on Android, such as unpinning the Rivian app certificate to use mitmproxy but that is way over my skill level.
 

p31d3ng

New Member
Joined
Feb 20, 2024
Threads
0
Messages
1
Reaction score
0
Location
CA
Vehicles
R1T
This is awesome! I'm trying to search for API to change charging limit and found this post...it's a gold mine for me, thanks folks! I'll dig into the APK and find that API now lol
 

the_mace

Well-Known Member
First Name
Rob
Joined
Apr 8, 2022
Threads
10
Messages
368
Reaction score
304
Location
Boston, MA
Vehicles
Tesla Model S75D, Ford F350 Diesel, Mercedes GLC30
Occupation
CTO
Yeah I usually do something like this:
Bash:
https://apkcombo.com/rivian/com.rivian.android.consumer/download/apk
brew install apktool
apktool d Rivian*.apk
egrep -r 'const-string p0, "query .[^\(]*\(' Rivian*com|cut -d'(' -f1|cut -d '"' -f2|cut -d ' ' -f2
 

jonno317

New Member
Joined
Feb 29, 2024
Threads
0
Messages
2
Reaction score
1
Location
Colorado
Vehicles
R1S
Anyone been able to successfully call one of the graphql subscription endpoints?

I have the mutations/queries working no problem from postman, but for some reason the subscriptions aren't cooperating.
 

Sponsored

jrgutier

Member
First Name
Jose
Joined
Apr 4, 2022
Threads
0
Messages
21
Reaction score
16
Location
Oklahoma City, OK
Vehicles
Rivian R1T
Clubs
 

jonno317

New Member
Joined
Feb 29, 2024
Threads
0
Messages
2
Reaction score
1
Location
Colorado
Vehicles
R1S
You need to do it with a websocket. See how https://pypi.org/project/rivian-python-client/ does it.
I was just digging into that one. Didn't realize there was a separate authorized init call in addition to being a different URL for the subscriptions than the rest of the graphql gateway.

Got it all working now except that a couple fields (such as location) seem to constantly be null.
Sponsored

 
 




Top