Globe Trade API Walkthrough

Two journeys against the sandbox — 2022 Isuzu D-Max, spec 1.10.0. Every response below is exactly what the API returned; the key is masked as $KEY.

Setup
BASE=https://api-sandbox.globeparts.com.au/trade/v1

The key goes in the X-Globe-Api-Key header. No login call, no token exchange — the key is the whole authentication.

Using Postman? No need to build these requests by hand — choose Import and give it https://docs.globeparts.com.au/spec.yaml, and Postman generates a collection with every endpoint. Set your key once at the collection level (Authorization → API Key, key X-Globe-Api-Key, add to Header) and every call on this page is ready to send.

Journey A

A real IVDS report, straight to a placed order

The vehicle arrives as an InfoAgent IVDS report — the shape a caller gets from a plate or VIN lookup, not something typed by hand. Forward it verbatim under vehicle.infoagentReport, outer data wrapper and all; the API reads data.result and ignores the rest — the identification block included. Plate and VIN play no part in glass matching.

Step A1

Health first — what "fresh" means

RequestGET /health
curl -sS \
  -H "X-Globe-Api-Key: $KEY" \
  "$BASE/health"
2000.17 s
{
  "status": "healthy",
  "stockFreshAsOf": "2026-08-27T09:10:15.825736+00:00",
  "readBackend": "liverelay",
  "catalogueBuiltAt": "2026-08-27T08:10:37.936811+00:00",
  "mode": "sandbox"
}

Step A2

The IVDS report → one windscreen

The vehicle fields below — make, model, year, sub-model, body type, doors, and the three equipment flags that matter to glass — are a real 2022 Isuzu D-MAX report's values from a genuine InfoAgent lookup. Hand us the report exactly as you received it, identification block and all (the plate and VIN shown here are the spec's placeholder values — yours will carry the real ones): the API reads data.result.vehicle.details and .specifications and ignores the rest. Asking for glassPositions: ["F"] up front — the front windscreen — is one call, not a search-then-narrow pair. The response below is a genuine live capture:

RequestPOST /fitment/glass
curl -sS \
  -H "X-Globe-Api-Key: $KEY" \
  -H 'Content-Type: application/json' \
  -d '{
      "vehicle": {
        "source": "infoagent",
        "infoagentReport": {
          "data": {
            "type": "IVDS_AU_ADAS_REPORT",
            "result": {
              "responseCode": "SUCCESS",
              "vehicle": {
                "identification": {
                  "plate": "1TAG123",
                  "state": "WA",
                  "vin": "JTEBH3FJ50K000000"
                },
                "details": {
                  "year": 2022,
                  "make": "ISUZU",
                  "model": "D-MAX",
                  "subModel": "LS-M",
                  "series": null,
                  "bodyType": "Utility",
                  "doors": 4
                },
                "specifications": {
                  "informationDisplayHeadUp": "NOT_AVAILABLE",
                  "rainSensorAutoWipers": "STANDARD",
                  "camerasADASOnly": "NOT_AVAILABLE"
                }
              }
            }
          }
        }
      },
      "glassPositions": [
        "F"
      ]
    }' \
  "$BASE/fitment/glass"
2000.20 s · coverage: full · relaxed on badge
{
  "vehicleResolved": {
    "make": "ISUZU",
    "model": "D-MAX",
    "year": 2022,
    "series": null,
    "badge": "LS-M",
    "bodyType": "UTILITY",
    "features": {
      "rainSensor": true
    },
    "matchedOn": [
      "make",
      "model",
      "year",
      "bodyType"
    ],
    "unresolved": [
      "badge"
    ],
    "absentFromRequest": [
      "series"
    ],
    "catalogueOptions": {
      "badge": []
    }
  },
  "coverage": "full",
  "branch": {
    "code": "PER",
    "name": "Perth HQ"
  },
  "currency": "AUD",
  "gstRate": 0.1,
  "stockAsOf": "2026-08-27T08:10:37Z",
  "relaxation": {
    "relaxedOn": [
      "badge"
    ]
  },
  "matches": [
    {
      "sku": "ISDM21-LFW-MROY",
      "description": "ISUZU D-MAX 07/20 - 04/24 WINDSCREEN (MB+RS+CAM+MLG)",
      "glassPosition": "F",
      "confidence": "catalogue",
      "glassAttributes": [
        "mirror_button",
        "rain_sensor",
        "adas",
        "top_moulding"
      ],
      "quantityRequested": 1,
      "status": "in_stock",
      "quantityAvailable": 101,
      "canFulfil": true,
      "imageUrl": "https://api-sandbox.globeparts.com.au/media/parts/ISDM21%20LFWMROY.jpg",
      "crossReferences": {
        "eurocode": null,
        "nagsau": [],
        "oemNumbers": [
          "8975553992",
          "1K0A63901"
        ],
        "alternatePartNumbers": [],
        "supersededBy": null
      }
    }
  ]
}

