curl --request POST \
--url https://magicmarkets.com/v2/betslips/ \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"sport": "fb",
"event_id": "2026-06-15,1001,2002",
"bet_type": "for,h"
}
'{
"status": "ok",
"data": {
"betslip_id": "bs-spread-002",
"sport": "fb",
"event_id": "2026-06-15,3003,4004",
"bet_type": "for,ahover,7",
"bet_type_description": "Over 1.5 (Asian)",
"live_score": null,
"expiry_ts": 1781234999,
"is_open": true,
"close_reason": null,
"equivalent_bets": false,
"customer_username": "user1",
"customer_ccy": "USDT",
"betslip_type": "normal",
"user_data": null
}
}Create betslip
Create a new betslip. For normal/lay bets supply sport, event_id, and bet_type. For parlays supply a legs array instead.
The response carries no prices: quotes are gathered asynchronously. Poll GET /v2/betslips/{betslip_id}/ until price_list populates (typically a couple of seconds; watch expiry_ts), or read the quote off the stream.
curl --request POST \
--url https://magicmarkets.com/v2/betslips/ \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"sport": "fb",
"event_id": "2026-06-15,1001,2002",
"bet_type": "for,h"
}
'{
"status": "ok",
"data": {
"betslip_id": "bs-spread-002",
"sport": "fb",
"event_id": "2026-06-15,3003,4004",
"bet_type": "for,ahover,7",
"bet_type_description": "Over 1.5 (Asian)",
"live_score": null,
"expiry_ts": 1781234999,
"is_open": true,
"close_reason": null,
"equivalent_bets": false,
"customer_username": "user1",
"customer_ccy": "USDT",
"betslip_type": "normal",
"user_data": null
}
}Authorizations
API key created from the magic-markets website
Body
Sport code (required for normal/lay) - see "Sports & bet types" in the introduction.
Event ID (required for normal/lay)
Bet type string (required for normal/lay) - see "Sports & bet types" in the introduction.
Recorded on the betslip for your reference. It is not checked when you place an order. Send current_score on the order to reject a fill at a different score.
Show child attributes
Show child attributes
Parlay legs (required for parlay, 2-10 legs)
2 - 10 elementsShow child attributes
Show child attributes
normal, lay, parlay 512When true, only liquidity sources that do not hold bets in danger status are used. When false or omitted, all available liquidity sources are used.

