Upload a CSV
Export your inventory as a spreadsheet, upload it in your vendor
dashboard → ShedBid Connect, and every row becomes a live auction. Re-upload any time: rows carrying an
external_id (your SKU or stock number) update the same listing instead of duplicating it.
Columns
| Column | Required | Notes |
|---|---|---|
external_id | recommended | Your SKU. The upsert key - lets re-imports update instead of duplicate. |
building_type | yes | e.g. Lofted Barn, Utility Shed, Cabin |
size or width+length | yes | 12x24 works fine |
starting_price | yes | $4,500.00 or 4500 - both fine |
condition | no | new (default) or repo |
reserve_price, buy_it_now | no | Reserve is your hidden floor - bidders never see the number |
auction_days | no | 1-30, default 7 |
lot or zip | yes* | Lot name (as in your dashboard) or a ZIP. The lot's address becomes the listing location. |
delivery_radius_miles | no | How far you deliver; buyers outside it can't bid. Defaults to your company setting. |
photo_urls | no | Up to 8 public image URLs, separated by | - fetched and resized automatically |
rto_available, rto_down_payment, rto_monthly_payment, rto_term_months | no | Rent-to-own terms shown on the listing |
Auto-sync an inventory feed
Host that same CSV (or a JSON array) at a URL — most CRMs and shed-builder platforms can publish an export — save the URL in your dashboard, and ShedBid pulls it every hour. New units get listed, changed rows get updated, sold listings are left alone. Put a building on your feed today; it's on auction within the hour, with zero clicks.
The dashboard shows the result of every sync (created / updated / skipped / failed, with reasons), and you can trigger a pull manually any time.
REST API
Create an API key in your vendor dashboard and send it as a Bearer token. Machine-readable spec: /api/v1/openapi.json — point your integration platform (or your AI assistant) at it and it can wire itself up.
Quickstart
Endpoints
| Endpoint | What it does |
|---|---|
GET /api/v1/ping | Verify your key; returns your company + store URL |
GET /api/v1/lots | Your sale lots (for lot_id / lot) |
GET /api/v1/listings | Your listings; filter ?status=active or ?external_id=SKU |
POST /api/v1/listings | Create a listing (upserts by external_id) |
GET /api/v1/listings/{id} | One listing incl. bid history (numeric id or SLID) |
PATCH /api/v1/listings/{id} | Update fields. Fairness rule: once bids exist the reserve can be lowered, never raised. |
POST /api/v1/listings/{id}/end | Withdraw an active listing (only while it has no bids) |
POST /api/v1/import | Bulk: JSON array or raw CSV body (max 500 rows), per-row report back |
GET /api/v1/events?since_id=N | Poll bid/sold/ended events - the pull alternative to webhooks |
Rate limit: 120 requests/minute per key.
Errors come back as JSON: {"error": {"code", "message"}} with proper HTTP status codes
(401, 404, 409, 422, 429). Note: our host's firewall rejects body-less POSTs — always send a JSON body,
even an empty {} (e.g. on /end), with Content-Type: application/json.
Webhooks (we call you)
Save a webhook URL in your dashboard and ShedBid POSTs JSON events to it, checked every 5 minutes:
| Event | Fires when | Payload highlights |
|---|---|---|
listing.bid | A new bid lands on your listing | amount, bid_count, current_high, reserve_met |
listing.sold | Auction won or Buy It Now | sale_price + buyer name/email/phone - so your CRM can mark the unit sold and start the paperwork |
listing.ended | Auction ends unsold | reason (reserve_not_met / no_sale), high_bid |
ping | You press "Send test ping" | hello message |
Every delivery is signed. Verify the X-ShedBid-Signature header with the
signing secret from your dashboard:
Failed deliveries retry twice (on the next 5-minute ticks), then park in your delivery
log. Can't receive webhooks? Poll GET /api/v1/events instead - same events, pull style.
Zapier / Make / n8n
No custom app needed: use a plain HTTP request step with your Bearer key to create listings, and a webhook trigger step as the receiving end for sold/bid events. The flat JSON in and out is designed for exactly this.
Ground rules
- Auction integrity comes first. Once a listing has bids: reserve can be lowered, never raised; active auctions with bids can't be withdrawn - they run to their end time.
- Sold is sold. A sold listing is never modified by an import. Re-list a returned unit with
relist: trueor a freshexternal_id. - Photos: up to 8 per listing, fetched from your URLs, validated and resized server-side.
- Keys are shown once and stored hashed. Revoke instantly from the dashboard. Max 5 active keys.
- Not a vendor yet? Apply to sell on ShedBid - the API comes free with your account.