One call, one part. The match carries live stock (status: in_stock, quantityAvailable: 101) and a photo you can show the customer (imageUrl, served from our own origin), plus crossReferences.oemNumbers inline — no second call for any of those. The one thing deliberately not here is price: fitment stays fast enough to sit behind a search box, and pricing is live against your account, so it rides the next call — send the SKU to POST /availability (step A3) and you get your price and a stock re-read in one hit.

Step A3

Live price and stock

RequestPOST /availability
curl -sS \
  -H "X-Globe-Api-Key: $KEY" \
  -H 'Content-Type: application/json' \
  -d '{
      "lines": [
        {
          "sku": "ISDM21-LFW-MROY",
          "quantity": 1
        }
      ]
    }' \
  "$BASE/availability"
2003.1 s · live-priced
{
  "branch": {
    "code": "PER",
    "name": "Perth HQ"
  },
  "currency": "AUD",
  "gstRate": 0.1,
  "pricedAt": "2026-08-27T09:10:23Z",
  "stockAsOf": "2026-08-27T09:10:23Z",
  "lines": [
    {
      "sku": "ISDM21-LFW-MROY",
      "quantityRequested": 1,
      "status": "in_stock",
      "quantityAvailable": 101,
      "canFulfil": true,
      "unitExGst": "222.00",
      "unitIncGst": "244.20",
      "lineExGst": "222.00",
      "lineIncGst": "244.20"
    }
  ],
  "delivery": {
    "metro": null,
    "reason": "no_postcode_supplied"
  }
}
These figures are live sandbox account pricing at the moment of the call — they will drift. pricedAt / stockAsOf are the moment of this call, not a cached number; re-run it before quoting. 101 on hand at Perth HQ comfortably covers a one-off windscreen order. delivery.metro is null because this call carried no deliverTo postcode.

Step A3b

The account's real delivery time

This account's own configured delivery runs — separate from any one order:

RequestGET /delivery-schedule
curl -sS \
  -H "X-Globe-Api-Key: $KEY" \
  "$BASE/delivery-schedule"
2000.17 s
{
  "branch": {
    "code": "MALAGA",
    "name": "Malaga"
  },
  "runs": [
    {
      "run": "morning",
      "deliveryWindow": {
        "start": "10:00",
        "end": "11:00"
      },
      "orderBy": {
        "time": "16:30",
        "dayPrior": true
      }
    },
    {
      "run": "afternoon",
      "deliveryWindow": {
        "start": "13:30",
        "end": "14:30"
      },
      "orderBy": {
        "time": "12:00",
        "dayPrior": false
      }
    }
  ]
}

This is the delivery-time answer for this account. Every order dispatches from our Perth (Welshpool) branch — the branch in this response is your store, the delivery destination, and the runs are when our truck reaches it. This account is the Malaga store, which takes two runs a day: a morning window (10:00–11:00) with a day-prior cutoff — order by 16:30 the day before — and a same-day afternoon window (13:30–14:30) cutting off at noon. Order before a run's cutoff and it goes out on that run. This endpoint answers for your account, not for one order — check it once, not per order.

Step A4

Place the order

Idempotency-Key is a required header — a fresh UUID per order attempt, reused on any retry of that same attempt. Replaying a key that already succeeded returns the original order and creates nothing; reusing a key with a different body is rejected. This one is real and sandbox-only:

RequestPOST /orders
curl -sS \
  -H "X-Globe-Api-Key: $KEY" \
  -H 'Content-Type: application/json' \
  -H "Idempotency-Key: 4f9092a7-57e9-448b-b729-fb5e2e435b82" \
  -d '{
      "partnerReference": "WALKTHROUGH-A-20260827",
      "fulfilment": {
        "method": "local_delivery",
        "deliveryAddress": {
          "line1": "12 Example Road",
          "suburb": "Malaga",
          "state": "WA",
          "postcode": "6090"
        },
        "instructions": "Walkthrough capture — GOE-0736, sandbox only."
      },
      "lines": [
        {
          "sku": "ISDM21-LFW-MROY",
          "quantity": 1
        }
      ],
      "vehicleContext": {
        "make": "ISUZU",
        "model": "D-MAX",
        "year": 2022
      }
    }' \
  "$BASE/orders"
2010.50 s
{
  "orderId": "GP-B2AA0BB67130",
  "partnerReference": "WALKTHROUGH-A-20260827",
  "submissionKey": "4f9092a7-57e9-448b-b729-fb5e2e435b82",
  "status": "received",
  "placedAt": "2026-08-27T09:10:28.802151+00:00",
  "lineCount": 1,
  "totalExGst": {
    "amount": "222.00",
    "currency": "AUD"
  },
  "totalIncGst": {
    "amount": "244.20",
    "currency": "AUD"
  },
  "lines": [
    {
      "sku": "ISDM21-LFW-MROY",
      "partnerLineReference": null,
      "quantityOrdered": 1,
      "unitPriceExGst": {
        "amount": "222.00",
        "currency": "AUD"
      },
      "lineTotalExGst": {
        "amount": "222.00",
        "currency": "AUD"
      }
    }
  ],
  "fulfilment": {
    "method": "local_delivery",
    "deliveryAddress": {
      "line1": "12 Example Road",
      "line2": null,
      "suburb": "Malaga",
      "state": "WA",
      "postcode": "6090",
      "contactName": null,
      "contactPhone": null
    },
    "instructions": "Walkthrough capture — GOE-0736, sandbox only."
  },
  "gstTotal": {
    "amount": "22.20",
    "currency": "AUD"
  },
  "updatedAt": "2026-08-27T09:10:28.802187+00:00"
}

Placing an order commits you to it — there is no cancellation endpoint. To change or cancel, email dev@globeparts.com.au; once the branch processes it you'll see status: cancelled on a read. This call priced the order fresh at submission — no expectedTotalExGst guard was sent, so any total would have been accepted. The proof your order exists is the read-back: call GET /orders/{orderId} and the orderId and status it returns are the record.

Step A5

The order, read back

RequestGET /orders/{orderId}
curl -sS \
  -H "X-Globe-Api-Key: $KEY" \
  "$BASE/orders/GP-B2AA0BB67130"
2000.17 s
{
  "orderId": "GP-B2AA0BB67130",
  "partnerReference": "WALKTHROUGH-A-20260827",
  "submissionKey": "4f9092a7-57e9-448b-b729-fb5e2e435b82",
  "status": "received",
  "placedAt": "2026-08-27T09:10:28.802151+00:00",
  "lineCount": 1,
  "totalExGst": {
    "amount": "222.00",
    "currency": "AUD"
  },
  "totalIncGst": {
    "amount": "244.20",
    "currency": "AUD"
  },
  "lines": [
    {
      "sku": "ISDM21-LFW-MROY",
      "partnerLineReference": null,
      "quantityOrdered": 1,
      "unitPriceExGst": {
        "amount": "222.00",
        "currency": "AUD"
      },
      "lineTotalExGst": {
        "amount": "222.00",
        "currency": "AUD"
      }
    }
  ],
  "fulfilment": {
    "method": "local_delivery",
    "deliveryAddress": {
      "line1": "12 Example Road",
      "line2": null,
      "suburb": "Malaga",
      "state": "WA",
      "postcode": "6090",
      "contactName": null,
      "contactPhone": null
    },
    "instructions": "Walkthrough capture — GOE-0736, sandbox only."
  },
  "gstTotal": {
    "amount": "22.20",
    "currency": "AUD"
  },
  "updatedAt": "2026-08-27T09:10:28.802187+00:00"
}

