# AlgoDriven API

> Partner APIs for vehicle appraisals, VIN decode, pricing intelligence, and outbound webhooks.
> Keys are region-scoped (AU, US, GCC). Interactive docs: https://developer.algodriven.xyz

## Instructions for LLM Agents

- Auth is `Authorization: <api_key>` with **no** `Bearer` prefix.
- Pick a pack before calling anything. EvalExpert appraisals are not the AU / GCC data APIs. DriveExpert does not list or create drives — it delivers `ON_DRIVE_COMPLETED` webhooks.
- Do not mix sample VINs across markets. AU fixtures fail or return AU data on a US key.
- An eval is not Complete (and not visible in the apps) until `POST /dcupdateeval`.
- US VIN disambiguation: detect `descriptionSelect === true`. `EvalID` is already set; do not treat a present EvalID as “done”. Echo the chosen option’s `code` and `codeType` to `POST /manualcarentry`.
- EvalExpert photos: `/imageupload` takes one file per call. Read ids back with `/imagelist` (works before the eval is Complete, unlike `/geteval`). Gallery order and the hero photo are independent — `/imageorder` never moves the hero and `/imagehero` never moves a photo in the gallery; with nothing pinned the hero is the first photo in display order. Photo arrays are already in display order, so do not sort on `order`, which may be null.
- InspectExpert: one key per rooftop; never send `X-Dealer-Id`. Booking an inspection needs the rooftop's `serviceId` and `env: "PROD"`. Request timestamps are epoch seconds, response timestamps epoch milliseconds. There is no sandbox and no webhook — poll `GET /axle-api/inspection` for `status`. `POST /axle-api/inspection-status` only accepts `Canceled`.
- EvalExpert / DriveExpert: a dedicated single-dealer key is already bound to that rooftop — do not send `X-Dealer-Id`. A multi-rooftop partner key must send `X-Dealer-Id: <dealer uid>` (the rooftop `uid`, not numeric DealerID). AU / GCC data APIs never use `X-Dealer-Id`.
- Sandbox and production share the same paths. Use fixture VINs from each spec’s `x-sandbox` so lookups are not billed.
- Prefer the OpenAPI JSON over scraping Swagger UI. Endpoint contracts live in the specs; this file is routing and behaviour only.

## Specs

- [EvalExpert OpenAPI](https://developer.algodriven.xyz/evalexpert/openapi.json): appraisals, stock, eval webhooks (AU, US, and GCC keys)
- [DriveExpert OpenAPI](https://developer.algodriven.xyz/driveexpert/openapi.json): drive-completed webhooks
- [InspectExpert OpenAPI](https://developer.algodriven.xyz/inspectexpert/openapi.json): inspection booking, report, and cancellation
- [AU Data APIs](https://developer.algodriven.xyz/au/openapi.json): VIN decode, Pricing AI
- [GCC Data APIs](https://developer.algodriven.xyz/gcc/openapi.json): Factory VIN, Price Guide, Pricing AI
- [Pack catalog](https://developer.algodriven.xyz/api-docs/openapi.json): index of packs

## Optional

- [Human catalog](https://developer.algodriven.xyz/): Swagger UI entry
- [Developer guides](https://algodriven.xyz/developers/): narrative onboarding
- [Developer dashboard](https://dashboard.algodriven.co/developer): request sandbox and production keys
