The integration with TextLocate allows for sending and receiving text messages and location information to and from Drivers moving a Load. Tracking Loads may be completed using TextLocate or combined with other Load tracking integrations like MacroPoint or Trucker Tools.
Setup
Complete the following steps for configuring the integration with TextLocate to send and receive messages to Drivers.
Enable the TextLocate integration by completing the following steps:
Navigate to TMS Admin.
Select Credentials.
Choose the Global Services tab.
Find TextLocate in the list and open the card.
Check the Enabled box.
Enter the User ID text field.
The value entered into the User ID field is the Public Key portion of the Public-Private Key pair.
This value is provided by TextLocate.
Enter the Password 1 text field.
The value entered into the Password 1 field is the Private Key portion of the Public-Private key pair.
The Public-Private Key pair is provided by TextLocate.
Check the Receive Updates box.
This field enables the TMS Listener and creates the callback endpoint.
Click the Save button when finished.
When the subscription with TextLocate is completed successfully, the Callback Endpoint Created field is Checked automatically. If the TextLocate are changed a new webhook subscription must be created.
Uncheck Receive Updates field the to delete the old webhook.
Click Save on the TextLocate credentials card.
Check the Receive Updates field.
Click Save on the credentials card to create a new webhook subscription.
User ID | Password 1 | Password 2 | Customer Number |
---|---|---|---|
Public Key | Private Key |
The Queued Transaction must be running to perform some actions with the TextLocate integration.
TextLocate may send multiple tracking location updates. In order to process all location updates, TextLocate does not follow the Tracking Update Frequency field setting on TMS Admin → Configuration.
Add the TextLocate LWC to the Load Lightning Record Page where desired. The default Revenova Load Lightning Record Page includes a tab with the component.
Create an API user
Create an API User for the TextLocate integration.
Multiple integrations may require an API User. If an API User already exists in an org., use the existing API User.
Navigate to Setup and then search for and click the Users link.
Click the New User button and add the following:
First Name: API
Last Name: User (The First and Last Name fields may be any value, but should reference the API User for clarity.)
Email: Set to the system admin’s email.
Username: Change if necessary.
User License: Salesforce Integration
Profile: Minimum Access - API Only Integrations
Click Save.
If necessary, update the Permission Set for the API user.
The API User requires a TMS license. If creating an API User for the first time, assign a TMS license to the API User.
See Salesforce documentation for additional information on creating API Users.
Remote Site Settings
If upgrading from a previous release of the TMS, check that the Remote Site Settings for the TextLocate integration URL are up to date.
Click the Setup gear icon in the top right corner.
From the drop-down, click Setup.
In the Quick Find Toolbar type Remote Site Settings and click the link.
From the list of remote sites find TextLocate and click the Edit link.
Update the Remote Site URL to match the Service URL below.
Service URL: https://api.textlocate.com
Test Service URL: https://api.textlocate.com
Profiles/Permissions
Add the following permissions to the profiles/permissions sets for users performing the following actions.
Navigate to Setup → Home and search for Permission Sets.
Select the appropriate permission set(s).
Add full object and field permissions (including Read/Edit Access) for the following objects.
Text Message
Users require access to view text messages.
Ping Schedule
Users require access to create a schedule of ping requests.
Message Prompts
Configure the settings and message prompts a Driver receives from the TextLocate website.
It is recommended to Uncheck the Ask for In/Out Time on Pickup and Delivery setting on the TextLocate settings page. This removes the prompt to Drivers to upload the Proof of Delivery document via the phone web browser. The TMS integration with TextLocate does not support this feature.
The Load ID is sent to TextLocate to reference the updates for each Load.
The Load Number field is sent in the TextLocate “Custom Field 2.” For automated responses, use the “Custom Field 2” tag to include the Load Number.
An example message is shown below.
Load Page Layout
The TextLocate component is found on the default Revenova Load Lightning Record page. If using a custom Load page, add the component where desired.
Send text messages to and request location updates from the Driver on the Load.
Enter the Driver Name and Driver Phone fields to the Load detail section.
Choose the Upload Load to TextLocate button on the TextLocate tab.
TextLocate LWC
The TextLocate component contains the Driver Name and Driver Phone displayed in the top left. The buttons in the top right perform the following actions.
Keep Refreshing: Click this button to continuously listen for incoming messages while viewing the LWC.
Messages refresh and appear when returning to the LWC from other tabs or Loads.
Refresh: Click this button to refresh any new messages, images, or location updates from the Driver.
Drivers must send images via text message and not through the phone browser.
Update Driver Phone: Enter new field values on the Load Detail section for the Driver Name and/or Driver Phone. Click this button to update the fields with TextLocate.
Toggle Text Events: When the button is selected (blue background), location updates and text messages are displayed in the component.
Unselect the button (gray background) to only display text messages in the component.
Send Location Request: This button sends a link to the Driver’s phone requesting the current location in the phone’s browser.
A Load may only have one phone number associated with it. Messages cannot be sent to multiple phone numbers.
Enter messages from the Text tab and click the Send button to send the message to the Driver.
Messages to the Driver appear in a blue field. Response messages from the Driver appear in a gray field. Additional message appear in the component confirming that a file was received from the Driver.
Images sent by the Driver are stored on the Load in the Files & Attachment section on the Documents tab.
All files received from the Driver are saved as images to the Load.
Location Requests
Location requests are displayed in the text tab. The Load location is set according to the location received from the Driver. An example of the request the Driver receives is shown below.

