curl --request GET \
--url https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets', 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.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"total": 150,
"offset": 0,
"limit": 25,
"items": [
{
"id": "hyperliquid-eth-usdc",
"providerId": "hyperliquid",
"baseAsset": {
"symbol": "USDC",
"network": "hyperliquid",
"name": "USD Coin",
"decimals": 6,
"address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"logoURI": "<string>"
},
"quoteAsset": {
"symbol": "USDC",
"network": "hyperliquid",
"name": "USD Coin",
"decimals": 6,
"address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"logoURI": "<string>"
},
"leverageRange": [
1,
50
],
"supportedMarginModes": [
"isolated",
"cross"
],
"markPrice": 3125.4,
"oraclePrice": 3125.1,
"priceChange24h": -1.233,
"priceChangePercent24h": -5.01,
"volume24h": 12500000,
"openInterest": 3400,
"fundingRate": "0.00012",
"fundingRateIntervalHours": 8,
"minSize": 10.22,
"metadata": {
"name": "ETH-USDC Perpetual",
"logoURI": "<string>",
"url": "https://app.hyperliquid.xyz/trade/ETH"
},
"makerFee": "0.0002",
"takerFee": "0.0004"
}
]
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "yield-xyz-borrow returned a response for GET /v1/positions that does not match the expected schema",
"id": "INTEGRATION_RESPONSE_SCHEMA_DRIFT",
"details": {
"integration": "yield-xyz-borrow",
"endpoint": "GET /v1/positions",
"issues": [
{
"path": "supplyBalances.0.balanceUsd",
"message": "Expected string, received number",
"code": "invalid_type"
}
]
}
}{
"error": "<string>"
}List markets
List tradable instruments (markets), each with mark and oracle price, funding rate, leverage range, fees and minimum size. Filter by venue and sort by 24h volume, mark price or 24h change.
This is a proxy to the Yield.xyz Perps GET /v1/markets endpoint. Portal validates the upstream response against the schema documented here before returning it under data, and translates asset network values to CAIP-2 (venue slugs pass through unchanged). If Yield.xyz changes the response shape, Portal returns a 500 with id: INTEGRATION_RESPONSE_SCHEMA_DRIFT instead of a partial response. Upstream reference: Yield.xyz Perps API.
curl --request GET \
--url https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets', 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.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portalhq.io/api/v3/clients/me/integrations/yield-xyz-perps/markets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"total": 150,
"offset": 0,
"limit": 25,
"items": [
{
"id": "hyperliquid-eth-usdc",
"providerId": "hyperliquid",
"baseAsset": {
"symbol": "USDC",
"network": "hyperliquid",
"name": "USD Coin",
"decimals": 6,
"address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"logoURI": "<string>"
},
"quoteAsset": {
"symbol": "USDC",
"network": "hyperliquid",
"name": "USD Coin",
"decimals": 6,
"address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"logoURI": "<string>"
},
"leverageRange": [
1,
50
],
"supportedMarginModes": [
"isolated",
"cross"
],
"markPrice": 3125.4,
"oraclePrice": 3125.1,
"priceChange24h": -1.233,
"priceChangePercent24h": -5.01,
"volume24h": 12500000,
"openInterest": 3400,
"fundingRate": "0.00012",
"fundingRateIntervalHours": 8,
"minSize": 10.22,
"metadata": {
"name": "ETH-USDC Perpetual",
"logoURI": "<string>",
"url": "https://app.hyperliquid.xyz/trade/ETH"
},
"makerFee": "0.0002",
"takerFee": "0.0004"
}
]
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "yield-xyz-borrow returned a response for GET /v1/positions that does not match the expected schema",
"id": "INTEGRATION_RESPONSE_SCHEMA_DRIFT",
"details": {
"integration": "yield-xyz-borrow",
"endpoint": "GET /v1/positions",
"issues": [
{
"path": "supplyBalances.0.balanceUsd",
"message": "Expected string, received number",
"code": "invalid_type"
}
]
}
}{
"error": "<string>"
}Authorizations
Client API Key or Client Session Token (CST). Pass as a Bearer token in the Authorization header.
Query Parameters
Offset for pagination
x >= 00
Maximum number of items to return
1 <= x <= 10025
Filter by venue (venue slug).
Sort key.
volume24h, markPrice, priceChangePercent24h Sort direction.
asc, desc Response
Paginated list of markets
Show child attributes
Show child attributes
Was this page helpful?