Skip to content

Trading quickstart

This guide walks you through opening your first position on a pre-IPO valuation event. You'll learn how to set up credentials, configure risk settings, and execute trades.

Key terms

Before diving in, here are the essential concepts:

Glossary

LONG position — A bet that the company's IPO valuation will be higher than current market expectations. You profit when the actual valuation exceeds what the market predicted.

SHORT position — A bet that the company's IPO valuation will be lower than current market expectations. You profit when the actual valuation falls below predictions.

Valuation bands — Price ranges like "$175-200B" or "$200B+". The market assigns a probability to each band. When you trade, your position is spread across these bands based on their probabilities.

Weighted distribution — Instead of betting on a single price, your position is automatically distributed across multiple bands. This gives you exposure to a range of outcomes.

Floor payoff — Your guaranteed minimum return, even in the worst case. For example, a 20% floor means you'll get back at least 20% of your position even if every band goes against you. Higher floors mean more protection but cost more upfront.

What you can do

With Vaulto trading, you can:

  • Open LONG or SHORT positions on 17+ pre-IPO events (SpaceX, OpenAI, Stripe, etc.)
  • Set your own risk tolerance with configurable floor payoffs
  • Monitor positions and P&L in real-time
  • Close positions fully or partially at any time
  • Verify positions on-chain (Polygon)

Step 1: Prerequisites

Before trading, you need:

  1. Vaulto API key — Get one from the Dashboard
  2. Positive account balance — Fund your account with USDC
  3. Polymarket credentials — Required for order execution (see below)

Step 2: Set up Polymarket credentials

Vaulto executes trades through Polymarket's prediction markets. You need to provide your Polymarket API credentials.

Get credentials from Polymarket

  1. Go to Polymarket and connect your wallet
  2. Navigate to Settings > API
  3. Generate new API credentials (key, secret, passphrase)
  4. Save them securely — you'll need all three

Store credentials via API

bash
curl -X POST https://api.vaulto.ai/api/trading/credentials \
  -H "x-api-key: YOUR_VAULTO_KEY" \
  -H "x-user-id: YOUR_WALLET_ADDRESS" \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "your-polymarket-api-key",
    "secret": "your-polymarket-secret",
    "passphrase": "your-polymarket-passphrase"
  }'
javascript
await fetch('https://api.vaulto.ai/api/trading/credentials', {
  method: 'POST',
  headers: {
    'x-api-key': process.env.VAULTO_API_KEY,
    'x-user-id': walletAddress,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    apiKey: polymarketApiKey,
    secret: polymarketSecret,
    passphrase: polymarketPassphrase
  })
});
python
import requests

requests.post(
    'https://api.vaulto.ai/api/trading/credentials',
    headers={
        'x-api-key': VAULTO_API_KEY,
        'x-user-id': wallet_address
    },
    json={
        'apiKey': polymarket_api_key,
        'secret': polymarket_secret,
        'passphrase': polymarket_passphrase
    }
)

Your credentials are encrypted with AES-256-GCM before storage.


Step 3: Configure floor payoffs

Floor payoffs protect your downside. Set them based on your risk tolerance.

Understanding floors

Floor valueWhat it meansTrade-off
0.3 (30%)You keep at least 30% even if all bands loseHigher entry cost, more protection
0.2 (20%)You keep at least 20% in worst caseBalanced approach
0.1 (10%)You keep at least 10% in worst caseLower cost, less protection

Set your floors

bash
curl -X PUT https://api.vaulto.ai/api/trading/settings \
  -H "x-api-key: YOUR_VAULTO_KEY" \
  -H "x-user-id: YOUR_WALLET_ADDRESS" \
  -H "Content-Type: application/json" \
  -d '{
    "floorL": 0.2,
    "floorS": 0.2
  }'
