Bids

Bid history is public. Placing a bid requires authentication with the write ability. Watchlist management also requires write.

GET /api/v1/lots/{lot}/bids Public

Returns the bid history for a lot. Bidder identities are anonymised as Bidder #N. Proxy/max bid amounts are never exposed.

Path parameters

ParamTypeDescription
lotintegerLot ID

Response 200

{
  "success": true,
  "data": [
    {
      "id": 101,
      "amount": 15000.00,
      "is_proxy": false,
      "bidder": "Bidder #3",
      "is_winning": true,
      "placed_at": "2026-07-10T14:32:00Z"
    }
  ],
  "meta": { "current_page": 1, "last_page": 1, "per_page": 15, "total": 1 }
}
POST /api/v1/lots/{lot}/bids write ability

Places a bid. Runs through ProxyBiddingService — identical logic to the web UI.

Same engine as the web UI. Verification, deposit checks, proxy-war resolution, bid-placed events, and outbound webhook triggers all fire identically for API-placed bids.

Enforcement chain

  1. Lot and auction must be currently open for bidding
  2. Bidder verification tier check (bid amount vs. tier limit)
  3. Bid deposit registration check for the auction
  4. User capability service check
  5. Row-level lock to prevent concurrent bid races
  6. Proxy war logic — automatically outbids existing proxy holders if your amount exceeds their max
  7. Fires BidPlaced event → WebhookDispatchService::bidPlaced() → outbound partner webhooks

Request body

FieldTypeRequiredDescription
bid_amountnumberYesBid amount in the auction's currency
is_proxybooleanNoRegister as a max/proxy bid (default: false)

Example request

curl -X POST "https://bidyear.com/api/v1/lots/55/bids" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"bid_amount": 18500, "is_proxy": false}'

Response 200 — bid placed

{
  "success": true,
  "message": "Bid placed successfully",
  "data": {
    "id": 202,
    "amount": 18500.00,
    "is_proxy": false,
    "bidder": "You",
    "is_winning": true,
    "placed_at": "2026-07-12T09:15:00Z"
  }
}

Error responses

HTTPcodeCause
401unauthenticatedNo or invalid token
403insufficient_token_abilityToken lacks write
403bidder_not_verifiedVerification tier too low for this bid amount
403deposit_requiredBid deposit not registered for this auction
422bid_too_lowAmount does not exceed current bid + minimum increment
422auction_closedLot/auction not open
POST /api/v1/lots/{lot}/watchlist write ability

Adds the lot to the authenticated user's watchlist. Idempotent.

Response 200

{ "success": true, "message": "Added to watchlist" }
DELETE /api/v1/lots/{lot}/watchlist write ability

Removes the lot from the authenticated user's watchlist. Idempotent.

Response 200

{ "success": true, "message": "Removed from watchlist" }