Skip to main content
PUT
/
api
/
fees
/
policy
Set Fee Policy
curl --request PUT \
  --url https://trade.predexon.com/api/fees/policy \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "venue": "polymarket",
  "partnerFeeBps": 100,
  "partnerTreasuryAddress": "0x1234567890abcdef1234567890abcdef12345678"
}
'
import requests

url = "https://trade.predexon.com/api/fees/policy"

payload = {
    "venue": "polymarket",
    "partnerFeeBps": 100,
    "partnerTreasuryAddress": "0x1234567890abcdef1234567890abcdef12345678"
}
headers = {
    "x-api-key": "<api-key>",
    "Content-Type": "application/json"
}

response = requests.put(url, json=payload, headers=headers)

print(response.text)
const options = {
  method: 'PUT',
  headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
  body: JSON.stringify({
    venue: 'polymarket',
    partnerFeeBps: 100,
    partnerTreasuryAddress: '0x1234567890abcdef1234567890abcdef12345678'
  })
};

fetch('https://trade.predexon.com/api/fees/policy', 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://trade.predexon.com/api/fees/policy",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "PUT",
  CURLOPT_POSTFIELDS => json_encode([
    'venue' => 'polymarket',
    'partnerFeeBps' => 100,
    'partnerTreasuryAddress' => '0x1234567890abcdef1234567890abcdef12345678'
  ]),
  CURLOPT_HTTPHEADER => [
    "Content-Type: application/json",
    "x-api-key: <api-key>"
  ],
]);

$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://trade.predexon.com/api/fees/policy"

	payload := strings.NewReader("{\n  \"venue\": \"polymarket\",\n  \"partnerFeeBps\": 100,\n  \"partnerTreasuryAddress\": \"0x1234567890abcdef1234567890abcdef12345678\"\n}")

	req, _ := http.NewRequest("PUT", url, payload)

	req.Header.Add("x-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.put("https://trade.predexon.com/api/fees/policy")
  .header("x-api-key", "<api-key>")
  .header("Content-Type", "application/json")
  .body("{\n  \"venue\": \"polymarket\",\n  \"partnerFeeBps\": 100,\n  \"partnerTreasuryAddress\": \"0x1234567890abcdef1234567890abcdef12345678\"\n}")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://trade.predexon.com/api/fees/policy")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"venue\": \"polymarket\",\n  \"partnerFeeBps\": 100,\n  \"partnerTreasuryAddress\": \"0x1234567890abcdef1234567890abcdef12345678\"\n}"

response = http.request(request)
puts response.read_body
{
  "venue": "polymarket",
  "enabled": true,
  "platformFeeBps": 0,
  "partnerFeeBps": 100,
  "partnerTreasuryAddress": "0x1234567890abcdef1234567890abcdef12345678",
  "totalFeeBps": 100
}
{
  "error": "insufficient_balance",
  "message": "Insufficient balance: need 50.000000, have 12.500000",
  "requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
{
  "error": "insufficient_balance",
  "message": "Insufficient balance: need 50.000000, have 12.500000",
  "requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
{
  "error": "insufficient_balance",
  "message": "Insufficient balance: need 50.000000, have 12.500000",
  "requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
The Predexon Trading API is being retired. New signups are closed. Trading stops on July 10, 2026 — sell or close any open positions before then. After that, the API is withdrawal-only: redeem resolved positions and withdraw all funds by July 17, 2026. The read-only Data & Signals API is unaffected.
Partner fees must be either 0 (disabled) or >= 10 bps when enabled. The current combined limit is 500 bps (5% - platformFeeBps + partnerFeeBps). partnerTreasuryAddress is required when partnerFeeBps > 0.
Concurrent updates may return 409 Conflict. Retry the request.

Authorizations

x-api-key
string
header
required

Body

application/json
venue
enum<string>
required

Venue to configure. Fee policies are currently Polymarket-only.

Available options:
polymarket
partnerFeeBps
integer
required

Partner markup fee in basis points. 0 to disable, min 10 when > 0, max 500.

partnerTreasuryAddress
string

EVM (Polygon) address to receive partner fee revenue. Required when partnerFeeBps > 0.

Response

Fee policy updated

enabled
boolean

Whether fees are active

platformFeeBps
number

Platform fee in basis points

partnerFeeBps
number

Partner markup fee in basis points (0 if not configured)

partnerTreasuryAddress
string | null

EVM address receiving partner fee revenue

totalFeeBps
number

Combined fee: platformFeeBps + partnerFeeBps