Bidyear REST API

Versioned JSON API for auctions, lots, bids, invoices, webhooks, and more. Version 1.0.

Base URL

https://bidyear.com/api

Local development:

http://127.0.0.1:PORT/api (use your local artisan port)

The OpenAPI 3.1 specification is available at /docs/api/openapi.json — import it into Postman, Insomnia, or any OpenAPI-compatible tool.

Response envelope

All V1 endpoints return a consistent JSON structure:

{
  "success": true,
  "data": { ... },
  "message": "Optional human-readable message"
}

Paginated lists include a meta object:

{
  "success": true,
  "data": [ ... ],
  "meta": { "current_page": 1, "last_page": 4, "per_page": 15, "total": 56 }
}

Errors use success: false with an errors map and a machine-readable code.

Quick start

List active public auctions:

curl "https://bidyear.com/api/v1/auctions?per_page=10"

GeoJSON land map:

curl "https://bidyear.com/api/v1/lots/geojson?state=TX"
Public vs authenticated: Most read endpoints are public. Bid placement, invoices, and seller features require a Sanctum token with the appropriate ability. See Authentication.

Full endpoint index

MethodPathAuthDescription
PUBLIC — no authentication required
GET/v1/auctionsList active public auctions
GET/v1/auctions/{id|slug}Auction detail
GET/v1/auctions/{id}/lotsLots in an auction
GET/v1/lotsList active lots (land filters: acreage, county, state, zoning)
GET/v1/lots/geojsonGeoJSON FeatureCollection for map rendering
GET/v1/lots/{id}Lot detail with images and land fields
GET/v1/lots/{id}/bidsBid history (bidder identities anonymised)
GET/v1/categoriesCategory list; ?tree=true for nested hierarchy
GET/v1/categories/{id}Category detail
GET/v1/categories/{id}/childrenChild categories
GET/v1/categories/{id}/schemaDynamic field schema for a category
GET/v1/subscription-plansAvailable subscription plans
GET/v1/cross-listing-platformsIntegration platform directory
GET/v1/help/categoriesHelp center categories
GET/v1/help/search?q=Help article search
AUTHENTICATED — Sanctum bearer token required
GET/userAnyAuthenticated user (Jetstream compat)
GET/v1/meAnyAuthenticated user (v1 resource format)
GET/v1/me/verificationAnyVerification tier and account status
GET/v1/invoicesreadYour invoices (paginated)
GET/v1/invoices/{id}readInvoice detail
POST/v1/lots/{id}/bidswritePlace a bid via ProxyBiddingService
POST/v1/lots/{id}/watchlistwriteAdd to watchlist
DELETE/v1/lots/{id}/watchlistwriteRemove from watchlist
GET/v1/ad-campaignssellerYour ad campaigns
GET/v1/subscriptions/currentsellerCurrent subscription
GET/v1/webhook-subscriptionssellerList webhook subscriptions
POST/v1/webhook-subscriptionssellerCreate subscription
GET/v1/webhook-subscriptions/{id}sellerSubscription detail
PATCH/v1/webhook-subscriptions/{id}sellerUpdate subscription
DELETE/v1/webhook-subscriptions/{id}sellerDelete subscription
GET/v1/webhook-subscriptions/{id}/deliveriessellerDelivery log
POST/media/reorderwriteReorder media (or SPA session)
DELETE/media/{id}writeDelete media you own
INBOUND WEBHOOKS — HMAC verified, no Sanctum
POST/webhooks/stripeStripe-SignatureStripe inbound events
POST/webhooks/bid/{platform}HMACIncoming simulcast bid from platform
POST/webhooks/sold/{platform}HMACIncoming sold/hammer event from platform

Rate limiting

60 requests per minute per authenticated user or IP address (throttle:api). Exceeded requests return HTTP 429 Too Many Requests.