Coverage

Coverage grades our answer, not the car

coverage never scores how complete the vehicle's own glass is — it scores how complete our answer is, for exactly what you asked.

It promises nothing about panes the car has that we don't stock, and nothing about positions you didn't request. Journey A asked for one position and got it — that says nothing about the other six glass positions on this D-MAX. A full response can still leave individual lines out_of_stock — coverage is about whether we have an answer for the position, not whether that answer is sitting on the shelf. Check each match's own status/canFulfil for that.


Journey B

The same vehicle, entered by hand — and the retry that gets it right

No IVDS report this time — just make, model and year, typed or looked up from somewhere else. Leave out bodyType and the API refuses rather than guess; the refusal itself tells you what to send next.

Step B1

The miss — no bodyType, and the 422 that teaches you the fix

RequestPOST /fitment/glass
curl -sS \
  -H "X-Globe-Api-Key: $KEY" \
  -H 'Content-Type: application/json' \
  -d '{
      "vehicle": {
        "source": "attributes",
        "attributes": {
          "make": "ISUZU",
          "model": "D-MAX",
          "year": 2022
        }
      }
    }' \
  "$BASE/fitment/glass"
4220.18 s
{
  "type": "https://api.globeparts.com.au/problems/vehicle-unresolved",
  "title": "Vehicle could not be resolved",
  "status": 422,
  "detail": "the vehicle is missing bodyType — make, model, year and bodyType are never relaxed",
  "instance": "32048c6e0dd4d8bf3b9dbf00377a7875",
  "requestId": "32048c6e0dd4d8bf3b9dbf00377a7875",
  "catalogueOptions": {
    "bodyType": [
      "UTE DUAL CAB",
      "UTE SINGLE CAB",
      "UTE SPACE CAB"
    ]
  }
}

Notice the attributes sit nested one level down, under vehicle.attributes — not flat on vehicle itself. Get that nesting wrong and you get a different refusal (a missing-vehicle 422) that doesn't carry catalogueOptions at all.

Step B2

Resubmit with the real value — full coverage, seven matches

Any one of the three listed values resolves it. Also asking for fitting materials this time — includeFittingMaterials: true pulls the mouldings and rubbers a fitter needs alongside the glass itself, priced and stocked:

RequestPOST /fitment/glass
curl -sS \
  -H "X-Globe-Api-Key: $KEY" \
  -H 'Content-Type: application/json' \
  -d '{
      "vehicle": {
        "source": "attributes",
        "attributes": {
          "make": "ISUZU",
          "model": "D-MAX",
          "year": 2022,
          "bodyType": "UTE DUAL CAB"
        }
      },
      "includeFittingMaterials": true
    }' \
  "$BASE/fitment/glass"
