Log Vehicle Sale

Overview - Step 3 of 4 Upload Steps

More Than Rewards logs every single "line item" for the overall transaction / invoices, which means every sale transaction line item will need to be logged as a individual transaction.  So  if someone is purchasing 5 parts on one invoice then you'll need to make 5 distinct API calls to log each line item of that invoice via this API.    As as reminder this  API is for parts, clothing, accessories that are sold outside of bike and service sales.  All service work orders or vehicle deals which includes parts are done via the logservicesale api  and logvehiclesale api.  

Do Not Post "Vehicle Deal" part data or "Service Work Order" part data  to this API .    
This is API is to "Log Part Sales, Clothing, Accessories" but NOT for Bike Deals and Not For Service Work. 


Understanding - Invoices vs Work Orders vs Vehicle Sales 
Invoices are reserved for clothing, accessories, part sales sold outside of the service or vehicle sales department, while work orders will contain labor and parts designed for sales within the service department, while vehicle sales are reserved for major units, accessories, parts, clothing, labor  that is all sold at the time of the  vehicle sale.   Invoices are completed via the LogPartSale,  Work Orders re completed via LogServiceSale and VehicleSales are completed via the LogVehicleSales

Very Important - Do Send Over Special Orders Unless Paid In Full
DO NOT submit any item that is sold as a "Special Order" unless the item is 100% paid for and picked up at the time of cashiering the invoice.   If you post items that are special order but not yet picked up then the customer will earn reward every time they make a payment on the special order.   You should ONLY post a special order item with the invoice if the special order item was actually picked up.   If you do not follow these instructions the customer will receive rewards multiple times please be very careful not to do this, as it will cause problems with the dealership because it will cause them to award customers more points then they should and they will be contacting you as to why you're doing this.        

Very Important - Understanding Returns vs Sales
Return transactions should be submitted  via NEGATIVE value while sale are submitted via positive cash values. 

Very Important - Understanding Returns vs Sales - Returns Need Post as NEGATIVE 
This is how we determine if an item is ON SALE OR NOT, if the "total sold to" price is less than than the "total retail price" then this line item transaction will be flagged as "on sale".   If you do not post the correct values here for both fields it could result in the customer earning rewards on items they do not wish to  earn rewards on as many customers choose not to reward  on sale items.     In most cases if the item is not on sale or discounted then these two values will be exactly the same.  

Understanding - "Empty Allowed"
If this is YES it means that this is a "required field" can be  empty if no data is available, while it still needs to be mapped it's possible that there are situations which prevent you from including data. For example if a cashier does not ask for the customers phone number, you are not able to pass this field even tho it is required it will not error if it's empty.  However it must be included if it's available otherwise it will cause problems with the customer.  

For example your system has the mobile number yet you choose not to include it in the request then and the customer has configured the reward system to send mobile alerts then the functionality the customer is expecting will not work.  When they call our support department for help with this we will be forced to explain to them that the reason our system does not sending text  notifications is because your not passing us the correct information.   Therefore it's critical that you post all the data that you have available so all special reward configurations that each customer setup will work as expected.   

The intention behind "Empty Allowed" is just to let you know that the API will NOT error if the field is blank even tho it is required.  

Post Url

  https://api.riderrewards.com/logvehiclesale  

- SSL is required

Headers

Name  Required      Empty Allowed   Notes
transactionidYesNoThis is the unique identifier for a transaction, generated by the BeginTransaction API endpoint. Links all the uploaded data together for a given feed.
PartnerAPIKeyYesNoAPI Key for approved partners, to be provided by More Than Rewards. To become an approved partner call More Than Rewards at 414-326-4100.
RRStoreAPIKeyYesNoStore's API key within the Rider Rewards system. Retrieved via the  GetMyDealerList  API endpoint.
RRStoreIDYesNoUnique store identifier within the Rider Rewards system. Retrieved via the GetMyDealerList  API endpoint.

* An error will not result if Max Length is exceeded. Data will be trimmed to this length.
+ These are set in the header WITHOUT base64, just regular header values.

Expected JSON Body To POST

