curl --request POST \
--url https://api.parlayx.com/v1/polymarket/orders \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'PX-Content-Sha256: <px-content-sha256>' \
--header 'PX-Key-Id: <px-key-id>' \
--header 'PX-Signature: <px-signature>' \
--header 'PX-Timestamp: <px-timestamp>' \
--data '
{
"tokenId": "71321045679252212594626385532706912750332728571942532289631379312455583992563",
"side": "BUY",
"type": "MARKET",
"amount": "50",
"timeInForce": {
"type": "FOK"
},
"maxFillPrice": "0.62",
"minFillPrice": "0.41"
}
'import requests
url = "https://api.parlayx.com/v1/polymarket/orders"
payload = {
"tokenId": "71321045679252212594626385532706912750332728571942532289631379312455583992563",
"side": "BUY",
"type": "MARKET",
"amount": "50",
"timeInForce": { "type": "FOK" },
"maxFillPrice": "0.62",
"minFillPrice": "0.41"
}
headers = {
"PX-Key-Id": "<px-key-id>",
"PX-Timestamp": "<px-timestamp>",
"PX-Signature": "<px-signature>",
"PX-Content-Sha256": "<px-content-sha256>",
"Idempotency-Key": "<idempotency-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'PX-Key-Id': '<px-key-id>',
'PX-Timestamp': '<px-timestamp>',
'PX-Signature': '<px-signature>',
'PX-Content-Sha256': '<px-content-sha256>',
'Idempotency-Key': '<idempotency-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
tokenId: '71321045679252212594626385532706912750332728571942532289631379312455583992563',
side: 'BUY',
type: 'MARKET',
amount: '50',
timeInForce: {type: 'FOK'},
maxFillPrice: '0.62',
minFillPrice: '0.41'
})
};
fetch('https://api.parlayx.com/v1/polymarket/orders', 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.parlayx.com/v1/polymarket/orders",
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([
'tokenId' => '71321045679252212594626385532706912750332728571942532289631379312455583992563',
'side' => 'BUY',
'type' => 'MARKET',
'amount' => '50',
'timeInForce' => [
'type' => 'FOK'
],
'maxFillPrice' => '0.62',
'minFillPrice' => '0.41'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"PX-Content-Sha256: <px-content-sha256>",
"PX-Key-Id: <px-key-id>",
"PX-Signature: <px-signature>",
"PX-Timestamp: <px-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.parlayx.com/v1/polymarket/orders"
payload := strings.NewReader("{\n \"tokenId\": \"71321045679252212594626385532706912750332728571942532289631379312455583992563\",\n \"side\": \"BUY\",\n \"type\": \"MARKET\",\n \"amount\": \"50\",\n \"timeInForce\": {\n \"type\": \"FOK\"\n },\n \"maxFillPrice\": \"0.62\",\n \"minFillPrice\": \"0.41\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("PX-Key-Id", "<px-key-id>")
req.Header.Add("PX-Timestamp", "<px-timestamp>")
req.Header.Add("PX-Signature", "<px-signature>")
req.Header.Add("PX-Content-Sha256", "<px-content-sha256>")
req.Header.Add("Idempotency-Key", "<idempotency-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.parlayx.com/v1/polymarket/orders")
.header("PX-Key-Id", "<px-key-id>")
.header("PX-Timestamp", "<px-timestamp>")
.header("PX-Signature", "<px-signature>")
.header("PX-Content-Sha256", "<px-content-sha256>")
.header("Idempotency-Key", "<idempotency-key>")
.header("Content-Type", "application/json")
.body("{\n \"tokenId\": \"71321045679252212594626385532706912750332728571942532289631379312455583992563\",\n \"side\": \"BUY\",\n \"type\": \"MARKET\",\n \"amount\": \"50\",\n \"timeInForce\": {\n \"type\": \"FOK\"\n },\n \"maxFillPrice\": \"0.62\",\n \"minFillPrice\": \"0.41\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parlayx.com/v1/polymarket/orders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["PX-Key-Id"] = '<px-key-id>'
request["PX-Timestamp"] = '<px-timestamp>'
request["PX-Signature"] = '<px-signature>'
request["PX-Content-Sha256"] = '<px-content-sha256>'
request["Idempotency-Key"] = '<idempotency-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tokenId\": \"71321045679252212594626385532706912750332728571942532289631379312455583992563\",\n \"side\": \"BUY\",\n \"type\": \"MARKET\",\n \"amount\": \"50\",\n \"timeInForce\": {\n \"type\": \"FOK\"\n },\n \"maxFillPrice\": \"0.62\",\n \"minFillPrice\": \"0.41\"\n}"
response = http.request(request)
puts response.read_body{
"orderId": "3f8b2c9a-2d18-4f7e-9c2a-1b6e1f0c8a4d",
"status": "OPEN",
"filledShares": "120000",
"filledAmountUsd": "49200.55",
"averagePrice": "0.410005"
}{
"error": {
"code": "INVALID_REQUEST",
"message": "<string>",
"orderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>"
}
}{
"error": {
"code": "ORDER_RECONCILIATION_REQUIRED",
"message": "An earlier submit under this Idempotency-Key may have reached Polymarket and its outcome is not yet confirmed.",
"orderId": "3f8b2c9a-2d18-4f7e-9c2a-1b6e1f0c8a4d"
}
}{
"error": {
"code": "IDEMPOTENCY_CONFLICT",
"message": "Idempotency key was reused with a different request body"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>"
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "<string>",
"orderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>"
}
}Submit Order
Places a limit or market order on a Polymarket outcome and returns the issued order id.
curl --request POST \
--url https://api.parlayx.com/v1/polymarket/orders \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'PX-Content-Sha256: <px-content-sha256>' \
--header 'PX-Key-Id: <px-key-id>' \
--header 'PX-Signature: <px-signature>' \
--header 'PX-Timestamp: <px-timestamp>' \
--data '
{
"tokenId": "71321045679252212594626385532706912750332728571942532289631379312455583992563",
"side": "BUY",
"type": "MARKET",
"amount": "50",
"timeInForce": {
"type": "FOK"
},
"maxFillPrice": "0.62",
"minFillPrice": "0.41"
}
'import requests
url = "https://api.parlayx.com/v1/polymarket/orders"
payload = {
"tokenId": "71321045679252212594626385532706912750332728571942532289631379312455583992563",
"side": "BUY",
"type": "MARKET",
"amount": "50",
"timeInForce": { "type": "FOK" },
"maxFillPrice": "0.62",
"minFillPrice": "0.41"
}
headers = {
"PX-Key-Id": "<px-key-id>",
"PX-Timestamp": "<px-timestamp>",
"PX-Signature": "<px-signature>",
"PX-Content-Sha256": "<px-content-sha256>",
"Idempotency-Key": "<idempotency-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'PX-Key-Id': '<px-key-id>',
'PX-Timestamp': '<px-timestamp>',
'PX-Signature': '<px-signature>',
'PX-Content-Sha256': '<px-content-sha256>',
'Idempotency-Key': '<idempotency-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
tokenId: '71321045679252212594626385532706912750332728571942532289631379312455583992563',
side: 'BUY',
type: 'MARKET',
amount: '50',
timeInForce: {type: 'FOK'},
maxFillPrice: '0.62',
minFillPrice: '0.41'
})
};
fetch('https://api.parlayx.com/v1/polymarket/orders', 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.parlayx.com/v1/polymarket/orders",
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([
'tokenId' => '71321045679252212594626385532706912750332728571942532289631379312455583992563',
'side' => 'BUY',
'type' => 'MARKET',
'amount' => '50',
'timeInForce' => [
'type' => 'FOK'
],
'maxFillPrice' => '0.62',
'minFillPrice' => '0.41'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"PX-Content-Sha256: <px-content-sha256>",
"PX-Key-Id: <px-key-id>",
"PX-Signature: <px-signature>",
"PX-Timestamp: <px-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.parlayx.com/v1/polymarket/orders"
payload := strings.NewReader("{\n \"tokenId\": \"71321045679252212594626385532706912750332728571942532289631379312455583992563\",\n \"side\": \"BUY\",\n \"type\": \"MARKET\",\n \"amount\": \"50\",\n \"timeInForce\": {\n \"type\": \"FOK\"\n },\n \"maxFillPrice\": \"0.62\",\n \"minFillPrice\": \"0.41\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("PX-Key-Id", "<px-key-id>")
req.Header.Add("PX-Timestamp", "<px-timestamp>")
req.Header.Add("PX-Signature", "<px-signature>")
req.Header.Add("PX-Content-Sha256", "<px-content-sha256>")
req.Header.Add("Idempotency-Key", "<idempotency-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.parlayx.com/v1/polymarket/orders")
.header("PX-Key-Id", "<px-key-id>")
.header("PX-Timestamp", "<px-timestamp>")
.header("PX-Signature", "<px-signature>")
.header("PX-Content-Sha256", "<px-content-sha256>")
.header("Idempotency-Key", "<idempotency-key>")
.header("Content-Type", "application/json")
.body("{\n \"tokenId\": \"71321045679252212594626385532706912750332728571942532289631379312455583992563\",\n \"side\": \"BUY\",\n \"type\": \"MARKET\",\n \"amount\": \"50\",\n \"timeInForce\": {\n \"type\": \"FOK\"\n },\n \"maxFillPrice\": \"0.62\",\n \"minFillPrice\": \"0.41\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parlayx.com/v1/polymarket/orders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["PX-Key-Id"] = '<px-key-id>'
request["PX-Timestamp"] = '<px-timestamp>'
request["PX-Signature"] = '<px-signature>'
request["PX-Content-Sha256"] = '<px-content-sha256>'
request["Idempotency-Key"] = '<idempotency-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tokenId\": \"71321045679252212594626385532706912750332728571942532289631379312455583992563\",\n \"side\": \"BUY\",\n \"type\": \"MARKET\",\n \"amount\": \"50\",\n \"timeInForce\": {\n \"type\": \"FOK\"\n },\n \"maxFillPrice\": \"0.62\",\n \"minFillPrice\": \"0.41\"\n}"
response = http.request(request)
puts response.read_body{
"orderId": "3f8b2c9a-2d18-4f7e-9c2a-1b6e1f0c8a4d",
"status": "OPEN",
"filledShares": "120000",
"filledAmountUsd": "49200.55",
"averagePrice": "0.410005"
}{
"error": {
"code": "INVALID_REQUEST",
"message": "<string>",
"orderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>"
}
}{
"error": {
"code": "ORDER_RECONCILIATION_REQUIRED",
"message": "An earlier submit under this Idempotency-Key may have reached Polymarket and its outcome is not yet confirmed.",
"orderId": "3f8b2c9a-2d18-4f7e-9c2a-1b6e1f0c8a4d"
}
}{
"error": {
"code": "IDEMPOTENCY_CONFLICT",
"message": "Idempotency key was reused with a different request body"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>"
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "<string>",
"orderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>"
}
}Headers
The key id issued for your signing keypair.
Unix seconds at signing, valid within 30 seconds of the server clock.
Ed25519 signature of the request
Hex SHA-256 of the request body, or the SHA-256 of the empty string when there is no body.
Idempotency key for this request. Re-sending the same key with the same body returns the original result and creates no duplicate; re-sending it with a different body is rejected with 422.
1"2f1a8c4e-0b3d-4a9c-8e7f-1a2b3c4d5e6f"
Body
- Market Order
- Limit Order
Polymarket outcome-token id that identifies both the market and the outcome.
1"71321045679252212594626385532706912750332728571942532289631379312455583992563"
Order direction.
BUY, SELL "BUY"
Discriminator for a market order.
MARKET Order size, in dollars for a buy and in outcome shares for a sell.
1"50"
Execution policy; defaults to FOK.
- FillOrKill
- FillAndKill
Show child attributes
Show child attributes
Optional per-share ceiling this order may fill at, exclusive of 0 and 1. BUY only. The venue sweeps the book and stops before the first level above it, so the order may fill partially (FAK) or not at all (FOK) rather than fill above the ceiling. Without it a buy is bounded only by amount, which caps what is spent and not the price paid.
"0.62"
Optional per-share floor this order may fill at, exclusive of 0 and 1. SELL only. Omitting it does not mean unbounded: a market sell without a floor is bounded by a default derived from the market's midpoint.
"0.41"
Response
Order accepted. On the response that placed the order, status and the three match fields report what the venue acknowledged; a retry under the same idempotency key places nothing, so it describes the stored order and returns null match fields. Null is not proof that nothing filled.
Issued order id.
"3f8b2c9a-2d18-4f7e-9c2a-1b6e1f0c8a4d"
Order lifecycle status.
| Status | Meaning |
|---|---|
PENDING | Accepted, not yet sent to the venue. |
SUBMITTED | At the venue, outcome not yet known. Either not yet acknowledged, or an immediate-or-cancel order acknowledged but not yet settled. |
OPEN | Resting on the venue, and cancellable. |
FILLED | Fully filled. |
CANCELLED / REJECTED | Terminal. |
PENDING, SUBMITTED, OPEN, FILLED, CANCELLED, REJECTED "OPEN"
Shares reported matched at submission, or null when unavailable.
"120000"
Gross USD spent or received for the reported match, excluding fees, or null when unavailable.
"49200.55"
USD per share for the reported match, rounded to 6 decimal places, or null when unavailable.
"0.410005"