Introduction
The Macropoint Capacity tool is a sophisticated capability to show which carriers would be best suited to transport a specific load. This information is provided by reviewing aggregate load delivery information to determine which carriers have a greater affinity for a particular lane, and also which carriers may be within the best proximity of the shipper to allow for the best match of aligned route planning.
Function Overview
The typical use case for Macropoint Capacity involves several steps. First - selected Carriers (or all Carriers) are sent from Revenova to Macropoint. Typically we would set up a flow to send this data once a carrier has been vetted and approved.
Once a Load is set up in Revenova - the Load is sent to Macropoint Capacity. Typically, we would set up a flow to automatically transmit the Load to Macropoint whenever the Load needs to be covered.
Users can then execute (or automation can execute) the Find Power, Single Carrier Statistics, and Lane History Search - Single Carrier Statistics functions. The Find Power function identifies a list of potential Carrier matches (ranked by best match). Once the top matches are identified, users can request detailed information about the Carrier and the Lane History of that carrier - including Tripsheets if desired.
Once the user has investigated the Capacity data, and made a determination of which Carrier they want to Offer, the user can submit an Offer from Salesforce to Macropoint. As details are updated on the load within Macropoint, those details are pulled down into Salesforce, including Accept and Rescind. Any additional status updates that occur in Macropoint are sent to Salesforce via Callback.
Implementation Strategy
The typical implementation strategy for this connector is to set up automation on Carriers and Loads - once these records are complete - you can send these to Macropoint Capacity. The Find Power function can either be automatically invoked, or manually invoked via Universal Action Component. This will depend on whether you want to take the Load and perform the Find Power function (e.g. if you already have a Carrier contract or have already determined coverage for the Load). When you execute the Find Power function - you will pull back many records (sometimes up to 100 potential Carrier candidates). Pulling this much data all the time can cause excessive data element storage issues in Salesforce - so this feature should be utilized with discretion.
Once you have pulled the Carrier candidates using Find Power,
Implementation Instructions - Capacity Check
Carrier Import
Typically - this API is set up via automation - where we invoke the Carrier Import send to Macropoint once the Carrier has been vetted and is in an Active state. The business rules for when it is appropriate to send the Carrier to Macropoint Capacity will be at the discretion of the customer. Map the Outbound fields from your Carrier record (typically Account). You'll need to create two fields on your Salesforce Account to accommodate the return response from Macropoint.
| ExecutionTime | Text (10) |
| Success | Boolean |
Load Import
Typically - this API is set up via automation - where we invoke the Load Import send to Macropoint once the Load has been input and is ready to be covered. The business rules for when it is appropriate to send the Load to Macropoint Capacity will be at the discretion of the customer. Map the Outbound fields from your Load / Lane record. You'll need to create two fields on your Salesforce Load/Lane to accommodate the return response from Macropoint.
| ExecutionTime | Text (10) |
| Success | Boolean |
Find Power
The next function to set up is the Find Power function. This requires the creation of a new object in Salesforce to store this data. Create a new object called "Find Power" in Salesforce and make this record a master/detail record underneath the "Load" object. The Find Power function can be invoked either manually (via use of the Universal Action Component, or creation of a Salesforce Button), or it can be invoked via automation via Flow or Trigger. The business rules for when (and how) it is appropriate to invoke the Find Power function will be at the discretion of the customer. Map the Outbound fields from the Load/Lane record and map the return fields into the new Find Power object. Show this object as a related list on the Load/Lane record.
Find Power Object:
| laneScore | Number |
| status | Text |
| r | Number |
| dot | Text |
| avgRatePerMile | Number |
| executionTime | Text |
| OriginatingRecordId | Text |
| mc | Text |
| name | Text |
| contactName | Text |
| contactName | Text |
| contactName | Text |
| contactEmail | Text |
| percentOfHistoryFromCoOp | Number |
| t | Number |
| contactPhone | Text |
| d | Number |
| contactPhone | Text |
| lratio | Number |
| contactEmail | Text |
| contactEmail | Text |
| o | Number |
| l | Number |
| lspId | Text |
| contactPhone | Text |
| loadId | Text |
| dh | Number |
| r | Number |
| flc | Number |
| rl | Number |
Single Carrier Statistics
Once you have created the Find Power object - you can then retrieve additional data onto the Find Power object. You'll need to add some additional fields to the Find Power object in order to support this capability. When you map this detail - use the Find Power object as both the source and destination for data (Inbound and Outbound data).
| isLaneMatch | Boolean |
| ownerName |
Text |
| rating | Text |
| toD | Boolean |
| reviewDate | Text |
| fromO | Boolean |
| dotStatus | Text |
| totalPower | Text |
| contractAuthority | Text |
| commonAuthority | Text |
| lanes | Number |
| driversTotal | Text |
| equipmentType | Text |
| zip | Text |
| toO | Boolean |
| fromD | Boolean |
Lane History - Single Carrier
On the Find Power object - you can request Lane History details for that single Carrier. This will return a significant amount of information - including TripSheets for that carrier. This function is typically called via Universal Action Component, or via Salesforce button which invokes the Nexus callout for this function. Use of this function should be utilized with discretion - as this data accrual over time can be significant and can cause Salesforce data overage conditions. Use the Find Power record to identify the Outbound message details, and then retrieve the Lane History for that carrier as a child object under the Find Power object.
Create the Lane History Object
| zip | Text |
| mc | Text |
| zip | Text |
| avgRatePerMile | Number |
| r | Number |
| d | Number |
| contactName | Text |
| t | Number |
| laneScore | Number |
| status | Text |
| dot | Text |
| fromO | Boolean |
| OriginatingRecordId | Text |
| ownerName | Text |
| percentOfHistoryFromCoOp | Number |
| l | Number |
| rating | Text |
| name | Text |
| flc | Number |
| dh | Number |
| rl | Number |
| o | Number |
| r | Number |
| equipmentType | Text |
| contactName | Text |
| dotStatus | Text |
| toO | Boolean |
| lspId | Text |
| toD | Boolean |
| contactPhone | Text |
| lratio | Number |
| fromD | Boolean |
| executionTime | Text |
| loadId | Text |
| contactEmail | Text |
| reviewDate | Text |
| contractAuthority | Text |
| contactEmail | Text |
| lanes | Number |
| totalPower | Text |
| contactPhone | Text |
| contactEmail | Text |
| contactName | Text |
| commonAuthority | Text |
| contactPhone | Text |
| driversTotal | Text |
Lane History Search
You can individually implement a Lane History Search function. Typically this function requires input form details to input the information required to request the Lane History Search. This can be accomplished via an Interview Flow, or by creating a Lane History Search Object which allows you to save the input request parameters and then display the response record as a sub-object under this request. Note that this function retrieves a significant amount of data, and consideration should be given to deleting the request detail after it no longer has value. Failure to accommodate this will result in Salesforce data overage conditions.
Create an object or an interview flow that contains the following data that will be sent outbound to Macropoint. Create another object that can be used to receive the response data (many rows).
Outbound Lane History Search:
| request.origin.state | Text |
| request.MonthWindowForHistoricalData | Text |
| request.destination.state | Text |
| request.equipmentTypes | Text |
| request.origin.postal | Text |
| request.NumberOfCarriersReturned | Text |
| request.destinationmilesradiuswindow | Text |
| request.originmilesradiuswindow | Text |
| request.origin.city | Text |
| request.destination.city | Text |
| request.destination.postal | Text |
Response Lane History data:
| name | Text |
| avgRatePerMile | Number |
| contactName | Text |
| contactEmail | Text |
| t | Number |
| d | Number |
| l | Number |
| contactPhone | Text |
| mc | Text |
| r | Number |
| status | Text |
| o | Number |
| dot | Text |
| OriginatingRecordId | Text |
| contactName | Text |
| rl | Number |
| flc | Number |
| laneScore | Number |
| dh | Number |
| r | Number |
| contactEmail | Text |
| contactPhone | Text |
| executionTime | Text |
| lspId | Text |
| contactName | Text |
| percentOfHistoryFromCoOp | Number |
| contactPhone | Text |
| contactEmail | Text |
| lratio | Number |
| loadId | Text |
Implementation Instructions - Offer
The Offer functions are enabled to communicate with Macropoint - so that you can place offers on loads that are displayed in Macropoint - and you can also receive offers from others that are using the Macropoint software. The APIs here are meant to communicate between Salesforce and Macropoint to send and receive Offer information.
Add Offer
You can send an offer on a Load that is maintained in Macropoint. The business rules for adding an offer on a load will be at the discretion of the business. Typically this would be invoked by sending the Offer by invoking this function via the Universal Action Component. However, other business rules may take precedence. Map the Load details from the Load object, and map the response elements back into the Load object
Offer Details
You can request additional information about the offer by sending the Offer ID and receiving Offer response information. Map information received from the Offer Details onto the Load details in Revenova. Note: you may have to add some of the fields if they are not present in the current Load record.
Accept Offer
You can accept an offer by sending the Offer ID. This will allow you to receive the details around the Offer response information. Map information received from the Accept Offer response onto the Load details in Revenova. Note: you may have to add some of the fields if they are not present in the current Load record.
Rescind Offer
If a Macropoint record Offer is Rescinded - there will be a message received that the particular load offer has been deleted. Note: you may wish to add Flow information to issue a notification that the Rescind message has been received - and notify a business user about this outcome.
Offer Callback
If a Macropoint record Offer is updated- there will be a message received that the particular load offer has been updated.
API Function Data Dictionary
This document provides details on the Nexus API fields, their event types, and data types, grouped by API function.
DELETE Recind Load Offer
| Nexus API Field Name | Event Type | Data Type |
|---|---|---|
| offerId | Outbound | Text |
GET Accept Offer
| Nexus API Field Name | Event Type | Data Type |
|---|---|---|
| ChildCompany | Inbound | Text |
| dateCreatedUtc | Inbound | Text |
| Rate | Inbound | Number |
| offerId | Inbound | Text |
| loadId | Inbound | Text |
| carrierDot | Inbound | Text |
| OriginatingRecordId | Inbound | Text |
| lspId | Inbound | Text |
| notes | Inbound | Text |
| ExpiryHours | Inbound | Text |
| LimitRate | Inbound | Number |
| originalOfferId | Inbound | Text |
| equipment | Inbound | Text |
| subEquipment | Inbound | Text |
| offerId | Outbound | Text |
GET Find Power
| Nexus API Field Name | Event Type | Data Type |
|---|---|---|
| laneScore | Inbound | Number |
| status | Inbound | Text |
| r | Inbound | Number |
| dot | Inbound | Text |
| avgRatePerMile | Inbound | Number |
| executionTime | Inbound | Text |
| OriginatingRecordId | Inbound | Text |
| mc | Inbound | Text |
| name | Inbound | Text |
| contactName | Inbound | Text |
| contactEmail | Inbound | Text |
| percentOfHistoryFromCoOp | Inbound | Number |
| t | Inbound | Number |
| contactPhone | Inbound | Text |
| d | Inbound | Number |
| lratio | Inbound | Number |
| o | Inbound | Number |
| l | Inbound | Number |
| lspId | Inbound | Text |
| loadId | Inbound | Text |
| dh | Inbound | Number |
| flc | Inbound | Number |
| rl | Inbound | Number |
| request.timeWindowAfterOriginAppointment | Outbound | Text |
| request.equipmentTypes | Outbound | Text |
| request.originMilesRadiusWindow | Outbound | Text |
| request.destinationMilesRadiusWindow | Outbound | Text |
| request.timeWindowBeforeOriginAppointment | Outbound | Text |
| request.loadId | Outbound | Text |
| request.monthWindowForHistoricalData | Outbound | Text |
GET Lane History Search
| Nexus API Field Name | Event Type | Data Type |
|---|---|---|
| name | Inbound | Text |
| avgRatePerMile | Inbound | Number |
| contactName | Inbound | Text |
| contactEmail | Inbound | Text |
| t | Inbound | Number |
| d | Inbound | Number |
| l | Inbound | Number |
| contactPhone | Inbound | Text |
| mc | Inbound | Text |
| r | Inbound | Number |
| status | Inbound | Text |
| o | Inbound | Number |
| dot | Inbound | Text |
| OriginatingRecordId | Inbound | Text |
| rl | Inbound | Number |
| flc | Inbound | Number |
| laneScore | Inbound | Number |
| dh | Inbound | Number |
| contactEmail | Inbound | Text |
| contactPhone | Inbound | Text |
| executionTime | Inbound | Text |
| lspId | Inbound | Text |
| percentOfHistoryFromCoOp | Inbound | Number |
| lratio | Inbound | Number |
| loadId | Inbound | Text |
| request.origin.state | Outbound | Text |
| request.MonthWindowForHistoricalData | Outbound | Text |
| request.destination.state | Outbound | Text |
| request.equipmentTypes | Outbound | Text |
| request.origin.postal | Outbound | Text |
| request.NumberOfCarriersReturned | Outbound | Text |
| request.destinationmilesradiuswindow | Outbound | Text |
| request.originmilesradiuswindow | Outbound | Text |
| request.origin.city | Outbound | Text |
| request.destination.city | Outbound | Text |
| request.destination.postal | Outbound | Text |
GET Lane History Single Carrier
| Nexus API Field Name | Event Type | Data Type |
|---|---|---|
| zip | Inbound | Text |
| mc | Inbound | Text |
| avgRatePerMile | Inbound | Number |
| r | Inbound | Number |
| d | Inbound | Number |
| contactName | Inbound | Text |
| t | Inbound | Number |
| laneScore | Inbound | Number |
| status | Inbound | Text |
| dot | Inbound | Text |
| fromO | Inbound | Boolean |
| OriginatingRecordId | Inbound | Text |
| ownerName | Inbound | Text |
| percentOfHistoryFromCoOp | Inbound | Number |
| l | Inbound | Number |
| rating | Inbound | Text |
| name | Inbound | Text |
| flc | Inbound | Number |
| dh | Inbound | Number |
| rl | Inbound | Number |
| o | Inbound | Number |
| equipmentType | Inbound | Text |
| dotStatus | Inbound | Text |
| toO | Inbound | Boolean |
| lspId | Inbound | Text |
| toD | Inbound | Boolean |
| contactPhone | Inbound | Text |
| lratio | Inbound | Number |
| fromD | Inbound | Boolean |
| executionTime | Inbound | Text |
| loadId | Inbound | Text |
| contactEmail | Inbound | Text |
| reviewDate | Inbound | Text |
| contractAuthority | Inbound | Text |
| lanes | Inbound | Number |
| totalPower | Inbound | Text |
| commonAuthority | Inbound | Text |
| driversTotal | Inbound | Text |
| request.destination.city | Outbound | Text |
| request.equipmentTypes | Outbound | Text |
| request.destination.postal | Outbound | Text |
| request.origin.state | Outbound | Text |
| request.destination.state | Outbound | Text |
| request.NumberOfCarriersReturned | Outbound | Text |
| request.origin.postal | Outbound | Text |
| request.carrierDotNumber | Outbound | Text |
| request.originmilesradiuswindow | Outbound | Text |
| request.destinationmilesradiuswindow | Outbound | Text |
| request.origin.city | Outbound | Text |
| request.MonthWindowForHistoricalData | Outbound | Text |
GET Offer Details
| Nexus API Field Name | Event Type | Data Type |
|---|---|---|
| dateCreatedUtc | Inbound | Text |
| carrierDot | Inbound | Text |
| limitRate | Inbound | Number |
| additionalNotes | Inbound | Text |
| offerId | Inbound | Text |
| rate | Inbound | Number |
| OriginatingRecordId | Inbound | Text |
| fromCarrier | Inbound | Boolean |
| status | Inbound | Text |
| childCompany | Inbound | Text |
| originalOfferId | Inbound | Text |
| lspId | Inbound | Text |
| loadId | Inbound | Text |
| expire | Inbound | Text |
| note | Inbound | Text |
| offerId | Outbound | Text |
GET Single Carrier Statistics
| Nexus API Field Name | Event Type | Data Type |
|---|---|---|
| name | Inbound | Text |
| flc | Inbound | Number |
| dh | Inbound | Number |
| d | Inbound | Number |
| laneScore | Inbound | Number |
| isLaneMatch | Inbound | Boolean |
| OriginatingRecordId | Inbound | Text |
| l | Inbound | Number |
| avgRatePerMile | Inbound | Number |
| r | Inbound | Number |
| percentOfHistoryFromCoOp | Inbound | Number |
| mc | Inbound | Text |
| rl | Inbound | Number |
| status | Inbound | Text |
| dot | Inbound | Text |
| contactName | Inbound | Text |
| ownerName | Inbound | Text |
| t | Inbound | Number |
| r | Inbound | Number |
| o | Inbound | Number |
| rating | Inbound | Text |
| contactEmail | Inbound | Text |
| executionTime | Inbound | Text |
| contactPhone | Inbound | Text |
| toD | Inbound | Boolean |
| loadId | Inbound | Text |
| reviewDate | Inbound | Text |
| fromO | Inbound | Boolean |
| lspId | Inbound | Text |
| dotStatus | Inbound | Text |
| totalPower | Inbound | Text |
| contractAuthority | Inbound | Text |
| commonAuthority | Inbound | Text |
| lanes | Inbound | Number |
| driversTotal | Inbound | Text |
| equipmentType | Inbound | Text |
| zip | Inbound | Text |
| toO | Inbound | Boolean |
| fromD | Inbound | Boolean |
| lratio | Inbound | Number |
| request.timeWindowBeforeOriginAppointment | Outbound | Text |
| request.carrierDotNumber | Outbound | Text |
| request.monthWindowForHistoricalData | Outbound | Text |
| request.timeWindowAfterOriginAppointment | Outbound | Text |
| request.destinationMilesRadiusWindow | Outbound | Text |
| request.loadId | Outbound | Text |
| request.equipmentTypes | Outbound | Text |
| request.originMilesRadiusWindow | Outbound | Text |
POST Carrier Import
API Field Details
| Nexus API Field Name | Event Type | Data Type |
|---|---|---|
| ExecutionTime | Inbound | Text |
| Success | Inbound | Boolean |
| Name | Outbound | Text |
| Status | Outbound | Text |
| DOTNumber | Outbound | Text |
| MCNumber | Outbound | Text |
| Name | Outbound | Text |
| Outbound | Text | |
| Phone | Outbound | Text |
| PhoneExtension | Outbound | Text |
| OwnerName | Outbound | Text |
| DNU | Outbound | Text |
| Favorite | Outbound | Text |
POST Load Import
| Nexus API Field Name | Event Type | Data Type |
|---|---|---|
| ExecutionTime | Inbound | Text |
| Success | Inbound | Boolean |
| State | Outbound | Text |
| LoadId | Outbound | Text |
| Street1 | Outbound | Text |
| Street1 | Outbound | Text |
| Postal | Outbound | Text |
| City | Outbound | Text |
| City | Outbound | Text |
| EquipmentTypes | Outbound | Text |
| StopNumber | Outbound | Number |
| MPLoadId | Outbound | Text |
| Longitude | Outbound | Number |
| State | Outbound | Text |
| Longitude | Outbound | Number |
| Country | Outbound | Text |
| EndDateTime | Outbound | Text |
| Latittude | Outbound | Number |
| DateTime | Outbound | Text |
| DateTime | Outbound | Text |
| Postal | Outbound | Text |
| Latittude | Outbound | Number |
| Country | Outbound | Text |
| EndDateTime | Outbound | Text |
| Miles | Outbound | Number |
| TSACert | Outbound | Boolean |
| MCNumber | Outbound | Text |
| DeliveredDateTime | Outbound | Text |
| DropTrailerAtDestination | Outbound | Boolean |
| CarrierDOTNumber | Outbound | Text |
| Weight | Outbound | Number |
| Hazmat | Outbound | Boolean |
| LoadDetails | Outbound | Text |
| RatePerMileExcludingFuel | Outbound | Number |
| BlockingAndBracing | Outbound | Boolean |
| ItemizedStandardAccessorialCharges | Outbound | Number |
| Commodity | Outbound | Text |
| Status | Outbound | Text |
| OwnerName | Outbound | Text |
| OwnerEmail | Outbound | Text |
| TWIC | Outbound | Boolean |
| MaxBuyRate | Outbound | Number |
| CoverageRegion | Outbound | Text |
| SuggestedMarketRate | Outbound | Number |
| TruckIdentifier | Outbound | Text |
| OwnerPhone | Outbound | Text |
| DropTrailerAtOrigin | Outbound | Boolean |
| HazmatType | Outbound | Text |
| CTPATCert | Outbound | Boolean |
| BlockingAndBracingType | Outbound | Text |
| ChildCompanyCode | Outbound | Text |
POST Single Carrier Import
| Nexus API Field Name | Event Type | Data Type |
|---|---|---|
| Success | Inbound | Boolean |
| ExecutionTime | Inbound | Text |
| DNU | Outbound | Text |
| OwnerName | Outbound | Text |
| Status | Outbound | Text |
| Name | Outbound | Text |
| PhoneExtension | Outbound | Text |
| MCNumber | Outbound | Text |
| Favorite | Outbound | Text |
| DOTNumber | Outbound | Text |
| Name | Outbound | Text |
| Outbound | Text | |
| Phone | Outbound | Text |
POST Single Load Import
| Nexus API Field Name | Event Type | Data Type |
|---|---|---|
| ExecutionTime | Inbound | Text |
| Success | Inbound | Boolean |
| TWIC | Outbound | Boolean |
| Latittude | Outbound | Number |
| Postal | Outbound | Text |
| Weight | Outbound | Number |
| Country | Outbound | Text |
| CarrierDOTNumber | Outbound | Text |
| CTPATCert | Outbound | Boolean |
| ItemizedStandardAccessorialCharges | Outbound | Number |
| OwnerEmail | Outbound | Text |
| OwnerPhone | Outbound | Text |
| MPLoadId | Outbound | Text |
| Postal | Outbound | Text |
| MaxBuyRate | Outbound | Number |
| Latittude | Outbound | Number |
| City | Outbound | Text |
| LoadDetails | Outbound | Text |
| TSACert | Outbound | Boolean |
| BlockingAndBracing | Outbound | Boolean |
| EquipmentTypes | Outbound | Text |
| CoverageRegion | Outbound | Text |
| RatePerMileExcludingFuel | Outbound | Number |
| MCNumber | Outbound | Text |
| EndDateTime | Outbound | Text |
| Status | Outbound | Text |
| DateTime | Outbound | Text |
| Commodity | Outbound | Text |
| LoadId | Outbound | Text |
| Miles | Outbound | Number |
| StopNumber | Outbound | Number |
| DateTime | Outbound | Text |
| OwnerName | Outbound | Text |
| DropTrailerAtDestination | Outbound | Boolean |
| DeliveredDateTime | Outbound | Text |
| Longitude | Outbound | Number |
| Hazmat | Outbound | Boolean |
| SuggestedMarketRate | Outbound | Number |
| Country | Outbound | Text |
| ChildCompanyCode | Outbound | Text |
| TruckIdentifier | Outbound | Text |
| HazmatType | Outbound | Text |
| DropTrailerAtOrigin | Outbound | Boolean |
| BlockingAndBracingType | Outbound | Text |
| Street1 | Outbound | Text |
| Longitude | Outbound | Number |
| State | Outbound | Text |
| City | Outbound | Text |
| EndDateTime | Outbound | Text |
| Street1 | Outbound | Text |
| State | Outbound | Text |
PUT Add Offer
| Nexus API Field Name | Event Type | Data Type |
|---|---|---|
| expire | Inbound | Text |
| limitRate | Inbound | Number |
| note | Inbound | Text |
| originalOfferId | Inbound | Text |
| OriginatingRecordId | Inbound | Text |
| rate | Inbound | Number |
| status | Inbound | Text |
| dateCreatedUtc | Inbound | Text |
| fromCarrier | Inbound | Boolean |
| childCompany | Inbound | Text |
| offerId | Inbound | Text |
| carrierDot | Inbound | Text |
| loadId | Inbound | Text |
| lspId | Inbound | Text |
| additionalNotes | Inbound | Text |
| Rate | Outbound | Number |
| subEquipment | Outbound | Text |
| note | Outbound | Text |
| equipment | Outbound | Text |
| loadId | Outbound | Text |
| carrierDot | Outbound | Text |
| LimitRate | Outbound | Number |
| ChildCompany | Outbound | Text |