{
  "transactionsummary": {
    "transactionid": "asdfas234234234h323guid1232",
    "partnertransactionid": "12154",
    "partnerstoreid": "12154",
    "RRStoreID": "12",
    "feedtype": "V",
    "startdate": "05/01/2018",  
    "enddate": "05/15/2018",
    "totalrowssent": "1000"
  },
  "rows": [
    {
      "DealNumber": "154",
      "BasePrice": "154",
      "AdditionalItems": "154",      
      "SetupFee": "154",
      "TradeAndDeducets": "154",
      "FinalPrice": "154",
      "BikeYear": "154",
      "BikeModel": "154",
      "FinalizeDate": "154",
      "NewUsed": "154",
      "TotalCost": "154",
      "BikeColor": "154",
      "BikeClass": "154",
      "TradeValue": "154",
      "LastUpdated": "154",
      "Cost": "154",
      "Make": "154",
      "SalesPersonName": "154",
      "VIN": "154",
      "SalesPersonInitials": "154",
      "Odometer": "154",
      "CustomerRewardNumber": "AA1234",
      "CustomerFirstName": "John",
      "CustomerLastName": "Doe",
      "CustomerAddress": "1177 W Northbranch Dr",
      "CustomerCity": "Oak Creek",
      "CustomerStateProvince": "WI",
      "CustomerZipOrPostalCode": "53154",
      "CustomerCountry": "USA",
      "CustomerBirthMonth": "1",
      "CustomerBirthDay": "1",
      "CustomerBirthYear": "1955",
      "CustomerPrimaryPhoneType": "4143264100",
      "CustomerMobilePhone": "4143264100",
      "CustomerHomePhone": "4143264100",
      "CustomerWorkPhone": "4143264100",
      "CustomerClass": "1",
      "CustomerClubName": "VIP",
      "CustomerGender": "M",
      "CustomerEmail": "support@morethanrewards.com",
      "CustomerNationalHOGNumber": "21sd21asd",
      "CustomerNationalHOGExpireMonth": "1",
      "CustomerNationalHOGExpireDate": "2",
      "CustomerNationalHOGExpireYear": "2018",
      "CustomerIsLocalHOGChapterMember": "Y"
    },
    { 
      "DealNumber": "154",
      "BasePrice": "154",
      "AdditionalItems": "154",      
      "SetupFee": "154",
      "TradeAndDeducets": "154",
      "FinalPrice": "154",
      "BikeYear": "154",
      "BikeModel": "154",
      "FinalizeDate": "154",
      "NewUsed": "154",
      "TotalCost": "154",
      "BikeColor": "154",
      "BikeClass": "154",
      "TradeValue": "154",
      "LastUpdated": "154",
      "Cost": "154",
      "Make": "154",
      "SalesPersonName": "154",
      "VIN": "154",
      "SalesPersonInitials": "154",
      "Odometer": "154",
      "CustomerRewardNumber": "AA1234",
      "CustomerFirstName": "John",
      "CustomerLastName": "Doe",
      "CustomerAddress": "1177 W Northbranch Dr",
      "CustomerCity": "Oak Creek",
      "CustomerStateProvince": "WI",
      "CustomerZipOrPostalCode": "53154",
      "CustomerCountry": "USA",
      "CustomerBirthMonth": "1",
      "CustomerBirthDay": "1",
      "CustomerBirthYear": "1955",
      "CustomerPrimaryPhoneType": "4143264100",
      "CustomerMobilePhone": "4143264100",
      "CustomerHomePhone": "4143264100",
      "CustomerWorkPhone": "4143264100",
      "CustomerClass": "1",
      "CustomerClubName": "VIP",
      "CustomerGender": "M",
      "CustomerEmail": "support@morethanrewards.com",
      "CustomerNationalHOGNumber": "21sd21asd",
      "CustomerNationalHOGExpireMonth": "1",
      "CustomerNationalHOGExpireDate": "2",
      "CustomerNationalHOGExpireYear": "2018",
      "CustomerIsLocalHOGChapterMember": "Y"
    }
  ]
}



Body Description

Field  Max Length*   Required      Empty Allowed   Notes
transactionsummary



Object containing the fields described below.
transactionid
50YesNoThis is the unique identifier for a transaction, generated by the BeginTransaction API endpoint. Links all the uploaded data together for a given feed.
partnertransactionid
50YesNoA field designed for Partner's to pass their own reference / key to identify a transaction within the Rider Rewards System. Could be used in future API's for look ups.
partnerstoreid
50YesNoA field designed for Partner's to pass their own reference / key to identify a store within the Rider Rewards System. Could be used in future API's for look ups.
RRStoreID
50YesNoUnique store identifier within the Rider Rewards system. Retrieved via the GetMyDealerList  API endpoint.
feedtype
50YesNoV = Vehicle / Bike Sale
startdate
50YesNoStart date received from the Ready Feed Upload
enddate
50YesNoEnd date received from the Ready Feed Upload
totalrowssent
50YesNoNumber of objects in the 'rows' array. The amount of records being sent in the given API request.





rows



Array containing any number of objects with the fields described below
DealNumber
12YesNoUnique identifier for a vehicle sale
BasePrice

YesYesPrice of the vehicle before any addons or additional items
AdditionalItems

YesYesItems added onto the purchase of the vehicle. Such as accessories installed or not installed.
SetupFee

No
Any out side costs beyond the vehicle its self such as financing  / title fees.
TradeAndDeducets

No
Value of the trade-in vehicle if it exists
FinalPrice

No
The finalized total price of the vehicle transaction (includes addons, fees, etc)
BikeYear

No
E.g. 2018
BikeModel
50No
E.g. Iron 1200
FinalizeDate

No
Date in mm/dd/yyyy format
NewUsed
1No
N = New
U = Used
TotalCost

