Reference
Glossary
Key auction terms and concepts used throughout the Basta platform.
Auction Mechanics
StartingBid
The starting bid is the minimum amount required for the first valid bid on an item. Any bid below this value will be automatically rejected.
When no bids exist on an item, the starting bid is the first value found in the nextAsks.
Key Points:
- Expressed in cents (e.g.,
1000= $10.00) - Can be set independently of the increment table
- Does not guarantee the item will sell (see Reserve)
Off-Increment Behavior
The starting bid does not need to align with the increment table (i.e., it can be off-increment). However, if it is off-increment, the next valid ask (minimum accepted bid after that) will be calculated based on the nearest valid increment above the starting bid.
Off-Increment Example
Scenario: You define a starting bid of 1,170, which is off-increment based on the increment table.
Increment Table:
| Bid Range | Increment |
|---|---|
| 0–1,000 | 10 |
| 1,000–2,000 | 50 |
| 2,000 and up | 100 |
Behavior:
1,170is within the 1,000–2,000 range → increment is 50- Since
1,170is off-increment, it is accepted only as the first valid bid - The next bid must align with the increment grid:
1,200, not1,220
Resulting NextAsks Progression:
| Ask Number | Value |
|---|---|
| 1st Ask | 1,170 (startingBid) |
| 2nd Ask | 1,200 (aligned to increment grid) |
| 3rd Ask | 1,250 |
| 4th Ask | 1,300 |
| ... | ... |
The increment "resets" to align with the defined step from the second bid onward, maintaining a consistent and predictable ask ladder.
Example:
createItemForSale(input: {
startingBid: 1170 # Off-increment starting bid
...
})Bid Increment Table
The BidIncrementTable defines how much the next valid bid must increase based on the current bid amount. It ensures that bids follow a clear, predictable progression as auction prices rise.
Structure:
lowRange: Start of price range (in cents)highRange: End of price range (in cents)step: Required increment within this range (in cents)
All values are in minor currency units (e.g. cents for USD). For example, 100000 = $1,000.
Example Table
| Low Range | High Range | Step |
|---|---|---|
| 0 | 100000 | 2500 |
| 100000 | 5000000 | 10000 |
Human-Friendly Interpretation (USD)
With the table above, here's how to read it:
- From $0 to $1,000 → bids increase by $25
- From $1,000 to $50,000 → bids increase by $100
If the bid exceeds the highest HighRange (in this case $50,000), the increment remains fixed at the last step: $100.
Validation Rules
To be valid, a BidIncrementTable must meet these requirements:
Each range must align:
LowRangeandHighRangemust be divisible byStepStepmust fit evenly within the range (HighRange - LowRange)
Rules must be continuous:
- The first rule must start at
0 - Each rule's
LowRangemust equal the previous rule'sHighRange
At least one rule is required
Example:
bidIncrementTable: {
rules: [
{ lowRange: 0, highRange: 100000, step: 2500 },
{ lowRange: 100000, highRange: 5000000, step: 10000 }
]
}Summary
- Controls how bid amounts increase over time
- Dynamic and price-dependent
- Keeps auction pacing smooth and scalable
Can be set at:
- Sale level: Applies to all items in the sale
- Item level: Overrides sale-level settings for specific items
Want to see how this interacts with a StartingBid? Check the StartingBid section above.
NextAsks
The nextAsks property defines the upcoming valid bid amounts for an auctioned item. It helps clients display what the next acceptable bids will be, based on the current state of the auction.
What Influences nextAsks?
nextAsks is calculated from:
- The current highest bid, or the
startingBidif no bids have been placed - The calculation also considers the user context when a user has an active bid on the item
- The rules in the
bidIncrementTable
The system rounds the current amount down to the nearest valid increment and then applies the increment rule to generate the upcoming asks.
How It Works
- If no bids exist yet, the
startingBidis used as the base - The first value in
nextAsksis always the minimum next valid bid - Each subsequent ask increases by the applicable step from the
bidIncrementTable - If the
startingBidis off-increment, the first ask is thestartingBid, and the second ask snaps to the increment grid
Example A: Starting Bid Aligned to Increment
startingBid: 1100Increment: 50
Resulting nextAsks:
[1100, 1150, 1200, 1250, ...]All values align with the increment rule.
Example B: Starting Bid Off-Increment
startingBid: 1170Increment: 50
Resulting nextAsks:
[1170, 1200, 1250, 1300, ...]1170is accepted as-is for the first ask1200is the first value that aligns with the increment rule- All following asks increase from
1200in steps of50
Why It Matters
nextAskshelps you render bid buttons, sliders, or preset options in the UI- It ensures clients always show valid and enforceable bid amounts
- It reflects dynamic increments based on bid ranges — no hardcoding required
Reserve
The reserve is the minimum price that must be met for an auctioned item to have a valid winning bid when it closes.
If the highest bid does not meet or exceed the reserve price by the time the item reaches status CLOSED, no winner is declared.
Purpose
- Protects sellers from selling below a minimum acceptable value
- Ensures auctions can start at a low
startingBidwhile still enforcing a threshold for winning
Behavior
- If the final bid is below the reserve, the auction closes without a winner
- The reserve is not visible to other bidders (unless revealed by the client)
- Expressed in cents (e.g.,
200000000= $2,000,000)
Reserve Statuses:
NOT_MET: Current bid is below the reserveMET: Current bid has reached or exceeded the reserveNO_RESERVE: Item has no reserve (will sell to highest bidder)
Example: Standard Reserve Logic
startingBid: $5,000reserve: $10,000
Outcomes:
- Highest bid when the item closes: $9,500 → No winner
- If someone bids $10,000 or more → Winning bid
Example:
createItemForSale(input: {
startingBid: 5000 # $50 to start bidding
reserve: 10000 # $100 to actually sell
...
})reserveAutoBidMethod
This setting determines how max bids interact with the reserve.
Modes:
| Mode | Description |
|---|---|
STANDARD (default) | Bids must explicitly meet or exceed the reserve to be valid |
MAX_BID_BELOW_RESERVE_IS_MET | If a bidder places a max bid that reaches or exceeds the reserve, the system may raise their bid automatically to meet the reserve (or their max) — even if they initially bid below it |
Example: MAX_BID_BELOW_RESERVE_IS_MET
reserve: $10,000- User places a max bid of $12,000
- Current bid is $7,500
Result:
System raises the user's bid to $10,000 automatically to meet the reserve. Reserve is now considered met.
If the user's max bid is below the reserve (e.g. $9,500), and no higher bids exist, the system may still raise the bid to $9,500 to reflect the user's full willingness — even if the reserve isn't met.
Important Notes
reserveAutoBidMethodis set once when the sale is created and cannot be changed afterward- The feature is only triggered through max bids (
BidType = MAX) - There is no impact on regular bidding behavior
Bid Types
In Basta, every bid is either a MaxBid or a NormalBid. These types define how the auction engine responds when bids are placed — either reactively (MaxBid) or directly (NormalBid).
MaxBid
A MaxBid allows a user to define the maximum amount they're willing to pay. The auction engine will automatically place incremental bids on their behalf until:
- They win the item
- They are outbid by a higher max bid
- Or their maximum amount is reached
MaxBid Highlights
- Bids follow the Bid Increment Table
- The winning amount may be lower than the max amount
- If outbid, the engine reacts automatically (unless max is reached)
Example: MaxBid Behavior
Bid Increment Table:
| LowRange | HighRange | Step |
|---|---|---|
| 0 | 200000 | 1000 |
startingBid: 1000
Bid Flow:
- User-1 places MaxBid of 5000
- User-2 places MaxBid of 3000
- System places a reactive bid for User-1 at 4000
Resulting State:
| UserID | MaxBid Amount | Winning Amount | Active MaxBid | Bid Accepted |
|---|---|---|---|---|
| User-1 | 5000 | 1000 | 5000 | Yes |
| User-2 | 3000 | 3000 | 3000 | Yes |
| User-1 | — | 4000 | 5000 | Yes (reactive) |
Explanation: Although User-2 places a valid MaxBid of 3000, they are never the leading bidder. As soon as their bid is placed, the system automatically places a reactive bid for User-1 at 4000. This means User-2 is immediately outbid, and their MaxBid is recorded as losing.
Example:
bidOnItem(
amount: 5000, # Maximum willing to pay
type: MAX
)NormalBid
A NormalBid is a one-time bid at a specified amount. It must align with the bid increment table and does not react to counter-bids.
Example: NormalBid Behavior
| UserID | NormalBid Amount | Winning Amount | Active MaxBid | Bid Accepted |
|---|---|---|---|---|
| User-1 | 5000 | 5000 | 0 | Yes |
| User-2 | 3000 | — | 0 | No (too low) |
| User-2 | 8000 | 8000 | 0 | Yes |
Example:
bidOnItem(
amount: 5000,
type: NORMAL
)Edge Cases to Know
Equal MaxBids
- If two users place identical MaxBids, the first bidder wins
- The second bid is accepted but marked as losing
MaxBid overtakes NormalBid
- If a NormalBid leads and a MaxBid is placed after, the engine will outbid it reactively, assuming the MaxBid is higher
MaxBid below Reserve
- Even if a user is winning, they must meet the item's Reserve or no winner is declared
Auction Timing
ClosingMethod
The ClosingMethod defines how and when items in a sale transition to the closing phase.
This determines whether items close individually, in sequence, or in parallel.
OVERLAPPING
This is the current active closing method used in Basta.
Each item has:
- A
closingStarttimestamp (defined manually) - A
closingEndtimestamp (calculated automatically)
The closingEnd is initially computed as:
closingEnd = closingStart + [closingTimeCountdown]If a bid is placed between closingStart and closingEnd, the countdown restarts, extending the closingEnd.
This behavior is called anti-sniping — it gives bidders time to react to last-second bids and prevents unfair last-moment wins.
Closing Strategies with OVERLAPPING
You can configure how items begin closing:
| Strategy | Description |
|---|---|
| Simultaneous | All items share the same closingStart timestamp and close in parallel |
| Stacked Intervals | Each item starts closing a few seconds or minutes after the previous one, using staggered closingStart values |
This flexibility enables auctions to feel fast-paced or staggered based on your business needs.
Example - Simultaneous:
Item 1: closingStart at 3:00 PM
Item 2: closingStart at 3:00 PM
Item 3: closingStart at 3:00 PMExample - Stacked Intervals:
Item 1: closingStart at 3:00 PM
Item 2: closingStart at 3:02 PM
Item 3: closingStart at 3:04 PMONE_BY_ONE (Coming Soon)
This method allows only one item to enter closing at a time. Items do not overlap — each must fully close before the next begins.
This feature is on the roadmap and not currently available. If you'd like to use or test ONE_BY_ONE, please contact the Basta development team for updates.
ClosingTimeCountdown
ClosingTimeCountdown defines the duration (in milliseconds) used to control how long an item stays in its closing phase — and how long that phase is extended when new bids are received.
Required When: closingMethod = OVERLAPPING
Any sale using the OVERLAPPING closing method must set this value.
It ensures that every item in the sale has a clear, consistent rule for how long it can stay open once it begins closing.
How It Works
When an item enters ITEM_CLOSING, its closingEnd is initialized as:
closingEnd = closingStart + closingTimeCountdownIf a bid is placed after closingStart but before closingEnd, the countdown is reset:
closingEnd = now() + closingTimeCountdownThis creates an anti-sniping mechanism — every valid bid placed in the final moments of an auction resets the clock, giving other bidders a fair chance to respond.
Example
If closingTimeCountdown = 120000 (2 minutes):
At 10:00:00 → item enters closing
→ closingEnd = 10:02:00
A bid is placed at 10:01:15
→ closingEnd = 10:03:15
Another bid comes at 10:02:45
→ closingEnd = 10:04:45The auction keeps extending — but never more than 2 minutes ahead of the current time.
Configuration
Can be set at:
- Sale level: Applies to all items in the sale
- Item level: Override for specific items
Example:
createSale(input: {
closingMethod: OVERLAPPING
closingTimeCountdown: 120000 # 2 minutes
...
})Common values:
30000(30 seconds) - Fast-paced auctions60000(60 seconds) - Standard setting120000(2 minutes) - High-value items300000(5 minutes) - Premium auctions
Benefits
- Fair competition for all bidders
- Reduces sniping strategy effectiveness
- Allows true market value to emerge
- Standard practice in online timed auctions
Related Documentation
Support
Questions about auction mechanics? Contact us at hi@basta.app.