Place Your First Order
This guide will walk you through placing your first order on BettorEdge Markets, explaining all the order parameters and options available.
Prerequisites
- Completed authentication and obtained a Bearer token (see Authentication Guide)
- Understand how BettorEdge Markets work (see What are BettorEdge Markets?)
- Know how to find or build an order context hash (see Understanding Liquidity)
What is an Order?
An order is your request to buy contracts in a specific market outcome. When you place an order:
- You specify what you want to trade (order context hash)
- You specify how much you're willing to pay (price)
- You specify how much you want to invest (amount)
- The API confirms your order was accepted into the queue
- Your order may fill immediately, partially, or wait for matching
- To check fill status: Use the Get My Portfolio endpoint
How Orders Work
When you place an order on BettorEdge, you're creating a limit order that lets you set the maximum price you're willing to pay:
- You specify your price (e.g., $0.65)
- Your order is accepted into the queue and processed asynchronously
- Your order only fills at that price or better
- If no one matches your price, your order waits in the market
- You become liquidity for other traders
Example:
- You place a buy order at $0.65 → API confirms acceptance
- In the background: If someone sells at $0.65, your order fills
- In the background: If only sellers at $0.70 exist, your order waits (doesn't fill at worse price)
- To check what happened: Use Get My Portfolio to see your fill status
All orders placed through the API use real USD from your account balance.
Placing an Order
Now let's place your first order. Make sure you have:
- Your Bearer token from authentication
- An order context hash (from available markets or built yourself)
API Request
- cURL
- JavaScript
- Python
curl -X POST https://proxy.bettoredge.com/markets/v1/orders/order/place \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-d '{
"order_context_hash": "team:lakers_nuggets_20240115:12345:over:athlete:2954:31.5",
"price": 0.65,
"amount": 100,
"market_type": "FOR_MONEY"
}'
const response = await fetch('https://proxy.bettoredge.com/markets/v1/orders/order/place', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`
},
body: JSON.stringify({
order_context_hash: 'team:lakers_nuggets_20240115:12345:over:athlete:2954:31.5',
price: 0.65,
amount: 100,
market_type: 'FOR_MONEY'
})
});
const order = await response.json();
console.log('Order placed!', order);
response = requests.post(
'https://proxy.bettoredge.com/markets/v1/orders/order/place',
headers={
'Content-Type': 'application/json',
'Authorization': f'Bearer {access_token}'
},
json={
'order_context_hash': 'team:lakers_nuggets_20240115:12345:over:athlete:2954:31.5',
'price': 0.65,
'amount': 100,
'market_type': 'FOR_MONEY'
}
)
order = response.json()
print('Order placed!', order)
Understanding Order Parameters
order_context_hash (required)
The complete hash identifying what you want to trade.
Format: contest_type:contest_id:market_id:side:side_type:side_id:variable
Example: team:lakers_nuggets_20240115:12345:over:athlete:2954:31.5
This means: "LeBron James to score over 31.5 points in Lakers vs Nuggets"
See the Understanding Liquidity guide for how to get this hash.
price (required)
Your limit price - the maximum you're willing to pay per contract.
Format: Decimal between 0.00 and 1.00
Examples:
0.65= You'll pay up to $0.65 per contract0.50= You'll pay up to $0.50 per contract0.85= You'll pay up to $0.85 per contract
How it works:
- If someone is selling at $0.60 and you bid $0.65, you'll buy at $0.60 (you get the better price)
- If no one is selling at $0.65 or lower, your order waits in the market
- Other traders see your order and can decide to sell to you
Choosing a price:
- Higher price = More likely to fill immediately, but lower potential profit
- Lower price = Less likely to fill, but higher potential profit
- Check existing liquidity to see current market prices
amount (required)
The total dollar amount you want to invest (your cost basis).
Format: Number (dollars)
Examples:
100= Invest $10050= Invest $50250= Invest $250
How contracts are calculated:
Contracts = Amount / Price
Example:
- Amount: $100
- Price: $0.65
- Contracts: $100 / $0.65 = ~153 contracts
If you win:
- Each contract pays $1.00
- You receive: 153 × $1.00 = $153
- Your profit: $153 - $100 = $53
market_type (required)
The type of order you're placing.
Value: "FOR_MONEY"
Important: Currently, the API only supports real USD orders. You must use "FOR_MONEY" as the market_type value. This means you are placing an order with real money from your account balance.
Response
The place order response indicates whether your order was ACCEPTED and placed in the order queue. It does NOT tell you if or how much of your order has filled.
Orders are processed asynchronously after acceptance. To check the actual fill status of your order and see your positions, you must call the Get My Portfolio endpoint.
Success Response
{
"placement_status": "success",
"message": "Order placed successfully",
"order_context": {
"order_ids": ["order_xyz789"],
"position_ids": ["position_abc123"],
"title": "LeBron James Over 31.5 Points",
"price": 0.65,
"amount": 100,
"order_context_hash": "team:lakers_nuggets_20240115:12345:over:athlete:2954:31.5",
"status": "approved"
}
}
Response Fields
| Field | Description |
|---|---|
| placement_status | Whether order was accepted: "success" (order accepted into queue) or "failed" (order rejected) |
| message | Human-readable message about the order acceptance |
| error | (optional) Error message if placement failed |
| order_context | (optional) Order details if placement succeeded |
| order_context.order_ids | Array of order IDs that were accepted into the queue |
| order_context.position_ids | Array of position IDs (Note: Use Get My Portfolio to check actual filled positions) |
| order_context.title | Human-readable title of the market |
| order_context.price | Price of the order |
| order_context.amount | Total amount invested |
| order_context.order_context_hash | The market identifier hash |
| order_context.status | Order acceptance status: "approved" (accepted into queue), "cancelled", or "closed" |
Understanding the Response
The place order response indicates whether your order was accepted into the order queue, not whether it has filled.
placement_status: "success"
- Your order was accepted and placed in the queue
- The order will be processed asynchronously
- To check fill status: Call the Get My Portfolio endpoint
placement_status: "failed"
- Your order was rejected (insufficient balance, invalid parameters, etc.)
- Check the
errorfield for details - No order was created
Checking Actual Fill Status
The order_ids and position_ids arrays in the response do not reliably indicate fill status. After placing an order, use the Get My Portfolio endpoint to:
- See which orders have filled (fully or partially)
- View your actual positions and contracts
- Check your profit/loss on filled positions
- See which orders are still open (resting)
Understanding Your Investment
Let's break down an example order:
Order Details:
- Order Context Hash:
team:lakers_nuggets_20240115:12345:over:athlete:2954:31.5 - Price: $0.65
- Amount: $100
What You Get:
- Contracts: $100 / $0.65 = 153.85 contracts (rounded to 153)
- Cost Basis: $100
Potential Outcomes:
If LeBron scores over 31.5 points (you win):
- Each contract pays: $1.00
- You receive: 153 × $1.00 = $153
- Your profit: $153 - $100 = $53 profit (53% return)
If LeBron scores 31.5 points or under (you lose):
- Each contract pays: $0.00
- You receive: $0
- Your loss: $100 loss (100% of investment)
Trading Strategies
Strategy 1: Take Existing Liquidity
Find existing liquidity and match their price for instant execution.
// From available markets API
const liquidity = market.sides[0].liquidities[0];
const order = {
order_context_hash: liquidity.order_context_hash,
price: liquidity.price, // Match their price
amount: 100,
market_type: 'FOR_MONEY'
};
Pros:
- Instant fill
- Know exactly what you're getting
- No waiting
Cons:
- May not get the best price
- Limited to available liquidity
Strategy 2: Set Your Own Price
Build your own hash and set a better price.
const order = {
order_context_hash: 'team:lakers_nuggets_20240115:12345:over:athlete:2954:31.5',
price: 0.60, // Lower than current market ($0.65)
amount: 100,
market_type: 'FOR_MONEY'
};
Pros:
- Better price = higher potential profit
- You set the terms
Cons:
- May not fill immediately
- Need to wait for someone to match
Strategy 3: Create New Markets
Trade at lines that don't exist yet.
const order = {
order_context_hash: 'team:lakers_nuggets_20240115:12345:over:athlete:2954:35.0',
price: 0.45, // LeBron over 35 points
amount: 100,
market_type: 'FOR_MONEY'
};
Pros:
- Trade your exact thesis
- Potentially unique edge
Cons:
- May take time to fill
- You're the first liquidity
Common Scenarios
The place order response only confirms your order was accepted. The examples below show what you might find when you check Get My Portfolio after placing your order.
Scenario 1: Order Accepted (May Fill Immediately)
You place an order at $0.65, and there might be someone already selling at $0.63.
Place Order Response:
{
"placement_status": "success",
"message": "Order placed successfully",
"order_context": {
"order_ids": ["order_xyz789"],
"position_ids": [],
"title": "LeBron James Over 31.5 Points",
"price": 0.65,
"amount": 100,
"order_context_hash": "team:lakers_nuggets_20240115:12345:over:athlete:2954:31.5",
"status": "approved"
}
}
What This Means:
- Your order was accepted into the queue
- The order will be processed asynchronously
To Check Fill Status:
Call Get My Portfolio to see:
- If the order filled at $0.63 (better price)
- If you now have a position with contracts
- If the order is still open and waiting
Scenario 2: Order Accepted (May Wait for Matching)
You place an order at $0.60, but sellers might want $0.65.
Place Order Response:
{
"placement_status": "success",
"message": "Order placed successfully",
"order_context": {
"order_ids": ["order_xyz789"],
"position_ids": [],
"title": "LeBron James Over 31.5 Points",
"price": 0.60,
"amount": 100,
"order_context_hash": "team:lakers_nuggets_20240115:12345:over:athlete:2954:31.5",
"status": "approved"
}
}
What This Means:
- Your order was accepted into the queue
- Processing will happen asynchronously
To Check Fill Status:
Call Get My Portfolio to see:
- If the order is still open (resting) and waiting
- If someone matched your price and it filled
- Your current position (if any)
- You're offering liquidity at $0.60 for other traders
Scenario 3: Order Accepted (May Partially Fill)
You place a $100 order at $0.65, and there might be only $60 of liquidity at that price.
Place Order Response:
{
"placement_status": "success",
"message": "Order placed successfully",
"order_context": {
"order_ids": ["order_xyz789"],
"position_ids": [],
"title": "LeBron James Over 31.5 Points",
"price": 0.65,
"amount": 100,
"order_context_hash": "team:lakers_nuggets_20240115:12345:over:athlete:2954:31.5",
"status": "approved"
}
}
What This Means:
- Your order was accepted into the queue
- It may fill partially, fully, or not at all
To Check Fill Status:
Call Get My Portfolio to see:
- If part of your order filled (you have a position)
- If part of your order is still resting (waiting for more liquidity)
- Your exact contract count and cost basis
Best Practices
- Check Your Balance - Make sure you have enough funds before placing orders
- Review the Hash - Double-check your order context hash is correct
- Price Wisely - Look at existing liquidity to understand market prices
- Start Small - Place smaller orders while learning
- Monitor Fill Status - Use Get My Portfolio to check if your order filled or is still open
Next Steps
After placing your order:
- Check Your Portfolio - REQUIRED to see if your order filled, view your actual positions, contracts, and P&L
- Get Your Balance - See your available funds
- Cancel Orders - Cancel individual orders or use Bulk Cancel to cancel multiple orders at once
Common Questions
What happens if my order doesn't fill?
Your order stays open in the market until:
- Someone matches your price
- You cancel the order
- The market closes/settles
Use Get My Portfolio to check if your order has filled, partially filled, or is still waiting.
Can I cancel an open order?
Yes! You can cancel open orders that haven't filled yet using the Cancel Order endpoint. You can also use Bulk Cancel Orders to cancel multiple orders at once.
What if I want to sell instead of buy?
Selling positions will be covered in an upcoming guide. Selling creates liquidity on the opposite side.
How do I know if my price is good?
Check the liquidities array in available markets to see current prices. If you want to fill immediately, match or beat those prices.
Need help? Check out the Orders API Reference for detailed endpoint documentation.