No
The finalized total price of the vehicle transaction (includes addons, fees, etc)
BikeColor
25No
Color of the vehicle
BikeClass
1NoN/AThis is often a single digit code that the bike falls under a particular type of "class" such as "S" for sport "T" for touring, some dealer systems have single digit class codes that represent these items.  This can be blank if no single digit class code is stored in your dealer system. 
TradeValue

No
The value of the trade in vehicle
Cost

No

Make
20No
E.g. Harley-Davidson
SalesPersonName
100No
E.g. John Doe
VIN
500No
E.g. JN8AS58T09W321853
SalesPersonInitials
15No
E.g. J.D.
Odometer
50No
Mileage of the vehicle (Reading of the odometer)
CustomerRewardNumber
7YesYesIf this is a reward sale it MUST have the reward number if this is NOT a reward sale the it should blank.  Remember we need both Reward  Sales and Non-Reward sales for the reward system to work. This is because there are reports that the dealer users to compare how many "reward sales" vs "non-reward" sales they have.  So if you do not include every non-reward sale this report and other functionality will not work.   
CustomerFirstName
50YesNoCustomer First Name
CustomerLastName
50

Customer Last Name
CustomerAddress
200YesYesCustomer Street Address
CustomerCity
200YesYesCustomer City
CustomerStateProvince
50YesYesCustomer State
CustomerZipOrPostalCode
50YesYesCustomer Zip
CustomerCountry
3YesYesOne of the following 3 digit codes must be  used USA, CAN, AUS, EUR, JPN, DEU, GBR
CustomerPrimaryPhoneType
10YesYesMust include a phone number if you have it on file.  A 10  digit phone number must be provided if it is not a 10 digit number the number will  set to an empty string.  Reward  Customers can lookup their account balance by their primary number.  If the  customer has a mobile phone we recommend you  use their "mobile" number as the primary number as this is the number that they can use to lookup their account balance with via text/sms or if they don't know their reward number, they can use their primary phone number in place of it.  This is very common for most customers to just use their phone number.   Example 1-414-326-4100 should be  4143264100.  Must  be NUMERIC 
CustomerHomePhone
10Non/aOptional - Must  be NUMERIC -  Example 1-414-326-4100 should be  4143264100.  
CustomerMobilePhone
10YesYesMust  be NUMERIC -  Example 1-414-326-4100 should be  4143264100.   This should be the  primary number in most cases.
CustomerWorkPhone
10Non/aMust  be NUMERIC -  Example 1-414-326-4100 should be  4143264100.   This should be the  primary number in most cases.
CustomerEmail
100YesYesIf this is not available or included then we can not send them any kind of reward alert or "thank you" for visiting.  If you  have this available it needs to be included.  If it's not available you can leave it blank. 
CustomerBirthMonth
2YesYes1 = Jan  to  12 = Dec  (this is a number)
----
If you do not included this then we can not issue them special rewards on their birthday.
CustomerBirthDay
2YesYes1 to 31  (this is a number of the day)
----
If you do not included this then we can not issue them special rewards on their birthday.
CustomerBirthYear
4Non/aOptional - 4 Digit Year 
CustomerGender
1Non/aM = Male
F = Female
N = Neutral
U = Unknown
----
One of the  values above must be used, if no  data is passed then the value will be set to U
CustomerClubName
50Non/aThis is just a friendly name for any kind of riding club a dealer may have, in many cases this is blank.  
CustomerClass
50Non/aThis is just a friendly of a group that the dealer classifies a customer under such as whole salers, retail customers, ext.. in many cases this is just blank. 
CustomerNationalHOGNumber
100Non/aMust be numeric 
CustomerNationalHOGExpireMonth
2Non/a1 to 12 (this is the H.O.G. club member expiration  month on their national HOG card)
CustomerNationalHOGExpireDate
2Non/a1 to 31 (this is the H.O.G. club member expiration  month on their national HOG card)
CustomerNationalHOGExpireYear
4Non/aThis is the H.O.G. club member expiration  year on their national HOG card,  if you pass "LIFE" to this parm it will flag their card as Life  Member.
CustomerIsLocalHOGChapterMember
1Non/aThis value can be
0 = False
1 = True
3 = Unknown
----
If the value is set to 1 the national HOG values must be included, if they are not then this value will be set to 3  (aka Unknown).  This is because you can not have a local hog member without a national HOG card
----------------------

* An error will not result if Max Length is exceeded. Data will be trimmed to this length.

Sample Results

Success Message

{
  "results": {
    "message": "Success",
    "transactionid": "1232",
    "batchid": "1325",
    "uploadedtotal": "1000",
    "runningtotal": "3000",
    "expectedtotal": "4000",
    "feedtype": "V",
    "startdate": "05/01/2018",
    "enddate": "05/15/2018",
    "RRStoreID": "1215",
    "partnerstoreid": "154",
    "partnertransactionid": "154"
  }
}

Sample Failure Message

{
  "results": { "error": "Authentication failed" }
}