curl --request GET \
--url https://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits \
--header 'X-Api-Key: <api-key>'import requests
url = "https://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits"
headers = {"X-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Api-Key': '<api-key>'}};
fetch('https://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits', 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://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"walletAddress": "<string>",
"tier": 0,
"caps": {
"singleDeposit": "<string>",
"thirtyDay": "<string>",
"twelveMonth": "<string>"
},
"used": {
"thirtyDay": "<string>",
"twelveMonth": "<string>"
},
"remaining": {
"thirtyDay": "<string>",
"twelveMonth": "<string>"
},
"restrictions": {
"depositBlocked": true,
"tradeBlocked": true,
"withdrawBlocked": true
}
}Per-EOA rolling deposit caps + current usage
Read-only view of the on-chain DepositLimitRegistry for the authenticated wallet: its registry tier, effective caps (single deposit, rolling 30-day, rolling 12-month), usage and headroom inside each rolling window, and the deposit / trade / withdraw restriction flags. All amount fields are decimal USDC strings. Windows are rolling 30-day / 12-month sums, so there is no reset instant — old deposits drop out of used as they roll off the window. "79228162514264337593543.950335" (uint96 max) means no ceiling, not a real limit.
curl --request GET \
--url https://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits \
--header 'X-Api-Key: <api-key>'import requests
url = "https://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits"
headers = {"X-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Api-Key': '<api-key>'}};
fetch('https://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits', 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://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://core.api.dev.predictstreet.sde.adifoundation.ai/api/me/deposit-limits")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"walletAddress": "<string>",
"tier": 0,
"caps": {
"singleDeposit": "<string>",
"thirtyDay": "<string>",
"twelveMonth": "<string>"
},
"used": {
"thirtyDay": "<string>",
"twelveMonth": "<string>"
},
"remaining": {
"thirtyDay": "<string>",
"twelveMonth": "<string>"
},
"restrictions": {
"depositBlocked": true,
"tradeBlocked": true,
"withdrawBlocked": true
}
}Authorizations
Partner / integrator key — format ps_live_<keyId>_<secret>. Partner keys are issued by PredictStreet; a user can also create keys bound to their own wallet from their account settings in the web app. Never ship to a browser. multi_wallet partners must additionally send X-User-Wallet: 0x<40-hex> on every authenticated request to declare the acting wallet. See the API keys guide for scope taxonomy, partner kinds, rate limits, and rotation procedure.
Headers
Required for multi_wallet partners on every authenticated request; ignored for single_wallet. Declares the acting end-user wallet for this request — drives KYC checks, balances/positions/orders attribution, rate-limit buckets, and audit. Lower-cased server-side. Missing on a multi_wallet key → 401 api_key_user_wallet_required; malformed → 401 api_key_user_wallet_invalid. The on-chain CTFExchange/Vault contracts still verify EIP-712 signer ↔ vault binding, so loosening API-layer attribution is safe by construction.
^0x[a-fA-F0-9]{40}$"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb3"
Response
OK
Authenticated wallet (lowercase 0x-hex).
The wallet's on-chain DepositLimitRegistry tier — NOT the KYC tier returned by GET /api/me; the two scales differ and must not be compared. Values: 0 = NONE, 1 = TIER_1, 2 = TIER_2, 3 = TIER_3, 4 = VIP, 5 = REJECTED. 0 (NONE) means the on-chain initialisation has not landed yet: deposits revert until it does.
0, 1, 2, 3, 4, 5 Effective caps (the tier default with any per-wallet override applied). These figures, not tier, are what separate one KYC level from another.
Show child attributes
Show child attributes
Deposits recorded inside each rolling window.
Show child attributes
Show child attributes
Headroom under each rolling cap = cap - used (clamped at 0).
Show child attributes
Show child attributes
Restriction flags, also enforced on-chain by the vault. A true is not by itself evidence of a compliance action — see each field.
Show child attributes
Show child attributes