Dealer Inventory API Reference
For registered dealers only (paid dealer plan, dealer coupon, or free access we granted). Generate your key on your dashboard → Dealer Tools.
Prefer a spreadsheet? Use the CSV template. Non-technical overview: How it works.
Authentication
Send your key in the x-api-key header on every request. Keys are shown once — store it safely. Regenerating a key disables the old one.
Endpoints
- POST
https://outboardlistings.com/api/dealer/inventory— create or update units (up to 500 per request). - GET
https://outboardlistings.com/api/dealer/inventory— list your feed units. - Request body key:
inventory(array of units).listingsis also accepted as an alias, so older integrations keep working. - DELETE
https://outboardlistings.com/api/dealer/inventory— body{"ids":["LISTING_ID"]}(listing IDs from GET) sets those units inactive.
Example
Request headers
Content-Type: application/json x-api-key: YOUR_API_KEY
Request body
{
"fullSync": false,
"inventory": [
{
"stockNumber": "A1001",
"make": "Yamaha",
"model": "F150XB",
"year": 2022,
"hp": 150,
"price": 14999,
"condition": "Excellent",
"hours": 210,
"shaftLength": "25 in",
"city": "Fort Lauderdale",
"state": "FL",
"zipCode": "33316",
"photos": [
"https://yoursite.com/photos/a1001-1.jpg",
"https://yoursite.com/photos/a1001-2.jpg"
]
}
]
}Response (200)
{
"success": true,
"created": 1,
"updated": 0,
"skipped": 0,
"markedSold": 0,
"wouldMarkSold": 0,
"markSoldBlocked": null,
"errors": []
}curl
curl -X POST https://outboardlistings.com/api/dealer/inventory \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d @inventory.json
Fields
Required: make, model, price, state, zipCode. stockNumber is not required but strongly recommended, and must be unique in each request.
How repeat uploads match: a unit with the same stockNumber (or VIN / externalId) as an existing listing updates that listing. With no stock number, we match on year + make + model + HP, which can create duplicates or update the wrong unit when you carry identical motors.
| Field | Rule | Example | Notes |
|---|---|---|---|
| stockNumber | recommended | A1234 | Not required, but strongly recommended. Your unique stock # for the unit. Also accepted as: stock, sku, vin, serial, hin, unitId, externalId. Must be unique inside one file or request. Repeat uploads match existing listings by stock # first. Without one, they match on year + make + model + HP, which can create duplicates or update the wrong unit when you carry identical motors. |
| make | required | Yamaha | Engine brand. |
| model | required | F150XB | Model name or number. |
| price | required | 14999 | Asking price in US dollars. Numbers only. |
| state | required | FL | Two-letter state. If blank, your dealer home state is used. |
| zipCode | required | 33316 | ZIP code where the unit sits. |
| city | optional | Fort Lauderdale | City where the unit sits. |
| year | optional | 2022 | Model year. |
| hp | optional | 150 | Horsepower. |
| condition | optional | Used | New, Used, Excellent, Good, Fair or Needs Work. "Used" (or any other value) is saved as Good. Blank = Good in CSV, New in the API. |
| category | optional | used | new or used. If blank: CSV = used; API = new, or used when condition is anything other than New. |
| listingType | optional | engine | engine (default) or combo (boat + motor + trailer). |
| hours | optional | 210 | Engine hours. |
| shaftLength | optional | 25 in | 15 in, 20 in, 25 in or 30 in. |
| strokeType | optional | 4-Stroke | 2-Stroke or 4-Stroke. |
| fuelType | optional | Gasoline | Fuel type. |
| engineLayout | optional | V6 | Inline-4, V6, V8 and so on. |
| description | optional | One owner, serviced 2026. | Up to 5,000 characters. No WhatsApp/Telegram contact info. |
| photos | optional | https://yoursite.com/a.jpg|https://yoursite.com/b.jpg | Full https image URLs separated by | or ; (up to 12). In the API send an array. |
| hasWarranty | optional | true | true or false. |
| trailerIncluded | optional | false | true or false (combos). |
Full Sync rules
- fullSync: true means the request is your whole inventory. Active feed units not in it are marked sold.
- If any row fails validation, nothing is marked sold.
- If more than half of 10+ active units would be marked sold, the sync is blocked unless you send confirmMarkSold: true.
- Over 500 units: send several requests with fullSync: false, or use the bulk CSV uploader.
- Duplicate stock numbers in one request are rejected. Retrying the same request is safe — units match on stockNumber and update.
- The bulk CSV uploader shows a create / update / mark-sold preview, needs a confirm tick before marking sold, and has an Undo button after the sync.
Warning: pick ONE main inventory source
“Full Sync” means “this is my ENTIRE inventory.”
Any unit not in that upload is marked SOLD.
If a CSV and a feed BOTH run Full Sync and their lists differ, each one marks the other’s units as sold.
Using both is OK if you keep the same Stock #s and turn Full Sync ON for only ONE of them.
Run the other with Full Sync OFF (add / update only).
Error codes
- 400 — bad JSON, missing required fields, duplicate stock numbers, or blocked mark-sold.
- 401 — missing/invalid key, or the account is not a registered dealer.
- 403 — phone (SMS) verification required, or dealer tools not enabled.
Help: [email protected]