How it works
-
Trax’ Store Import API V5 enables its clients to send new stores to Trax or to update already existing stores in the Trax database.
-
Store data should be added to a file to be sent as part of the corresponding POST request (see below). Supported file formats:
-
Excel
-
CSV
-
JSON.
-
-
Store import is an async process, ie. the response contains a job ID which can be used to poll the API to get all available data incl. the status for the given upload.
-
The Excel/CSV/json should/can contain the following fields (mandatory fields are marked with an asterisk *):
-
Store Number (json: store_number) - string(100) *
The client's store unique identifier -
Store Name (json: store_name) - string(100) *
Name of the store -
Display Name (json: store_display_name) - string(100)
A display (short-version) name of the store for report use (for Trax output solutions) -
Store Type (json: store_type_name) - string(100)
One of the values for the Store Type store attribute that have been implemented from the client to Trax. -
Region (json: region_name) - string(45) *
One of the values for the Region store attribute that have been implemented from the client to Trax. -
District (json: district_name) - string(45)
One of the values for the District store attribute that have been implemented from the client to Trax. -
Branch (json: branch_name) - string(45)
One of the values for the Branch store attribute that have been implemented from the client to Trax. -
Retailer (json: retailer_name) - string(100)
One of the values for the Retailer store attribute that have been implemented from the client to Trax. -
State (json: state_name) - string(100)
One of the values for the State store attribute that have been implemented from the client to Trax. -
Street (json: street) - string(200) *
Address street info e.g. "65 Chulia Street" -
Address Line 2 (json: address_line_2) - string(100)
Additional address information -
City (json: city) - string(100) *
Address City info -
Deleted (json: is_deleted) - boolean
True - delete the store
False - remove the delete flag (By default false) -
Postal Code (json: postal_code) - string(45)
Address Postal (ZIP) code -
Latitude (json: latitude) - Float(10,6)
GPS latitude coordinate (in degrees) -
Longitude (json: longitude) - Float(10,6)
GPS longitude coordinate (in degrees) -
Active (json: is_active) - boolean
Indicates whether the store is active or has been deactivated. Optional values 'true' or 'false'
(Settings this value to 'false' will remove the store from the Trax Mobile Application. It will still appear in Trax reports) - default value is 'true' -
Manager Name (json: manager_name) - string(45)
Name of the store's manager (or another contact person for the store) -
Manager Email (json: manager_email) - string(100)
Email of the store's manager -
Manager Phone (json: manager_phone) - string(45)
Phone number of the store's manager -
Audit Cycle Set (json: audit_cycle_set) - string(100)
Name of the audit cycle set to be connected to the store
-
-
In addition, you can also include additional attribute values as they are available for your project by using the following additional fields:
-
Additional Attribute 1 (json: additional_attribute_1) - string(100)
Additional attribute for the store -
Additional Attribute 2 (json: additional_attribute_2) - string(100)
Additional attribute for the store -
Additional Attribute 3 (json: additional_attribute_3) - string(100)
Additional attribute for the store -
...
-
-
Store Update Operation Details:
-
Operations are done in an "update + insert" style
-
In order to add a new store
-
Add an object/row with all the required fields.
-
The operation will succeed only if all the mandatory fields will be provided
-
-
In order to update a store:
-
Add an object/row with all the required fields. The operation will succeed only if all the mandatory fields will be provided
-
The unique identifier of a store is the 'store_number' field. This field is not editable
-
Empty or missing field values will be treated as clearing the field values.
-
-
In order to delete a store:
-
Add an object/row with the store_number of the store, which serves as a unique identifier, and in addition to the rest of the mandatory fields
-
Set the 'is_deleted' value to true
-
-
Note that setting a store to 'is_active: false' does not delete the store.
-
-
Each object/row of the file will be validated. Invalid objects/rows will be added to an error file, while the valid ones are upserted to the database.
-
Depending on your project's configuration, some store attributes (eg. retailer) are prepared to receive new values via this Store Import V5 API. New values are automatically added to a warning log. Please reach out to Trax to discuss these store attribute configuration.
Store Import API V5
Examples
Let’s assume we have 3 stores in the Trax database with the following fields:
[
{
"store_number":"100",
"store_name":"Sample Store 100",
"store_display_name":"Store 100",
"store_type_name":"testStoreType",
"region_name":"testRegion",
"retailer_name":"testRetailer1",
"street":"Test Street 4",
"city":"Test City",
"postal_code":"1111",
"is_active":"false",
"manager_name":"Test Manager",
"manager_email":"test@manager.com",
"additional_attribute_1":"testValue1",
"additional_attribute_2":"testValue2"
},
{
"store_number":"200",
"store_name":"Sample Store 200",
"store_display_name":"Store 200",
"store_type_name":"testStoreType",
"region_name":"testRegion",
"retailer_name":"testRetailer1",
"street":"Test Street 12",
"city":"Test City",
"postal_code":"1212",
"is_active":"false",
"manager_name":"Test Manager",
"manager_email":"test@manager.com",
"additional_attribute_1":"testValue3",
"additional_attribute_2":"testValue4"
},
{
"store_number":"300",
"store_name":"Sample Store 300",
"store_display_name":"Store 300",
"store_type_name":"testStoreType",
"region_name":"testRegion",
"retailer_name":"testRetailer1",
"street":"Test Street 30",
"city":"Test City",
"postal_code":"2323",
"is_active":"false",
"manager_name":"Test Manager",
"manager_email":"test@manager.com",
"additional_attribute_1":"testValue5",
"additional_attribute_2":"testValue6"
}
]
Now, we are sending the following store update to Trax via API:
[
{
"store_number":"200",
"store_name":"Sample Store 200",
"store_display_name":"Store 200",
"store_type_name":"testStoreType",
"region_name":"testRegion",
"retailer_name":"testRetailer2",
"street":"Test Street 12",
"city":"Test City",
"postal_code":"1212",
"is_active":"false",
"manager_name":"Test Manager",
"manager_email":"test@manager.com",
"additional_attribute_1":"testValue3",
"additional_attribute_2":"testValue4"
},
{
"store_number":"300",
"store_name":"Sample Store 300",
"store_display_name":"Store 300",
"store_type_name":"testStoreType",
"region_name":"testRegion",
"retailer_name":"testRetailer1",
"street":"Test Street 30",
"city":"Test City",
"postal_code":"2323",
"is_deleted":"true",
"manager_name":"Test Manager",
"manager_email":"test@manager.com",
"additional_attribute_1":"testValue5",
"additional_attribute_2":"testValue6"
},
{
"store_number":"400",
"store_name":"Sample Store 400",
"store_display_name":"Store 400",
"store_type_name":"testStoreType",
"region_name":"testRegion",
"retailer_name":"testRetailer1",
"street":"Test Street 455",
"city":"Test City",
"postal_code":"3434",
"is_active":"false",
"manager_name":"Test Manager",
"manager_email":"test@manager.com",
"additional_attribute_1":"testValue1",
"additional_attribute_2":"testValue2"
},
{
"store_number":"500",
"store_type_name":"testStoreType",
"region_name":"testRegion",
"retailer_name":"testRetailer1",
"street":"Test Street 455",
"city":"Test City",
"postal_code":"3434",
"is_active":"false",
"manager_name":"Test Manager",
"manager_email":"test@manager.com",
"additional_attribute_1":"testValue1",
"additional_attribute_2":"testValue2"
}
]
After a successful validation and upsert, the following will happen:
-
The store with the store number 100 will remain intact.
-
The store with the store number 200 will be updated by changing the retailer from testRetailer1 to testRetailer2.
-
The store with the store number 300 will be deleted.
-
A new store with a store number 400 will be created.
-
Creating a new store with the store number 500 will be rejected since the store update file does not contain a mandatory field (store_name).
Endpoints
POST
Aim: To enable Clients to upload a file containing store data to Trax.
Supported protocol: HTTPS
POST <host>/api/v5/<project_name>/store-import/upload
Ex. https://services.traxretail.com/api/v5/myproject/store-import/upload
Route
Request
Request Headers
Authorization string
Value: 'Auth-Token {project auth token}'
Authentication token provided by Trax
Request Body
file*
Excel/CSV/json file with the store data as described above
autoSend
true/false - Used to determine if the file should be only validated without import (autoSend = false) or if the file's data should be also imported after the validation phase (autoSend = true), please note that this parameter is defaulted with autoSend = false, ie. if you don't provide a value, the file will only be validated, but no subsequent import will be done!
Import ID
Response
Store updates to Trax
Errors
400 missing file
400 unsupported file format
404 invalid route
500 server error
GET
Upload Details
Aim: To enable Clients to get an update on a file upload by providing the import ID
Route
Supported protocol: HTTPS
GET <host>/api/v5/<project>/store-import/<import_id>
Ex. https://services.traxretail.com/api/v5/myproject/store-import/129387129391823
Request
Data in json format:
fileName
Name of the source file with extension
importedBy
Email of the user who uploaded the file - or in case of API upload, a constant value (api-user)
started
Timestamp of the import start time
status
one of the following values
-
queued - initial status upon sending the request
-
validating - status for the time of the file validation
-
validated - status after successful validation
-
importing - status for the time of the file's valid data import
-
imported - status after successful validation (terminal state)
-
failed - status for errors (terminal state)
parsed
Number of objects/rows parsed
total
Total number of objects/rows included in the source file
errored
Number of invalid stores (ones with errors)
fileID
ID of the source file
errorID
ID of the error log file
errorExcel
URL of the error file in Excel format, pls note accessing the file requires authentication
errorJSON
URL of the error file in json format, pls note accessing the file requires authentication
warningId
ID of the warning file
warningExcel
URL of the warning file in Excel format pls note accessing the file requires authentication
warningJSON
URL of the warning file in Json format pls note accessing the file requires authentication
uuid
UUID of the file upload
message
additional information on the upload
Example response
{{
"fileName": "test_store_import.json",
"importedBy": "test-api-user",
"started": "2024-10-24T13:01:47.965Z",
"status": "imported",
"parsed": 2,
"total": 2,
"errored": 2,
"fileId": "671a453cfc417a0007e566b0",
"errorId": "671a45409024bd000742f6c3",
"errorExcel": "https://services.traxretail.com/api/v5/testproject/store-import/download/error/xlsx/671a453be2af0f0008761ba1",
"errorJSON": "https://services.traxretail.com/api/v5/testproject/store-import/download/error/json/671a453be2af0f0008761ba1",
"warningId": "671a45408ada430007216217",
"warningExcel": "https://services.traxretail.com/api/v5/testproject/store-import/download/warning/xlsx/671a453be2af0f0008761ba1",
"warningJSON": "https://services.traxretail.com/api/v5/testproject/store-import/download/warning/json/671a453be2af0f0008761ba1",
"uuid": "a803d599-e20e-4c59-83d0-be6891c6cbeb",
"message": ""
}
400 invalid token
404 invalid route
400 bad request invalid query params
500 server error
Request Headers
Authorization string
Value: 'Auth-Token {project auth token}'
Authentication token provided by Trax
Request params
import ID
Response
Errors
GET
Source and error file
Aim: To enable Clients to retrieve the source or error file for a previous store import
Route
Supported protocol: HTTPS
GET <host>/api/v5/<project>/store-import/file/<fileID>
Ex. https://services.traxretail.com/api/v5/myproject/store-mport/file/63bc1776aa849663db977fce
Request
Request Headers
Authorization string
Value: 'Auth-Token {project auth token}'
Authentication token provided by Trax
Request Param:
fileID*
Source or error file ID as provided in the response to a GET upload details request.
Response
-
Error: File in CSV format
-
Source file: as provided in the upload request (ie. CSV or Excel or JSON)
Errors
400 invalid token
500 bad request (in case of invalid fileID)
500 server error