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). listings is 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.

FieldRuleExampleNotes
stockNumberrecommendedA1234Not 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.
makerequiredYamahaEngine brand.
modelrequiredF150XBModel name or number.
pricerequired14999Asking price in US dollars. Numbers only.
staterequiredFLTwo-letter state. If blank, your dealer home state is used.
zipCoderequired33316ZIP code where the unit sits.
cityoptionalFort LauderdaleCity where the unit sits.
yearoptional2022Model year.
hpoptional150Horsepower.
conditionoptionalUsedNew, Used, Excellent, Good, Fair or Needs Work. "Used" (or any other value) is saved as Good. Blank = Good in CSV, New in the API.
categoryoptionalusednew or used. If blank: CSV = used; API = new, or used when condition is anything other than New.
listingTypeoptionalengineengine (default) or combo (boat + motor + trailer).
hoursoptional210Engine hours.
shaftLengthoptional25 in15 in, 20 in, 25 in or 30 in.
strokeTypeoptional4-Stroke2-Stroke or 4-Stroke.
fuelTypeoptionalGasolineFuel type.
engineLayoutoptionalV6Inline-4, V6, V8 and so on.
descriptionoptionalOne owner, serviced 2026.Up to 5,000 characters. No WhatsApp/Telegram contact info.
photosoptionalhttps://yoursite.com/a.jpg|https://yoursite.com/b.jpgFull https image URLs separated by | or ; (up to 12). In the API send an array.
hasWarrantyoptionaltruetrue or false.
trailerIncludedoptionalfalsetrue 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]