javascript
await fetch('https://api.vaulto.ai/api/trading/settings', {
  method: 'PUT',
  headers: {
    'x-api-key': process.env.VAULTO_API_KEY,
    'x-user-id': walletAddress,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ floorL: 0.2, floorS: 0.2 })
});
python
requests.put(
    'https://api.vaulto.ai/api/trading/settings',
    headers={
        'x-api-key': VAULTO_API_KEY,
        'x-user-id': wallet_address
    },
    json={'floorL': 0.2, 'floorS': 0.2}
)

Step 4: Check current pricing

Before trading, see the current market prices and costs.

bash
curl "https://api.vaulto.ai/api/trading/valuation?eventSlug=spacex-ipo" \
  -H "x-api-key: YOUR_VAULTO_KEY"
javascript
const response = await fetch(
  'https://api.vaulto.ai/api/trading/valuation?eventSlug=spacex-ipo',
  { headers: { 'x-api-key': process.env.VAULTO_API_KEY } }
);
const data = await response.json();
console.log('LONG cost:', data.valuation.longCost);
console.log('SHORT cost:', data.valuation.shortCost);
python
response = requests.get(
    'https://api.vaulto.ai/api/trading/valuation',
    params={'eventSlug': 'spacex-ipo'},
    headers={'x-api-key': VAULTO_API_KEY}
)
data = response.json()
print(f"LONG cost: {data['valuation']['longCost']}")
print(f"SHORT cost: {data['valuation']['shortCost']}")

Example response:

json
{
  "event": { "name": "SpaceX IPO", "slug": "spacex-ipo" },
  "valuation": {
    "longCost": 0.72,
    "shortCost": 0.38,
    "bestLongReturn": 38.5,
    "worstLongReturn": -28.0
  },
  "bands": [
    { "label": "$200B+", "price": 0.35 },
    { "label": "$175-200B", "price": 0.28 },
    { "label": "$150-175B", "price": 0.22 }
  ]
}

Reading the response:

  • longCost: 0.72 — Opening a $100 LONG position costs ~$72
  • shortCost: 0.38 — Opening a $100 SHORT position costs ~$38
  • bestLongReturn: 38.5 — Best case, your LONG returns +38.5%
  • worstLongReturn: -28.0 — Worst case, your LONG returns -28.0%

Step 5: Open a position

Now let's open a LONG position. This bets that SpaceX's IPO valuation will exceed current expectations.

bash
curl -X POST https://api.vaulto.ai/api/trading/buy \
  -H "x-api-key: YOUR_VAULTO_KEY" \
  -H "x-user-id: YOUR_WALLET_ADDRESS" \
  -H "Content-Type: application/json" \
  -d '{
    "eventId": "spacex-ipo",
    "side": "LONG",
    "amount": 100
  }'
javascript
const response = await fetch('https://api.vaulto.ai/api/trading/buy', {
  method: 'POST',
  headers: {
    'x-api-key': process.env.VAULTO_API_KEY,
    'x-user-id': walletAddress,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    eventId: 'spacex-ipo',
    side: 'LONG',
    amount: 100
  })
});
const position = await response.json();
console.log('Position ID:', position.positionId);
python
response = requests.post(
    'https://api.vaulto.ai/api/trading/buy',
    headers={
        'x-api-key': VAULTO_API_KEY,
        'x-user-id': wallet_address
    },
    json={
        'eventId': 'spacex-ipo',
        'side': 'LONG',
        'amount': 100
    }
)
position = response.json()
print(f"Position ID: {position['positionId']}")

Response:

json
{
  "positionId": "pos_abc123",
  "totalCost": 72.00,
  "averagePrice": 0.312,
  "orders": [
    { "bandId": "0x1234...", "side": "BUY", "price": 0.35, "size": 35 },
    { "bandId": "0x5678...", "side": "BUY", "price": 0.28, "size": 28 }
  ]
}

Your $100 position is now distributed across multiple valuation bands.


Step 6: Monitor your position

Check current value

bash
curl "https://api.vaulto.ai/api/trading/positions/pos_abc123/value" \
  -H "x-api-key: YOUR_VAULTO_KEY" \
  -H "x-user-id: YOUR_WALLET_ADDRESS"
