> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.paradex.trade/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.paradex.trade/_mcp/server.

# History of changes to market specifications

GET https://api.prod.paradex.trade/v1/markets/history

Returns audit-driven events for market spec changes (listing, settlement, parameter updates) over the last 7 days. Source: market audit table; includes Ops manual changes.

Reference: https://docs.paradex.trade/api/prod/markets/get-markets-history

## Request

### Query parameters

- `market` (string, optional) — Market symbol to filter history. Omit or pass "ALL" for all markets.

## Response

### 200

OK

- `results` (list of responses.MarketEvent, optional)

## Types

### responses.MarketEvent

- `changed_fields` (responses.MarketHistoryFields, optional)
- `event_type` (enum, optional) — Type of change
  - Allowed values: `CREATED`, `DELETED`, `SETTLED`, `UPDATED`
- `symbol` (string, optional) — Market symbol
- `updated_at` (integer, optional) — Time of change (unix time millisecond)

### responses.MarketHistoryFields

- `asset_kind` (string, optional)
- `base_currency` (string, optional)
- `clamp_rate` (double, optional)
- `delta1_cross_margin_params` (any, optional)
- `expiry_at` (integer, optional)
- `fee_config` (any, optional)
- `funding_multiplier` (double, optional)
- `funding_period_hours` (double, optional)
- `interest_rate` (double, optional)
- `market_kind` (string, optional)
- `max_funding_rate` (double, optional)
- `max_funding_rate_change` (double, optional)
- `max_open_orders` (integer, optional)
- `max_order_size` (string, optional)
- `max_slippage` (double, optional)
- `max_tob_spread` (double, optional)
- `min_notional` (string, optional)
- `open_at` (integer, optional)
- `option_cross_margin_params` (any, optional)
- `option_type` (string, optional)
- `oracle_ewma_factor` (double, optional)
- `order_size_increment` (string, optional)
- `position_limit` (string, optional)
- `price_bands_width` (double, optional)
- `price_tick_size` (string, optional)
- `quote_currency` (string, optional)
- `settlement_currency` (string, optional)
- `settlement_price` (double, optional)
- `strike_price` (string, optional)
- `underlying_twap_price` (double, optional)

## Examples

**Response**

```json
{
  "results": [
    {
      "changed_fields": {
        "asset_kind": "PERP",
        "base_currency": "BTC",
        "clamp_rate": 0.05,
        "expiry_at": 0,
        "funding_multiplier": 1,
        "funding_period_hours": 8,
        "interest_rate": 0.01,
        "market_kind": "cross",
        "max_funding_rate": 0.05,
        "max_funding_rate_change": 0.0005,
        "max_open_orders": 100,
        "max_order_size": "100",
        "max_slippage": 0.05,
        "max_tob_spread": 0.2,
        "min_notional": "3",
        "open_at": 1762809600000,
        "option_type": "CALL",
        "oracle_ewma_factor": 0.2,
        "order_size_increment": "0.001",
        "position_limit": "500",
        "price_bands_width": 0.05,
        "price_tick_size": "0.01",
        "quote_currency": "USD",
        "settlement_currency": "USDC",
        "settlement_price": 50000,
        "strike_price": "66500",
        "underlying_twap_price": 50000
      },
      "event_type": "UPDATED",
      "symbol": "BTC-USD-PERP",
      "updated_at": 1762809600000
    }
  ]
}
```

**SDK Code**

```python
import requests

url = "https://api.prod.paradex.trade/v1/markets/history"

querystring = {"market":"BTC-USD-PERP"}

response = requests.get(url, params=querystring)

print(response.json())
```

```javascript
const url = 'https://api.prod.paradex.trade/v1/markets/history?market=BTC-USD-PERP';
const options = {method: 'GET'};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.prod.paradex.trade/v1/markets/history?market=BTC-USD-PERP"

	req, _ := http.NewRequest("GET", url, nil)

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.prod.paradex.trade/v1/markets/history?market=BTC-USD-PERP")

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

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.prod.paradex.trade/v1/markets/history?market=BTC-USD-PERP")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.prod.paradex.trade/v1/markets/history?market=BTC-USD-PERP');

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.prod.paradex.trade/v1/markets/history?market=BTC-USD-PERP");
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let request = NSMutableURLRequest(url: NSURL(string: "https://api.prod.paradex.trade/v1/markets/history?market=BTC-USD-PERP")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```