Schedule Requests
Location requests may be scheduled in advance for Drivers to automatically receive location requests. These requests may be set on intervals set on the component.
Select the Schedule tab on the component.
Enter values in the Start Date and End Date and Times.
Add the Interval (Hours) to set the frequency requests are sent to the Driver.
Include Quiet Time Start and End times to prevent Drivers from receiving request updates in the scheduled period.
TextLocate supports quiet time durations between 2 and 24 hours.
A reminder message is sent when a Driver does not respond to a location request within an hour. These reminder messages do not follow the Quiet Time settings.
Loads may also be tracked with TextLocate from the Load Tracking Administration modal on the Carrier Banner.
Enter fields on the Load Tracking Administration modal first. These values automatically populate into the TextLocate LWC. Stop Status updates are based on the geolocation of the driver.
The Driver Phone, Driver Name, and Start Day fields populate automatically. The Start Day and Start Time are set according to the first Stop Appointment Time or Shipping/Receiving Hours.
Enter a Timezone and select a Tracking Update Interval (in hours).
The Quiet Time Start and End fields control when Drivers do not receive location update requests. Enter values as necessary.
Load locations update based on the following cases.
Two Stop Loads (1 pickup, 1 delivery)
When a Driver sends a status of At Pickup, Stop 1 is updated.
The Arrived Date and Time for Stop 1 is set to the current date.
The Stop Status is set to Arrived.
When a Driver sends a status of Delivered, the last Stop is updated.
The Stop Departed Date and Time fields are set.
The Stop Status is set to Departed.
Multi-Stop Loads
TextLocate does not include the Stop Number when sending location updates from Drivers. Additional TMS logic is used to determine the current stop.
When a Driver sends a status of At Pickup, Stop 1 is updated.
The Arrived Date and Time for Stop 1 is set to the current date.
The Stop Status is set to Arrived.
When a Driver sends a status of Delivered, the last Stop is updated.
The Stop Departed Date and Time fields are set.
The Stop Status is set to Departed.
For multi-Stop Loads, when a Driver submits a status of At Pickup or Delivered, the appropriate Stop is determined by matching the Driver location to the Stop. Locations are not matched to Stops in the following scenarios.
Location Mismatches
Driver locations are matched to Stops based on the following criteria.
In cases when a location update does not match to a stop, the Stop Pickup and Delivery Date/Time and Status fields do not update.
Stop location matches are based on the Country, City, and State when a Stop has an Address.
Stop location matches are based on Geolocation and the Driver must be within a 1 mile radius of the coordinates.
When location mismatches occur and Stop information is not updated, the Load Last Reported Location field does update.
Time Zones
The following logic is used to determine the time zone for a Stop location.
Time Zones are first set based on the Stop object Timezone field.
The Stop location Account Timezone field is confirmed to match the Stop Timezone.
If one or both fields do not contain a value for a time zone, GMT is used for the Stop Departure Date.
In Transit Updates
In Transit updates are updated according to the Last Reported Location logic. The location of the Driver phone browser is used to update the Last Reported Location. When location updates are received in the TMS, the text tab displays that information.
The Stop Miles Away field is updated when an In Transit update is received from the Driver.
Location updates received from the Driver trigger the following customer tracking updates.
Text messages and/or location updates may appear multiple times in the TextLocate LWC. This is due to TextLocate sending multiple status updates when a Driver performs certain actions with the TextLocate link.
API Calls
Performing actions in the TextLocate LWC initiates calls to the TextLocate end points. See individual the individual calls below for information required to send and/or receive in each API call.
Login
The Login Operation sends the org credentials to TextLocate.
TMS Action | TextLocate Endpoint | Request Type | Response |
---|---|---|---|
Login | Authenticate | POST | 200: Success |
No TMS fields are sent in the Login request.
No TMS fields are updated from the Login response.
Session tokens are returned in the response.
Subscribe
The Subscribe operation subscribes to a webhook to receive message updates from TextLocate.
TMS Action | TextLocate Endpoint | Request Type | Response |
---|---|---|---|
Webhook/subscribe | POST | 200: Success |
TMS fields sent in the Subscribe request.
Object | Field | Type | TextLocate Field |
---|---|---|---|
TMS Admin → Configuration | Inbound API Community URL | URL | receivingUrl |
No TMS fields updated from the Subscribe response.
Get Subscriptions
The Get Subscriptions Operation returns a list of active webhook subscriptions from TextLocate.
TMS Operation | TextLocate Endpoint | Request Type | Response |
---|---|---|---|
Webhook | GET | 200: Success |
No TMS fields sent in the Get Subscriptions request.
No TMS fields are updated in the Get Subscriptions response.
Upload Load
The Upload Load Operation sends the Load to TextLocate for messaging.
TMS Operation | TextLocate Endpoint | Request Type | Response |
---|---|---|---|
Load Tracking Administration LWC On button; | Load | POST | 200: Success |
TMS Fields sent in the Upload Load request.
Object | Field | Type | TextLocate Field |
---|---|---|---|
“Upload” | action | ||
“Standard” | messageService | ||
Load | Driver Name | Text(50) | firstName |
Load | Driver Name | Text(50) | lastName |
Load | Driver Phone | Phone | phoneNumber |
Load | Load Number | Name | custom2 |
Load | SFID | SFID | loadId |
Stop | (Last Stop) Address | Formula (Text) | destinationAddress |
Stop | (First Stop) Address | Formula (Text) | originAddress |
Stop | (Last Stop) Expected Date | Date | destinationTime |
Stop | (First Stop) Expected Date | Date | originTime |
Time zones are determined for each Stop based on the following logic.
Stop object record.
Stop location Account time zone.
Noon GMT (Salesforce default).
TMS field updates from the Upload Load response.
Object | Field | Type | TextLocate Field |
---|---|---|---|
Load | Text Messaging Id | Text(20) | textLocateId |
Sample Request Payload
{
"loadId": "a1zEc000001BsVxIAK",
"phoneNumber": "2223334444",
"firstName": "Test",
"lastName": "Driver",
"custom2": "L-16",
"action": "Upload",
"messageService": "Standard",
"originAddress": "2333 Waukegan Rd., Bannockburn, Illinois 60015",
"originTime": "2025-05-09T12:00:00Z",
"destinationAddress": "415 W. Ocean Blvd, Long Beach, California 90802",
"destinationTime": "2025-05-13T12:00:00Z"
}
Sample Response Payload
{
"driver": {
"driverId": 1489075,
"phoneNumber": "+12223334444",
"whatsAppConversationExpiration": "0001-01-01T00:00:00",
"whatsappConversationStatus": 0,
"language": "en",
"validationErrors": null,
"lastValidation": "2025-04-30T02:02:23.646309Z",
"validationService": 0,
"type": "mobile",
"carrierName": "Verizon Wireless",
"mobileCountryCode": 310,
"mobileNetworkCode": 12,
"isoCountryCode": "US"
},
"textlocateId": 7516494,
"loadId": "a1zEc000001BsVxIAK",
"phoneNumber": "+12223334444",
"firstName": "Test",
"lastName": "Driver",
"custom2": "L-16",
"custom3": "",
"enabled": true,
"customerId": 1566,
"userId": 0,
"lastInteraction": "2025-05-06T13:53:00.091833Z",
"created": "2025-05-06T13:53:00.091833Z",
"pingStatus": -1,
"loadsCount": 0,
"hasHistory": false,
"driverId": 1489075,
"messageService": "Standard",
"metaData": null,
"latestPingId": null,
"latestSmsId": null,
"latestWhatsappId": null,
"latestSmsImageId": null,
"assignError": null,
"highwayStatus": null,
"originAddress": null,
"originCity": null,
"originState": null,
"originZip": null,
"originLat": null,
"originLong": null,
"originTime": null,
"destinationAddress": null,
"destinationCity": null,
"destinationState": null,
"destinationZip": null,
"destinationLat": null,
"destinationLong": null,
"destinationTime": null,
"notes": ""
}
Send SMS
The Send SMS operation sends a text message to the Driver phone number assigned to the Load.
TMS Operation | TextLocate Endpoint | Request Type | Response |
---|---|---|---|
Send button in the TextLocate LWC | Message | POST | 200: Success |
Fields sent in the Send SMS request.
Object | Field | Type | TextLocate Field |
---|---|---|---|
Text Message | Body | Long Text Area(1024) | body |
Sample Request Payload
{
"body": "Test Message",
"textlocateId": "7516494"
}
No TMS fields received in the Send SMS response are updated.
Inbound SMS Messages
Text messages are received from Drivers and processed as platform events.
The SmsId field indicates that a message is a text message.
The Text Message Type field is set to Text Message when a message is received and Event when an image is received.
TMS Field updates from incoming SMS Messages.
Object | Field | Type | TextLocate Field |
---|---|---|---|
Payload | |||
SmsId | |||
Timestamp | |||
Load | SFID | SFID | loadId |
Load | Text Messaging Id | Text(20) | textLocateId |
Queued Transaction | Payload 1 | Long Text Area(130,000) | twilioMedia |
Text Message | Author | Text(100) | driverName |
Text Message | *Body | Long Text Area(1024) | body |
Text Message | **From Driver | Checkbox | fromTL |
Text Message | Load | Lookup(Load) | loadId, textLocateId |
Text Message | Type | Picklist | Set by the TMS. |
*When the body of the text is more than the 1024 character limit, the message body is split into multiple text messages.
**Always Checked.
Sample Response (from Driver) Payload
{
"smsId": 0,
"to": "+12223334444",
"from": "+18883460804",
"body": "Test Message",
"fromTL": true,
"timestamp": "2025-05-06T14:21:54.8042764Z",
"textlocateId": 7516494,
"loadId": "a1zEc000001BsVxIAK",
"twilioMedia": null,
"unreadCount": 0,
"tagID": null,
"translateData": null,
"driverName": "Test",
"userName": "",
"userEmail": null,
"driver": {
"driverId": 1489075,
"phoneNumber": "+12223334444",
"whatsAppConversationExpiration": "0001-01-01T00:00:00",
"whatsappConversationStatus": 0,
"language": "en",
"validationErrors": null,
"lastValidation": "2025-04-30T02:02:23.646309Z",
"validationService": 0,
"type": "mobile",
"carrierName": "Verizon Wireless",
"mobileCountryCode": 310,
"mobileNetworkCode": 12,
"isoCountryCode": "US"
},
"hasImages": false
}
Send Schedule
The Send Schedule operation sends multiple scheduled messages or ping requests over a period of time. The frequency is set in the TextLocate LWC.
TMS Operation | TextLocate Endpoint | Request Type | Response |
---|---|---|---|
Send Schedule to TextLocate button in the TextLocate LWC. | MultipleScheduledMessages | POST | 200: Success |
TMS fields sent in the Send Schedule request.
Object | Field | Type | TextLocate Field |
---|---|---|---|
Load | Text Messaging Id | Text(20) | textlocateId |
Ping Schedule | End Date | Date/Time | endDate |
Ping Schedule | Interval (Hours) | Number(2, 0) | cadenceInHours |
Ping Schedule | Quiet Time End | Time | quietTimeEnd |
Ping Schedule | Quiet Time Start | Time | quietTimeStart |
Ping Schedule | Start Date | Date/Time | startDate |
“True” when Quiet Time Start and End have values. | quietHoursEnabled | ||
“PING” | messageType |
No TMS fields received in the Send Schedule response are updated.
Sample Request Payload
{
"startDate": "2025-05-09T14:35:00.000Z",
"endDate": "2025-05-14T20:30:00.000Z",
"textlocateId": "7574274",
"cadenceInHours": 2,
"quietHoursEnabled": true,
"quietTimeStart": "2025-05-09T23:30:00.000Z",
"quietTimeEnd": "2025-05-09T11:00:00.000Z",
"messageType": "PING"
}
Sample Response Payload
[
{
"scheduledMessageId": 256760926,
"when": "2025-05-09T14:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073973Z"
},
{
"scheduledMessageId": 256760927,
"when": "2025-05-09T16:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073975Z"
},
{
"scheduledMessageId": 256760928,
"when": "2025-05-09T18:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073976Z"
},
{
"scheduledMessageId": 256760929,
"when": "2025-05-09T20:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073976Z"
},
{
"scheduledMessageId": 256760930,
"when": "2025-05-09T22:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073977Z"
},
{
"scheduledMessageId": 256760931,
"when": "2025-05-10T00:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073978Z"
},
{
"scheduledMessageId": 256760932,
"when": "2025-05-10T02:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073978Z"
},
{
"scheduledMessageId": 256760933,
"when": "2025-05-10T04:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073979Z"
},
{
"scheduledMessageId": 256760934,
"when": "2025-05-10T06:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073979Z"
},
{
"scheduledMessageId": 256760935,
"when": "2025-05-10T08:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.907398Z"
},
{
"scheduledMessageId": 256760936,
"when": "2025-05-10T10:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073981Z"
},
{
"scheduledMessageId": 256760937,
"when": "2025-05-10T12:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073981Z"
},
{
"scheduledMessageId": 256760938,
"when": "2025-05-10T14:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073982Z"
},
{
"scheduledMessageId": 256760939,
"when": "2025-05-10T16:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073982Z"
},
{
"scheduledMessageId": 256760940,
"when": "2025-05-10T18:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073983Z"
},
{
"scheduledMessageId": 256760941,
"when": "2025-05-10T20:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073983Z"
},
{
"scheduledMessageId": 256760942,
"when": "2025-05-10T22:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073984Z"
},
{
"scheduledMessageId": 256760943,
"when": "2025-05-11T00:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073984Z"
},
{
"scheduledMessageId": 256760944,
"when": "2025-05-11T02:35:00Z",
"lastMarkedToSend": null,
"textlocateId": 7574274,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 63,
"messageType": "Ping",
"attachments": null,
"createdAt": "2025-05-09T14:39:11.9073985Z"
}
]
Incoming Location Update(s) from Driver (Platform Event)
The PingId field indicates a message is a location update.
The Text Message Type field is set to Text Message when a message is received and Event when an image is received.
TMS field updates from incoming Location Updates.
Object | Field | Type | TextLocate Field |
---|---|---|---|
Payload | |||
PingId | |||
Timestamp | |||
Load | *Last Reported City | Text(40) | Latitude, Longitude |
Load | *Last Reported Country | Picklist | Latitude, Longitude |
Load | Last Reported Geolocation | Geolocation | Latitude, Longitude |
Load | *Last Reported State/Province | Picklist | Latitude, Longitude |
Load | Last Tracking Update | Date/Time | Set to Date/Time Now by the TMS. |
Load | Last Tracking Update Source | Text(50) | Set to “TextLocate” by the TMS. |
Load | Load Status | Picklist | **Set to “Dispatched” by the TMS. |
Load | Load Status Comments | Text(255) | LongAddress |
Load | SFID | SFID | loadId |
Load | Text Messaging Id | Text(20) | textLocateId |
Stop | Arrival Date | Date | Today’s Date |
Stop | Arrival Time | Text(5) | Time update received set in the Stop time zone. |
Stop | Carrier Status as of | Date/Time | Set to Date/Time Now by the TMS. |
Stop | Carrier Status Comments | Text(255) | Set to “Location Update: City, State” by the TMS. |
Stop | Departure Date | Date | Today’s Date |
Stop | Departure Time | Text(5) | Time update received set in the Stop time zone. |
Stop | Kilometers Away | Number(10, 3) | Calculated by the TMS. |
Stop | Miles Away | Number(10, 3) | Calculated by the TMS. |
Stop | Stop Status | Picklist | UpdateStatus |
Text Message | Author | Text(100) | driverName |
Text Message | Body | Long Text Area(1024) | ShortAddress, LongAddress, Latitude, Longitude |
Text Message | ***From Driver | Checkbox | fromTL |
Text Message | Load | Lookup(Load) | loadId, textLocateId |
Text Message | Type | Picklist | Set by the TMS. |
*City, State, and Country values are calculated with reverse geolocation code lookup with PC Miler.
**Load Status must be first set to Assigned to update to Dispatched.
***Always Checked.
Arrival/Departure Dates/Times are set based on the Text Message created date and time.
Send Ping Request
The Send Ping Request operation schedules a message or location update request to send to a Driver for a Load.
TMS Operation | TextLocate Endpoint | Request Type | Response |
---|---|---|---|
Send Ping Request | Schedulemessage | POST | 200: Success |
TMS fields sent in the Send Ping Request request.
Object | Field | Type | TextLocate Field |
---|---|---|---|
Load | Text Messaging Id | Text(20) | textlocateId |
“PING” | messageType | ||
Datetime 1 minute after button press | when |
No TMS field updates from the Send Ping Request response.
Sample Request Payload
{
"scheduledMessageId": 256712568,
"when": "2025-05-06T21:01:02.002Z",
"lastMarkedToSend": null,
"textlocateId": 7516494,
"userId": 0,
"textMessage": null,
"scheduledMessageCount": 0,
"messageType": "Ping",
"attachments": null,
"createdAt": "0001-01-01T00:00:00"
}
Inbound Location Update
Location updates are received from Drivers and processed as platform events.
Sample Location Update Payload
{
"Timestamp": "2025-05-06T21:04:44.4986546Z",
"Payload": {
"Custom1": "Driver",
"Custom2": "L-16",
"Custom3": "",
"MetaData": null,
"Driver": {
"DriverId": 1489075,
"PhoneNumber": "u002B11112223333",
"WhatsAppConversationExpiration": "0001-01-01T00:00:00",
"WhatsappConversationStatus": 0,
"Language": "en",
"ValidationErrors": null,
"LastValidation": "2025-04-30T02:02:23.646309Z",
"ValidationService": 0,
"Type": "mobile",
"CarrierName": "Verizon Wireless",
"MobileCountryCode": 310,
"MobileNetworkCode": 12,
"IsoCountryCode": "US"
},
"Origin": {
"Address": "2333 Waukegan Rd., Bannockburn, Illinois 60015",
"City": null,
"State": null,
"Zip": null,
"Latitude": null,
"Longitude": null,
"Time": "2025-05-09T12:00:00Z"
},
"Destination": {
"Address": "415 W. Ocean Blvd, Long Beach, California 90802",
"City": null,
"State": null,
"Zip": null,
"Latitude": null,
"Longitude": null,
"Time": "2025-05-13T12:00:00Z"
},
"PingId": 8806863,
"Latitude": 41.8817113,
"Longitude": -87.6334587,
"PingTime": "2025-05-06T21:01:02",
"ResponseTime": "2025-05-06T21:04:34",
"LoadId": "a1zEc000001BsVxIAK",
"HasHistory": false,
"TextlocateId": 7516494,
"ShortAddress": "Chicago, IL 60603",
"LongAddress": "189 W Madison St, Chicago, IL 60602, USA",
"Status": 0,
"UserId": 0,
"ScheduledMessageId": 256712568,
"UpdateStatus": "InTransit",
"DriverId": 1489075,
"InTime": null,
"OutTime": null,
"FromIntegration": false,
"IntegrationSource": null
}
}
Update Driver Phone
The Update Driver operation sends updated Driver Name and/or Phone field information to TextLocate.
TMS Operation | TextLocate Endpoint | Request Type | Response |
---|---|---|---|
Update Driver Phone button on TextLocate LWC | Load/updateDriver | POST | 200: Success |
TMS fields sent in the Update Driver Phone request.
Object | Field | Type | TextLocate Field |
---|---|---|---|
Load | Driver Name | Text(50) | firstName |
Load | Driver Phone | Phone | phoneNumber |
Load | Text Messaging Id | Text(20) | textLocateId |
Sample Request Payload
{
"textlocateId": "7516494",
"phoneNumber": "2223334444",
"firstName": "Another Driver"
}
No TMS fields are updated from the Update Driver Phone response.
Sample Response Payload
true
Get Image
The Get Image operation retrieves an image stored on external servers. These images are sent by drivers from the messaging conversation. The server URL for image storage locations is included when Driver’s send images. The image is saved from the server URL and added to the Load.
Image files are stored on the Load Documents tab.
TMS Operation | TextLocate Endpoint | Request Type | Response |
---|---|---|---|
Get Images (No TMS action) | (NO API ENDPOINT) | GET | 200: Success |
No TMS Fields are sent in the Get Image call request.
No TMS fields are updated from the Get Image call response.
Delete Ping Schedule
The Delete Ping Schedule operation removes all scheduled messages and ping requests for a single Load.
TMS Operation | TextLocate Endpoint | Request Type | Response |
---|---|---|---|
Remove Carrier button on the Carrier Banner LWC. | ScheduledMessage | DELETE | 200: Success |
TMS fields sent in the Delete Ping Schedule request.
Object | Field | Type | TextLocate Field |
---|---|---|---|
Load | Text Messaging Id | Text(20) | textlocateId |
Sample Request URL
https://api.textlocate.com/ScheduledMessage?scheduledMessageId=12345
No TMS fields are updated from the Delete Ping Schedule call response.
Unsubscribe
The Unsubscribe operation deletes a webhook subscription based on the subscription id received in the Get Subscriptions request.
TMS Operation | TextLocate Endpoint | Request Type | Response |
---|---|---|---|
Unsubscribe | Webhook | DELETE | 200: Success |
TMS fields sent in the Unsubscribe request.
Object | Field | Type | TextLocate Field |
---|---|---|---|
webhookSubscriptionId |
No TMS fields are updated from the Unsubscribe response.
Field Reference Table
The following table relates TMS fields with the equivalent fields included in TextLocate API calls.
Object | Field | Type | TextLocate Field |
---|---|---|---|
“Upload” | action | ||
“Standard” | messageService | ||
“PING” | messageType | ||
“True” when Quiet Time Start and End have values. | quietHoursEnabled | ||
Payload | |||
PingId | |||
SmsId | |||
Timestamp | |||
webhookSubscriptionId | |||
Datetime 1 minute after button press | when | ||
Load | Driver Name | Text(50) | firstName |
Load | Driver Name | Text(50) | lastName |
Load | Driver Phone | Phone | phoneNumber |
Load | SFID | SFID | loadId |
Load | Last Reported City | Text(40) | Latitude, Longitude |
Load | Last Reported Country | Picklist | Latitude, Longitude |
Load | Last Reported Geolocation | Geolocation | Latitude, Longitude |
Load | Last Reported State/Province | Picklist | Latitude, Longitude |
Load | Last Tracking Update | Date/Time | Set to Date/Time Now by the TMS. |
Load | Last Tracking Update Source | Text(50) | Set to “TextLocate” by the TMS. |
Load | Load Number | Name | custom2 |
Load | Load Status | Picklist | **Set to “Dispatched.” |
Load | Load Status Comments | Text(255) | LongAddress |
Load | Text Messaging Id | Text(20) | textLocateId |
Ping Schedule | End Date | Date/Time | endDate |
Ping Schedule | Interval (Hours) | Number(2, 0) | cadenceInHours |
Ping Schedule | Quiet Time End | Time | quietTimeEnd |
Ping Schedule | Quiet Time Start | Time | quietTimeStart |
Ping Schedule | Start Date | Date/Time | startDate |
Queued Transaction | Payload 1 | Long Text Area(130,000) | twilioMedia |
Stop | Arrival Date | Date | Today’s Date |
Stop | Arrival Time | Text(5) | Time update received in the Stop time zone. |
Stop | Carrier Status as of | Date/Time | Set to Date/Time Now by the TMS. |
Stop | Carrier Status Comments | Text(255) | Set to “Location Update: City, State” by TMS. |
Stop | Departure Date | Date | Today’s Date. |
Stop | Departure Time | Text(5) | Time update received in the Stop time zone. |
Stop | Kilometers Away | Number(10, 3) | Calculated by the TMS. |
Stop | (Last Stop) Address | Formula (Text) | destinationAddress |
Stop | (First Stop) Address | Formula (Text) | originAddress |
Stop | (Last Stop) Expected Date | Date | destinationTime |
Stop | (First Stop) Expected Date | Date | originTime |
Stop | Miles Away | Number(10, 3) | Calculated by the TMS. |
Stop | Stop Status | Picklist | UpdateStatus |
Text Message | Author | Text(100) | driverName |
Text Message | Body | Long Text Area(1024) | body |
Text Message | From Driver | Checkbox | fromTL |
Text Message | Load | Lookup(Load) | loadId, textLocateId |
Text Message | Type | Picklist | Set by the TMS. |
TMS Admin → Configuration | Inbound API Community URL | URL | receivingUrl |