Tire Supplier Ordering Integration Guide
This document provides a comprehensive guide to integrating with the TireConnect Supplier Ordering API. It is intended for developers and technical teams who are implementing automated tire ordering capabilities between a dealer system and connected tire suppliers.
The guide walks you step-by-step through the ordering integration process, beginning with initial configuration and authentication, then covering how to search available tires, query supplier details and stock, and finally create and manage orders programmatically.
This guide is designed to help you establish a seamless and reliable procurement workflow with supported tire suppliers.
Search
You can make any kind of search, for example using search By Size method
Please make sure you are using sandbox environment base URL:
https://devdemo.tireconnect.caRequest Example
curl --location 'https://devdemo.tireconnect.ca/api/tire/search/v1/by/size' \
--header 'token: {{token}}' \
--header 'Content-Type: application/json' \
--data '{
"location_id": {{location_id}},
"size": {
"front": {
"size_part_1": "205",
"size_part_2": "55",
"size_part_3": "16"
}
}
}'Authentication
POST api/partner/auth | POST api/account/auth
To be able to search you should authorize and get token. Use Partner or Account token.
Request Example
curl --location 'https://devdemo.tireconnect.ca/api/partner/auth' \
--header 'Content-Type: application/json' \
--data '{
"client_id": "{{client_id}}",
"client_secret": "{{client_secret}}"
}'Request parameters
client_id | Client ID required |
|---|---|
client_secret | Client Secret required |
Response Example
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJkZWFsZXJfbG9jYXRpb24iOjEyNjc0LCJleHAiOjE1NjA1MjY1ODl9.uEjbXiu1EoZ5E9IyXDz4JEVySY4C_C5mYXCC6SsGTwOCXyU3tHJU79FJkh5X2uMUlJttIQwoyC1HqljDl7_zIj-6XxvT-ismKDmdW7z7ZqrsGi6N3VACx9Rt1o3aJvBdDkSw4QfqhE8DZlLsYDH-TIGEOUP6E462Rfxn8bE149g",
"expire": 900
}Response Parameters
token | Authorisation token |
|---|---|
expire | expire time |
Suppliers Connected to Location
He highly recommend to use this method to get common information about specific supplier in ordering array. Please see description below response example.
Request example
curl --location 'https://devdemo.tireconnect.ca/api/location/v1/tire/supplier-connection/list' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--header 'token: {{token}}' \
--data '{
"location_id": {{location_id}}
}'Response example
{
"success": true,
"data": {
"items": [
{
"supplier_id": "AF",
"supplier_connection_id": "usautoforce",
"supplier_connection_name": "U.S. AutoForce",
"is_internal": false,
"ordering": {
"enabled": true,
"max_items_per_order": 25,
"branch_required": true,
"multiple_branch": false
},
"availability": null
},
{
"supplier_id": "TH",
"supplier_connection_id": "tirehub",
"supplier_connection_name": "TireHub",
"is_internal": false,
"ordering": {
"enabled": true,
"max_items_per_order": 10,
"branch_required": true,
"multiple_branch": false
},
"availability": null
},
{
"supplier_id": "LI-TEST",
"supplier_connection_id": "discountgroup",
"supplier_connection_name": "Discount Group",
"is_internal": false,
"ordering": null,
"availability": null
},
{
"supplier_id": "FMT",
"supplier_connection_id": "fairmonttire",
"supplier_connection_name": "Fairmont Tire",
"is_internal": false,
"ordering": {
"enabled": true,
"max_items_per_order": 25,
"branch_required": true,
"multiple_branch": true
},
"availability": null
},
{
"supplier_id": "TR",
"supplier_connection_id": "trwholesale",
"supplier_connection_name": "TR Wholesale",
"is_internal": false,
"ordering": {
"enabled": true,
"max_items_per_order": 12,
"branch_required": false,
"multiple_branch": false
},
"availability": null
},
]
},
"meta": {
"total": 5
}
}Useful response parameters
supplier_id | Global supplier ID. Can be used to map supplier across different systems |
|---|---|
supplier_connection_id | Connection ID. Used in stock method |
supplier_connection_name | Connection nice name. Can be used to show to a customer as a connection label |
ordering | Set of settings specific to ordering flow. In case supplier don’t support ordering will be null |
enabled | Settings that shows if ordering enabled for specific connection |
max_items_per_order | Max items that can be ordered in one order |
branch_required | Specifies if branch should be passed in order or no |
multiple_branch | Specifies if tires from different branches can be passed in one order |
Detailed Tire Stock
POST api/tire/search/v1/by/catalog-id
You should use this method to retrieve detailed tire stock information by supplier.
Please note that you must set the "group_results": false parameter in order to receive stock information for each supplier separately.
Additionally, if you need more detailed stock information, such as inventory broken down by warehouse, please include the following parameter in your request:"include": ["supplier_info"]
If you need to retrieve stock information for a specific supplier, use the supplier_connection_ids array to limit the results to the required supplier(s).
Request Example
curl --location 'https://devdemo.tireconnect.ca/api/tire/search/v1/by/catalog-id' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--header 'token: {{token}}' \
--data '{
"min_quantity": 1,
"location_id": {{location_id}},
"catalog_ids": [
2336,
1576,
464
],
"group_results": false,
"include": [
"supplier_info"
]
}'
Ordering
Authentication
GET /api/location/auth/token
To be able to order you should authorize and get token.
Use Location Authorize method (/api/location/auth/token) which requires location, and token that was used for search methods.
Request Example
curl --location 'https://devdemo.tireconnect.ca/api/location/auth/token' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--header 'token: {{token}}' \
--data '{
"location_id": {{location_id}}
}'Request parameters
location_id | Dealer location required |
|---|---|
token | Token that were used in search method required |
Response Example
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJkZWFsZXJfbG9jYXRpb24iOjEyNjc0LCJleHAiOjE1NjA1MjY1ODl9.uEjbXiu1EoZ5E9IyXDz4JEVySY4C_C5mYXCC6SsGTwOCXyU3tHJU79FJkh5X2uMUlJttIQwoyC1HqljDl7_zIj-6XxvT-ismKDmdW7z7ZqrsGi6N3VACx9Rt1o3aJvBdDkSw4QfqhE8DZlLsYDH-TIGEOUP6E462Rfxn8bE149g",
"expire": 900
}Response Parameters
token | Authorisation token |
|---|---|
expire | expire time |
Supplier Fields
GET /api/supplier/{supplier_connection_id}/fields
Request example
curl --location 'https://devdemo.tireconnect.ca/api/supplier/{{supplier_connection_id}}/fields?tires=S2VsbHl8fDM1NjYwNjEwN3x8dGlyZWh1Ynx8MTM1Njd8fEI%3D%2CU3RhcmZpcmV8fDE2MjE5NDAwMXx8dGlyZWh1Ynx8MTM1Njd8fEI%3D&quantities=1%2C1&branches=103%2C103' \
--header 'token: {{token}}'Request parameters
supplier_connection_id | Supplier connection ID |
|
|---|---|---|
tire_ids | Tire IDs |
|
quantities | Tire quantities | We recommend to make additional call to this method when user changing quantity as some fields can be changed according to it |
branches | Tire branches required | Some suppliers may vary accepted fields and their values based on the selected branch. |
Response example
[
{
"tag": "input",
"label": "PO number",
"description": "Purchase Order Number",
"attributes": {
"name": "po_number",
"required": true,
"type": "text",
"maxlength": 20,
"minlength": 3
},
"default": null,
"hidden": false,
"required_for_pricing": false
},
{
"tag": "textarea",
"label": "Delivery Instructions",
"description": "Shipping and Delivery Instructions",
"attributes": {
"name": "deliveryInstructions",
"required": false,
"maxlength": 255
},
"default": null,
"hidden": false,
"required_for_pricing": false
},
{
"tag": "select",
"label": "Delivery method",
"description": "Delivery Method",
"attributes": {
"name": "deliveryMethod",
"required": true
},
"default": "UPS",
"hidden": false,
"required_for_pricing": true,
"options": []
}
]Every item of response describes a fields which required for order or can be additionally sent with the order.
NOTE: Also for “select” type of fields, options list was extended, disabled property introduced.
When disabled is true, this option is not allowed to be passed, but we recommend to show it to the user, but as an unavailable option, as soon as for another quantity amount, it could be available. If disabled is false, option is available as earlier.
Response Example
[
{
"tag": "select",
"label": "Delivery method",
"description": "Delivery Method",
"attributes": {
"name": "deliveryMethod",
"required": true
},
"default": "UPS",
"hidden": false,
"required_for_pricing": true,
"options": [
{
"value": "2DA",
"text": "UPS 2nd Day Air",
"disabled": true
},
{
"value": "CPU",
"text": "Customer Pick-Up",
"disabled": false
}
]
}
]
Pre-Ordering Info
POST /api/supplier/order/preOrderingInfo
This method will show you actual tire availability and depending on requested qty/delivery method/requested date/ect
Request example
curl --location 'https://devdemo.tireconnect.ca/api/supplier/order/preOrderingInfo' \
--header 'Content-Type: application/json' \
--header 'token: {{token}}' \
--data '{
"tires":[
{
"tire_id":"TGF1ZmVubnx8MTAxNjc1OXx8ZmFpcm1vbnR0aXJlfHwxMjY3NHx8Qg==",
"quantity":1,
"branch": "3" //please read parameters description
},
{
"tire_id":"SGFua29va3x8MTAyNjk5M3x8ZmFpcm1vbnR0aXJlfHwxMjY3NHx8Qg==",
"quantity":2,
"branch": "8" //please read parameters description
}
],
"supplier_fields":{
"po_number":"TEST PO",
"delivery_type":"2",
"delivery_instructions":"Some instructions"
}
}'Request parameters
token string | Authorisation token required |
|---|---|
tires | Array of tires with quantities |
tires.tire_id string | Tire ID required |
tires.quantity | Tire Quantity |
tires.branch | Supplier branch |
supplier_fields | Object with supplier filelds |
Response example
{
"tires": [
{
"cost": 90.39,
"tire_id": "TmV4ZW58fDE1MTQ4TlhLfHxhdGRudGR8fDEyNjcxfHxC",
"branch": null,
"fet": 0,
"fet_source": "vendor",
"quantity": 2,
"quantity_available": 6,
"stock_available": [
{
"branch": "local",
"id": "local",
"branch_type": "primary",
"quantity": 6,
"name": "Local - Same-day delivery (if ordered before cut off time)",
"ship_data": null,
"address": null,
"contact": null,
"delivery_date_time": {
"date": "2024-04-04",
"time": null,
"timezone": null,
"notes": null
},
"cutoff": {
"date": "2024-04-03",
"time": "22:30",
"timezone": "-05:00"
},
"distance": null,
"distance_unit": null
}
],
"delivery_date_time": {
"date": "2024-04-04",
"time": null,
"timezone": null
}
},
{
"cost": 58.39,
"tire_id": "SXJvbm1hbnx8OTg0Njl8fGF0ZG50ZHx8MTI2NzF8fEI=",
"branch": null,
"fet": 0,
"fet_source": "vendor",
"quantity": 2,
"quantity_available": 69,
"stock_available": [
{
"branch": "local",
"id": "local",
"branch_type": "primary",
"quantity": 69,
"name": "Local - Same-day delivery (if ordered before cut off time)",
"ship_data": null,
"address": null,
"contact": null,
"delivery_date_time": {
"date": "2024-04-04",
"time": null,
"timezone": null,
"notes": null
},
"cutoff": {
"date": "2024-04-03",
"time": "22:30",
"timezone": "-05:00"
},
"distance": null,
"distance_unit": null
}
],
"delivery_date_time": {
"date": "2024-04-04",
"time": null,
"timezone": null
}
}
],
"cost": 90.39,
"quantity": 2,
"quantity_available": 6,
"stock_available": [
{
"branch": "local",
"id": "local",
"branch_type": "primary",
"quantity": 6,
"name": "Local - Same-day delivery (if ordered before cut off time)",
"ship_data": null,
"address": null,
"contact": null,
"delivery_date_time": {
"date": "2024-04-04",
"time": null,
"timezone": null,
"notes": null
},
"cutoff": {
"date": "2024-04-03",
"time": "22:30",
"timezone": "-05:00"
},
"distance": null,
"distance_unit": null
}
],
"total_cost": 297.56,
"total_fet": 0,
"shipping_cost": null,
"total_order": 297.56,
"delivery_date_time": {
"date": "2024-04-04",
"time": null,
"timezone": null
}
}Response parameters
tire_id | Tire ID |
|---|---|
branch | Branch ID |
cost | Tire Cost |
fet | FET |
quantity | Selected tire quantity |
quantity_available | Available quantity for this tire |
stock_available | List of branches with quantities where this tire currently available |
branch | Branch ID. Deprecated |
id | Branch ID |
quantity | Quantity available in this branch |
name | Branch name |
ship_data | Some shipping rules provided by the supplier |
address | Warehouse address |
contact | Warehouse contact details |
delivery_date_time | Estimated delivery date & time provided by the supplier |
cutoff | Cutoff |
distance | Distance from warehouse (provided by the supplier) |
distance_unit | Distance unit |
cost | Tire cost |
quantity | Selected quantity |
quantity_available | Available quantity |
total_cost | Total cost of tires in order |
total_fet | Total FET |
shipping_cost | Total shipping cost |
vendor_total_order | Total order counted by vendor. Can be null in case vendor don’t provide this information |
total_order | Total order counted by TireConnect |
delivery_date_time | Estimated delivery date & time provided by the supplier |
Order Create
POST /api/supplier/order/create
Request example
curl --location --request POST 'https://devdemo.tireconnect.ca/api/supplier/order/create?token="SUBSTITUTE_YOUR_TOKEN_HERE"' \
--header 'Content-Type: application/json' \
--header 'token: {{token}}' \
--data-raw '{
"tires":[
{
"tire_id":"TGF1ZmVubnx8MTAxNjc1OXx8ZmFpcm1vbnR0aXJlfHwxMjY3NHx8Qg==",
"quantity":1,
"branch": "3"
},
{
"tire_id":"SGFua29va3x8MTAyNjk5M3x8ZmFpcm1vbnR0aXJlfHwxMjY3NHx8Qg==",
"quantity":2,
"branch": "8"
}
],
"supplier_fields":{
"po_number":"TEST PO",
"delivery_type":"2",
"delivery_instructions":"Some instructions"
}
}'Request parameters
tire_id | Tire ID |
|---|---|
quantity | Tire quantity |
branch | Supplier branch |
supplier_fields | Object with supplier filelds |
Response example
{
"order_id":16172,
"invoice":"LG30537",
"shipping_cost":135.4,
"tires":[
{
"id":"QnJpZGdlc3RvbmV8fDAxMjAwMXx8dHJ3aG9sZXNhbGV8fDEyNjc0fHxC",
"part_number":"012001",
"quantity_demand":4,
"quantity_ordered":4,
"price":117.75,
"price_ordered":117.75,
"status":"Successful",
"message":"",
"delivery_date_time":{
"date":"2023-06-25",
"time":"16:45:00",
"timezone":"+02:00"
}
},
{
"id":"QnJpZGdlc3RvbmV8fDAwNjA3MHx8dHJ3aG9sZXNhbGV8fDEyNjc0fHxC",
"part_number":"006070",
"quantity_demand":4,
"quantity_ordered":4,
"price":128.75,
"price_ordered":128.75,
"status":"Successful",
"message":"",
"delivery_date_time":{
"date":"2023-06-25",
"time":"16:45:00",
"timezone":"+02:00"
}
}
],
"status":"Successful",
"message":"The order successfully submitted.",
"delivery_date_time":{
"date":"2023-06-25",
"time":"16:45:00",
"timezone":"+02:00"
}
}Response parameters
order_id | Order ID in TireConnect system |
|---|---|
invoice | Invoice ID returned by supplier |
shipping_cost | Shipping cost of order |
vendor_total_order | Total order counted by vendor. Can be null in case vendor don’t provide this information |
total_order | Total order counted by TireConnect |
tires | Array of tires |
id | Tire ID |
part_number | Tire part number |
quantity_demand | Requested tire quantity |
quantity_ordered | Ordered tire quantity |
price | Requested tire price |
price_ordered | Ordered tire price |
status | Tire status in order |
message | Message returned by supplier for each tire |
status | Order status |
message | Message returned by supplier for whole order |
delivery_date_time | Estimated Delivery Date & Time provided by the supplier |
Order Status
POST /api/supplier/order/status
This method used for receiving order status from the supplier.
Request Example
curl --location 'https://devdemo.tireconnect.ca/api/supplier/order/status' \
--header 'token: {{token}}' \
--header 'Content-Type: application/json' \
--data '{
"location_id": {{location_id}},
"id": 34850
}'Request parameters
token | Authorisation token required |
|---|---|
location_id | Location ID which was used for placing an order |
id | Order ID |
Response Example
{
"data": {
"items": [
{
"order_id": 34850,
"status": "Successful",
"vendor_status": "Approved"
}
]
}
}Response parameters
order_id | Order ID |
|---|