POST /v3/item/:id/bid
POST
/v3/item/{itemId}/bid
const url = 'https://api-ha-prod-p8.handbid.dev/v3/item/example/bid';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': '*/*'}, body: '"{\n \"amount\": 25\n}"'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api-ha-prod-p8.handbid.dev/v3/item/example/bid \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: */*' \ --data '"{\n \"amount\": 25\n}"'NEW (HAN-1687, 2026-05-06). Place a regular bid.
Body:
amount(required, number) — bid amount in DOLLARS. Server converts to cents internally (V1 storage unit) before delegating to the canonical bid pipeline.
Response (200):
{
itemId: 1962942,
currentPrice: 25,
nextMinimumBid: 26,
bidCount: 3,
autoBidMax: null,
winnerId: 1,
isCurrentUserWinning: true
}
Internally delegates to the V1 HbRestBidCreateAction so all V1 validation (auction status, item status, buy-now ceiling, CC requirement, spending limit, geo-bidding, local-only check-in, ticket gates, manager overrides, same-winner max-bid raise short-circuit, extended-period auto-extension) runs unchanged. Phase 1.5 stat hooks fire on the same HbBid::save() — item_stats.validBidQuantity increments correctly.
Errors: the V1 envelope is passed through (e.g. {success: 0, statusCode: 200, data: {error: {amount: ["Bid amount cannot exceed the Buy Now price of $5000."]}}}).
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ” itemId
required
string
Request Body
Section titled “Request Body ” Media type */*
string
Example
"{\n \"amount\": 25\n}"Responses
Section titled “ Responses ”Successful response
Media type application/json