2000.17 s · coverage: full · 7 matches
{
  "vehicleResolved": {
    "make": "ISUZU",
    "model": "D-MAX",
    "year": 2022,
    "series": null,
    "badge": null,
    "bodyType": "UTE DUAL CAB",
    "features": {},
    "matchedOn": [
      "make",
      "model",
      "year",
      "bodyType"
    ],
    "unresolved": [],
    "absentFromRequest": [
      "series",
      "badge"
    ],
    "catalogueOptions": {}
  },
  "coverage": "full",
  "branch": {
    "code": "PER",
    "name": "Perth HQ"
  },
  "currency": "AUD",
  "gstRate": 0.1,
  "stockAsOf": "2026-08-27T08:10:37Z",
  "matches": [
    {
      "sku": "ISDM21-LFW-MROY",
      "description": "ISUZU D-MAX 07/20 - 04/24 WINDSCREEN (MB+RS+CAM+MLG)",
      "glassPosition": "F",
      "confidence": "catalogue",
      "glassAttributes": [
        "mirror_button",
        "rain_sensor",
        "adas",
        "top_moulding"
      ],
      "quantityRequested": 1,
      "status": "in_stock",
      "quantityAvailable": 101,
      "canFulfil": true,
      "fittingMaterialSkus": [
        "ISDM21-FWM",
        "RS-P-OZ-ST10"
      ],
      "imageUrl": "https://api-sandbox.globeparts.com.au/media/parts/ISDM21%20LFWMROY.jpg",
      "crossReferences": {
        "eurocode": null,
        "nagsau": [],
        "oemNumbers": [
          "8975553992",
          "1K0A63901"
        ],
        "alternatePartNumbers": [],
        "supersededBy": null
      }
    },
    {
      "sku": "ISDM21-FD-LH-GY",
      "description": "LEFT FRONT DOOR GLASS W/FITT",
      "glassPosition": "FDL",
      "confidence": "catalogue",
      "glassAttributes": [
        "green_tint"
      ],
      "quantityRequested": 1,
      "status": "in_stock",
      "quantityAvailable": 11,
      "canFulfil": true,
      "fittingMaterialSkus": [],
      "imageUrl": "https://api-sandbox.globeparts.com.au/media/parts/ISDM21%20FDLH%20GY.jpg"
    },
    {
      "sku": "ISDM21-FD-RH-GY",
      "description": "RIGHT FRONT DOOR GLASS W/FITT",
      "glassPosition": "FDR",
      "confidence": "catalogue",
      "glassAttributes": [
        "green_tint"
      ],
      "quantityRequested": 1,
      "status": "in_stock",
      "quantityAvailable": 2,
      "canFulfil": true,
      "fittingMaterialSkus": [],
      "imageUrl": "https://api-sandbox.globeparts.com.au/media/parts/ISDM21%20FDRH%20GY.jpg"
    },
    {
      "sku": "ISDM21-RD-LH-GY",
      "description": "LEFT REAR DOOR GLASS W/FITT",
      "glassPosition": "RDL",
      "confidence": "catalogue",
      "glassAttributes": [
        "green_tint"
      ],
      "quantityRequested": 1,
      "status": "in_stock",
      "quantityAvailable": 10,
      "canFulfil": true,
      "fittingMaterialSkus": [],
      "imageUrl": "https://api-sandbox.globeparts.com.au/media/parts/ISDM21%20RDLH%20GY.jpg"
    },
    {
      "sku": "ISDM21-RD-RH-GY",
      "description": "RIGHT REAR DOOR GLASS W/FITT",
      "glassPosition": "RDR",
      "confidence": "catalogue",
      "glassAttributes": [
        "green_tint"
      ],
      "quantityRequested": 1,
      "status": "in_stock",
      "quantityAvailable": 5,
      "canFulfil": true,
      "fittingMaterialSkus": [],
      "imageUrl": "https://api-sandbox.globeparts.com.au/media/parts/ISDM21%20RDRH%20GY.jpg"
    },
    {
      "sku": "ISDM21-RW-TGHX",
      "description": "REAR HEATED WINDOW GREEN",
      "glassPosition": "RW",
      "confidence": "catalogue",
      "glassAttributes": [
        "tempered",
        "heater"
      ],
      "quantityRequested": 1,
      "status": "out_of_stock",
      "quantityAvailable": 0,
      "canFulfil": false,
      "fittingMaterialSkus": [],
      "imageUrl": "https://api-sandbox.globeparts.com.au/media/parts/ISDM21%20RWTGHX.jpg"
    },
    {
      "sku": "ISDM21-RW-TPHX",
      "description": "REAR HEATED WINDOW PRIVACY GREY",
      "glassPosition": "RW",
      "confidence": "catalogue",
      "glassAttributes": [
        "tempered",
        "heater"
      ],
      "quantityRequested": 1,
      "status": "in_stock",
      "quantityAvailable": 3,
      "canFulfil": true,
      "fittingMaterialSkus": [],
      "imageUrl": "https://api-sandbox.globeparts.com.au/media/parts/ISDM21%20RWTPHX.jpg"
    }
  ],
  "fittingMaterials": {
    "ISDM21-FWM": {
      "sku": "ISDM21-FWM",
      "description": "WINDSCREEN MOULD (526351) (OZ-686)",
      "relationship": "moulding",
      "availability": {
        "status": "out_of_stock",
        "branchCode": "PER",
        "quantityAvailable": 0,
        "stockAsOf": "2026-08-27T08:10:37Z"
      }
    },
    "RS-P-OZ-ST10": {
      "sku": "RS-P-OZ-ST10",
      "description": "SENSORFIX RAIN SENSOR PAD – 31MM (ROUND) OZ-SF10",
      "relationship": "accessory",
      "availability": {
        "status": "in_stock",
        "branchCode": "PER",
        "quantityAvailable": 63,
        "stockAsOf": "2026-08-27T08:10:37Z"
      }
    }
  }
}
Two rear-window variants share glassPosition: "RW" — green tint (out of stock today) and privacy grey (3 on hand). glassPosition narrows to a slot on the vehicle, not to a single SKU — a fitter still picks by tint/attribute. Only the windscreen names fitting materials (fittingMaterialSkus); the moulding is out of stock at Perth today, the rain sensor pad is not — real information the door-glass rows don't need to carry, because none of them named a fitting material.