javascript
const response = await fetch(
  'https://api.vaulto.ai/api/trading/positions/pos_abc123/value',
  {
    headers: {
      'x-api-key': process.env.VAULTO_API_KEY,
      'x-user-id': walletAddress
    }
  }
);
const value = await response.json();
console.log(`P&L: ${value.unrealizedPnlPercent}%`);
python
response = requests.get(
    'https://api.vaulto.ai/api/trading/positions/pos_abc123/value',
    headers={
        'x-api-key': VAULTO_API_KEY,
        'x-user-id': wallet_address
    }
)
value = response.json()
print(f"P&L: {value['unrealizedPnlPercent']}%")

List all positions

bash
curl "https://api.vaulto.ai/api/trading/positions" \
  -H "x-api-key: YOUR_VAULTO_KEY" \
  -H "x-user-id: YOUR_WALLET_ADDRESS"
javascript
const response = await fetch('https://api.vaulto.ai/api/trading/positions', {
  headers: {
    'x-api-key': process.env.VAULTO_API_KEY,
    'x-user-id': walletAddress
  }
});
const { positions } = await response.json();
positions.forEach(p => console.log(`${p.eventId}: ${p.unrealizedPnlPercent}%`));
python
response = requests.get(
    'https://api.vaulto.ai/api/trading/positions',
    headers={
        'x-api-key': VAULTO_API_KEY,
        'x-user-id': wallet_address
    }
)
for p in response.json()['positions']:
    print(f"{p['eventId']}: {p['unrealizedPnlPercent']}%")

Step 7: Close your position

Close the entire position or just a portion.

Close 100%

bash
curl -X POST https://api.vaulto.ai/api/trading/sell \
  -H "x-api-key: YOUR_VAULTO_KEY" \
  -H "x-user-id: YOUR_WALLET_ADDRESS" \
  -H "Content-Type: application/json" \
  -d '{
    "positionId": "pos_abc123",
    "percentage": 100
  }'
javascript
await fetch('https://api.vaulto.ai/api/trading/sell', {
  method: 'POST',
  headers: {
    'x-api-key': process.env.VAULTO_API_KEY,
    'x-user-id': walletAddress,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ positionId: 'pos_abc123', percentage: 100 })
});
python
requests.post(
    'https://api.vaulto.ai/api/trading/sell',
    headers={
        'x-api-key': VAULTO_API_KEY,
        'x-user-id': wallet_address
    },
    json={'positionId': 'pos_abc123', 'percentage': 100}
)

Close 50% (partial)

Change percentage to 50 to close half your position and keep the rest open.


Example: Complete trading flow

Here's a complete example that checks pricing, opens a position, monitors it, and closes it:

python
import requests
import time

API_KEY = 'your-vaulto-api-key'
USER_ID = 'your-wallet-address'
BASE_URL = 'https://api.vaulto.ai'

headers = {'x-api-key': API_KEY, 'x-user-id': USER_ID}

# 1. Check current pricing
pricing = requests.get(
    f'{BASE_URL}/api/trading/valuation',
    params={'eventSlug': 'spacex-ipo'},
    headers=headers
).json()
print(f"LONG cost: {pricing['valuation']['longCost']}")

# 2. Open a $100 LONG position
position = requests.post(
    f'{BASE_URL}/api/trading/buy',
    headers={**headers, 'Content-Type': 'application/json'},
    json={'eventId': 'spacex-ipo', 'side': 'LONG', 'amount': 100}
).json()
position_id = position['positionId']
print(f"Opened position: {position_id}")

# 3. Wait and check value
time.sleep(60)
value = requests.get(
    f'{BASE_URL}/api/trading/positions/{position_id}/value',
    headers=headers
).json()
print(f"Current P&L: {value['unrealizedPnlPercent']}%")

# 4. Close the position
result = requests.post(
    f'{BASE_URL}/api/trading/sell',
    headers={**headers, 'Content-Type': 'application/json'},
    json={'positionId': position_id, 'percentage': 100}
).json()
print(f"Realized P&L: ${result['realizedPnl']}")

Next steps