curl --request POST \
--url https://api.limitless.exchange/parlay/partner/buy \
--header 'Content-Type: application/json' \
--header 'lmts-api-key: <api-key>' \
--header 'lmts-signature: <lmts-signature>' \
--header 'lmts-timestamp: <lmts-timestamp>' \
--data '
{
"packId": "22222222-2222-4222-8222-222222222222",
"stakeAmount": "10000000",
"onBehalfOf": 12345,
"minPayoutAmount": "10000000",
"deadline": "<string>",
"idempotencyKey": "<string>"
}
'import requests
url = "https://api.limitless.exchange/parlay/partner/buy"
payload = {
"packId": "22222222-2222-4222-8222-222222222222",
"stakeAmount": "10000000",
"onBehalfOf": 12345,
"minPayoutAmount": "10000000",
"deadline": "<string>",
"idempotencyKey": "<string>"
}
headers = {
"lmts-timestamp": "<lmts-timestamp>",
"lmts-signature": "<lmts-signature>",
"lmts-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'lmts-timestamp': '<lmts-timestamp>',
'lmts-signature': '<lmts-signature>',
'lmts-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
packId: '22222222-2222-4222-8222-222222222222',
stakeAmount: '10000000',
onBehalfOf: 12345,
minPayoutAmount: '10000000',
deadline: '<string>',
idempotencyKey: '<string>'
})
};
fetch('https://api.limitless.exchange/parlay/partner/buy', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.limitless.exchange/parlay/partner/buy",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'packId' => '22222222-2222-4222-8222-222222222222',
'stakeAmount' => '10000000',
'onBehalfOf' => 12345,
'minPayoutAmount' => '10000000',
'deadline' => '<string>',
'idempotencyKey' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"lmts-api-key: <api-key>",
"lmts-signature: <lmts-signature>",
"lmts-timestamp: <lmts-timestamp>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.limitless.exchange/parlay/partner/buy"
payload := strings.NewReader("{\n \"packId\": \"22222222-2222-4222-8222-222222222222\",\n \"stakeAmount\": \"10000000\",\n \"onBehalfOf\": 12345,\n \"minPayoutAmount\": \"10000000\",\n \"deadline\": \"<string>\",\n \"idempotencyKey\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("lmts-timestamp", "<lmts-timestamp>")
req.Header.Add("lmts-signature", "<lmts-signature>")
req.Header.Add("lmts-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.limitless.exchange/parlay/partner/buy")
.header("lmts-timestamp", "<lmts-timestamp>")
.header("lmts-signature", "<lmts-signature>")
.header("lmts-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"packId\": \"22222222-2222-4222-8222-222222222222\",\n \"stakeAmount\": \"10000000\",\n \"onBehalfOf\": 12345,\n \"minPayoutAmount\": \"10000000\",\n \"deadline\": \"<string>\",\n \"idempotencyKey\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.limitless.exchange/parlay/partner/buy")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["lmts-timestamp"] = '<lmts-timestamp>'
request["lmts-signature"] = '<lmts-signature>'
request["lmts-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"packId\": \"22222222-2222-4222-8222-222222222222\",\n \"stakeAmount\": \"10000000\",\n \"onBehalfOf\": 12345,\n \"minPayoutAmount\": \"10000000\",\n \"deadline\": \"<string>\",\n \"idempotencyKey\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "COMPLETED",
"position": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "PENDING",
"stakeAmount": "<string>",
"collateralDeposited": "<string>",
"multiplierOffered": "<string>",
"vigPercent": "<string>",
"wallet": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"legs": [
{
"id": "<string>",
"legIndex": 123,
"marketId": 123,
"conditionId": "<string>",
"outcome": "YES",
"priceAtCreation": "<string>",
"resolutionStatus": "LOST",
"marketSlug": "<string>",
"marketTitle": "<string>",
"marketImageUrl": "<string>",
"group": {
"id": 123,
"slug": "<string>",
"title": "<string>",
"leagueName": "<string>",
"homeTeam": "<string>",
"awayTeam": "<string>",
"homeScore": 123,
"awayScore": 123,
"startMatchTimestamp": 123
},
"leagueName": "<string>",
"startMatchTimestamp": 123,
"resolvedAt": "2023-11-07T05:31:56Z",
"esportsPropType": "map_handicap",
"outcomeLabels": [
"<string>"
],
"outcomeImageUrls": [
"<string>"
]
}
],
"payoutAmount": "<string>",
"compoundTokenId": "<string>",
"txHash": "<string>",
"claimTxHash": "<string>",
"resolvedAt": "2023-11-07T05:31:56Z",
"sourcePack": {
"id": "<string>",
"name": "<string>"
}
}
}Buy Partner Pack
Persist the entire request before submission. Retry with the identical body and idempotency key, including an expired deadline. Check and confirm the managed wallet Pack vault allowance before preparing the intent. RECOVERING is not terminal. Requires HMAC with trading and delegated_signing scopes. Never set x-on-behalf-of globally.
curl --request POST \
--url https://api.limitless.exchange/parlay/partner/buy \
--header 'Content-Type: application/json' \
--header 'lmts-api-key: <api-key>' \
--header 'lmts-signature: <lmts-signature>' \
--header 'lmts-timestamp: <lmts-timestamp>' \
--data '
{
"packId": "22222222-2222-4222-8222-222222222222",
"stakeAmount": "10000000",
"onBehalfOf": 12345,
"minPayoutAmount": "10000000",
"deadline": "<string>",
"idempotencyKey": "<string>"
}
'import requests
url = "https://api.limitless.exchange/parlay/partner/buy"
payload = {
"packId": "22222222-2222-4222-8222-222222222222",
"stakeAmount": "10000000",
"onBehalfOf": 12345,
"minPayoutAmount": "10000000",
"deadline": "<string>",
"idempotencyKey": "<string>"
}
headers = {
"lmts-timestamp": "<lmts-timestamp>",
"lmts-signature": "<lmts-signature>",
"lmts-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'lmts-timestamp': '<lmts-timestamp>',
'lmts-signature': '<lmts-signature>',
'lmts-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
packId: '22222222-2222-4222-8222-222222222222',
stakeAmount: '10000000',
onBehalfOf: 12345,
minPayoutAmount: '10000000',
deadline: '<string>',
idempotencyKey: '<string>'
})
};
fetch('https://api.limitless.exchange/parlay/partner/buy', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.limitless.exchange/parlay/partner/buy",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'packId' => '22222222-2222-4222-8222-222222222222',
'stakeAmount' => '10000000',
'onBehalfOf' => 12345,
'minPayoutAmount' => '10000000',
'deadline' => '<string>',
'idempotencyKey' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"lmts-api-key: <api-key>",
"lmts-signature: <lmts-signature>",
"lmts-timestamp: <lmts-timestamp>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.limitless.exchange/parlay/partner/buy"
payload := strings.NewReader("{\n \"packId\": \"22222222-2222-4222-8222-222222222222\",\n \"stakeAmount\": \"10000000\",\n \"onBehalfOf\": 12345,\n \"minPayoutAmount\": \"10000000\",\n \"deadline\": \"<string>\",\n \"idempotencyKey\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("lmts-timestamp", "<lmts-timestamp>")
req.Header.Add("lmts-signature", "<lmts-signature>")
req.Header.Add("lmts-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.limitless.exchange/parlay/partner/buy")
.header("lmts-timestamp", "<lmts-timestamp>")
.header("lmts-signature", "<lmts-signature>")
.header("lmts-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"packId\": \"22222222-2222-4222-8222-222222222222\",\n \"stakeAmount\": \"10000000\",\n \"onBehalfOf\": 12345,\n \"minPayoutAmount\": \"10000000\",\n \"deadline\": \"<string>\",\n \"idempotencyKey\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.limitless.exchange/parlay/partner/buy")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["lmts-timestamp"] = '<lmts-timestamp>'
request["lmts-signature"] = '<lmts-signature>'
request["lmts-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"packId\": \"22222222-2222-4222-8222-222222222222\",\n \"stakeAmount\": \"10000000\",\n \"onBehalfOf\": 12345,\n \"minPayoutAmount\": \"10000000\",\n \"deadline\": \"<string>\",\n \"idempotencyKey\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "COMPLETED",
"position": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "PENDING",
"stakeAmount": "<string>",
"collateralDeposited": "<string>",
"multiplierOffered": "<string>",
"vigPercent": "<string>",
"wallet": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"legs": [
{
"id": "<string>",
"legIndex": 123,
"marketId": 123,
"conditionId": "<string>",
"outcome": "YES",
"priceAtCreation": "<string>",
"resolutionStatus": "LOST",
"marketSlug": "<string>",
"marketTitle": "<string>",
"marketImageUrl": "<string>",
"group": {
"id": 123,
"slug": "<string>",
"title": "<string>",
"leagueName": "<string>",
"homeTeam": "<string>",
"awayTeam": "<string>",
"homeScore": 123,
"awayScore": 123,
"startMatchTimestamp": 123
},
"leagueName": "<string>",
"startMatchTimestamp": 123,
"resolvedAt": "2023-11-07T05:31:56Z",
"esportsPropType": "map_handicap",
"outcomeLabels": [
"<string>"
],
"outcomeImageUrls": [
"<string>"
]
}
],
"payoutAmount": "<string>",
"compoundTokenId": "<string>",
"txHash": "<string>",
"claimTxHash": "<string>",
"resolvedAt": "2023-11-07T05:31:56Z",
"sourcePack": {
"id": "<string>",
"name": "<string>"
}
}
}trading and delegated_signing. Select an owned managed server-wallet profile through body field onBehalfOf; do not send x-on-behalf-of.
Before submission
- Confirm the Pack vault allowance.
- Obtain an eligible quote.
- Set a positive
minPayoutAmount, a deadline at most 480 seconds ahead, and a unique purchase key. - Durably save the complete request and its environment/account identity before sending it.
Replay and recovery
On a timeout, disconnect, or ambiguous result, replay every field unchanged, including the original deadline and idempotency key. An expired local timestamp does not prove a purchase failed. A new key creates a separate purchase.| Buy status | Meaning |
|---|---|
COMPLETED | Minted position; settlement may already be WON or LOST |
PENDING | Mint is in progress |
RECOVERING | Position FAILED is awaiting reconciliation and can become ACTIVE |
FAILED | Position VAULT_REVERTED; vault transaction reverted |
PRICE_DRIFTED, the exact expired-intent rejection, and submissionState: "NOT_SUBMITTED" have specific renewal paths. PACK_ALLOWANCE_REQUIRED identifies the token, vault spender, and required allowance. Follow the recovery table; HTTP status alone does not determine whether a new key is safe.
This endpoint shares the partner-owner limit of 10 requests per 10 seconds.Authorizations
Scoped API token with HMAC-SHA256 signing. Requires three headers: lmts-api-key (token ID), lmts-timestamp (ISO-8601), lmts-signature (Base64-encoded HMAC). See Authentication docs for details.
Headers
ISO-8601 HMAC signing timestamp.
Base64 HMAC-SHA256 signature. Sign the method, path including query, and exact body with the timestamp.
Body
"22222222-2222-4222-8222-222222222222"
Positive integer micro-USDC string; 1000000 = 1 USDC.
^[1-9]\d{0,19}$"10000000"
Owned managed server-wallet profile ID.
1 <= x <= 214748364712345
Minimum acceptable total payout in integer micro-USDC.
^[1-9]\d{0,19}$"10000000"
Unix seconds. Future and at most 480 seconds away on first submission; preserve unchanged on replay.
^[1-9]\d{0,11}$Stable purchase ID. Persist the complete body before submission and replay every field unchanged.
1 - 128^[\x21-\x7e]+$Response
Successful response
RECOVERING maps to position FAILED; operation FAILED maps to position VAULT_REVERTED.
COMPLETED, PENDING, RECOVERING, FAILED Owned curated Pack position, including in-flight and recoverable purchases. Additional display fields may be returned.
Show child attributes
Show child attributes