Step B3

One part, in detail — the same windscreen, confirmed by cross-reference

Two different paths — a real IVDS report in Journey A, a hand-typed retry here in Journey B — land on the same real part. Asking for it directly confirms it:

RequestGET /products/{sku}
curl -sS \
  -H "X-Globe-Api-Key: $KEY" \
  "$BASE/products/ISDM21-LFW-MROY"
2000.23 s
{
  "sku": "ISDM21-LFW-MROY",
  "description": "ISUZU D-MAX 07/20 - 04/24 WINDSCREEN (MB+RS+CAM+MLG)",
  "productType": "windscreen",
  "longDescription": "WINDSCREEN WITH MIRROR BUTTON, RAIN SENSOR, CAMERA X2 (ADAS) AND MOULDING",
  "glassPosition": "F",
  "glassAttributes": [
    "mirror_button",
    "rain_sensor",
    "adas",
    "top_moulding"
  ],
  "manufacturingStandard": "aftermarket",
  "brand": null,
  "crossReferences": {
    "eurocode": null,
    "nagsau": [],
    "oemNumbers": [
      "8975553992",
      "1K0A63901"
    ],
    "alternatePartNumbers": [],
    "supersededBy": null
  },
  "barcodes": [],
  "glassSize": "1458*849",
  "imageUrls": [
    "https://api-sandbox.globeparts.com.au/media/parts/ISDM21%20LFWMROY.jpg",
    "https://api-sandbox.globeparts.com.au/media/parts/ISDM21%20LFWMROY_2.jpg",
    "https://api-sandbox.globeparts.com.au/media/parts/ISDM21%20LFWMROY_3.jpg"
  ],
  "status": "active"
}

crossReferences.oemNumbers carries the OEM part numbers for cross-checking against a customer's own reference — the same two values Journey A's inline match already showed. nagsau, eurocode, alternatePartNumbers and supersededBy are declared by the contract and not populated for this SKU today — don't read the empties as "this part has none." manufacturingStandard: "aftermarket" — this is not a genuine-OE windscreen. The product endpoint doesn't add anything the fitment call didn't already carry inline; it's the same data, addressable by SKU alone.


Timings observed on this run

CallWall time
GET /health0.17 s
POST /fitment/glass (IVDS, one position)0.20 s
POST /availability (one line)3.1 s
GET /delivery-schedule0.17 s
POST /orders0.50 s
GET /orders/{orderId}0.17 s
POST /fitment/glass (missing bodyType, 422)0.18 s
POST /fitment/glass (resolved, fitting materials)0.17 s
GET /products/{sku}0.23 s

Catalogue-snapshot calls (fitment, products — including the 422 refusal, which is checked before anything is priced) answer in a few hundred milliseconds or less; /availability and /orders take longer because they re-resolve live account pricing at the moment of the call. Set your client timeout at 30 s.