Files
flvx/skills/flvx-api/references/examples/curl-examples.md
T
2026-02-28 14:07:54 +08:00

6.8 KiB

curl Examples

Quick reference for common operations using curl.

Setup

# Set environment variables
export FLVX_BASE_URL="https://your-panel.example.com"
export FLVX_USERNAME="admin"
export FLVX_PASSWORD="your-password"

# Login and save token
TOKEN=$(curl -s -X POST "${FLVX_BASE_URL}/api/v1/user/login" \
  -H "Content-Type: application/json" \
  -d "{\"username\":\"${FLVX_USERNAME}\",\"password\":\"${FLVX_PASSWORD}\"}" \
  | jq -r '.data.token')

echo "Token: ${TOKEN:0:20}..."

User Operations

# Get my package info
curl -s -X POST "${FLVX_BASE_URL}/api/v1/user/package" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{}' | jq '.'

# List all users (admin)
curl -s -X POST "${FLVX_BASE_URL}/api/v1/user/list" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"page":1,"pageSize":20}' | jq '.'

# Create user (admin)
curl -s -X POST "${FLVX_BASE_URL}/api/v1/user/create" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "user": "alice",
    "pwd": "SecurePass123!",
    "name": "Alice",
    "flow": 50,
    "num": 10,
    "expTime": 1767225600000
  }' | jq '.'

# Reset user traffic
curl -s -X POST "${FLVX_BASE_URL}/api/v1/user/reset" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"id":2,"type":"user"}' | jq '.'

# Delete user
curl -s -X POST "${FLVX_BASE_URL}/api/v1/user/delete" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"id":2}' | jq '.'

Node Operations

# List nodes with status
curl -s -X POST "${FLVX_BASE_URL}/api/v1/node/list" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{}' | jq '.data.list[] | {name, status: (.status == 1), ip: .server_ip}'

# Create node
curl -s -X POST "${FLVX_BASE_URL}/api/v1/node/create" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"name":"US-Node-1","serverIp":"203.0.113.10"}' | jq '.'

# Get install command
curl -s -X POST "${FLVX_BASE_URL}/api/v1/node/install" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"id":2}' | jq -r '.data.command'

# Check node status
curl -s -X POST "${FLVX_BASE_URL}/api/v1/node/check-status" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{}' | jq '.'

# Upgrade node
curl -s -X POST "${FLVX_BASE_URL}/api/v1/node/upgrade" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"id":2,"version":"2.1.5"}' | jq '.'

# Delete node
curl -s -X POST "${FLVX_BASE_URL}/api/v1/node/delete" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"id":2}' | jq '.'

Tunnel Operations

# List tunnels
curl -s -X POST "${FLVX_BASE_URL}/api/v1/tunnel/list" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{}' | jq '.data.list[] | {id, name, status}'

# Create tunnel
curl -s -X POST "${FLVX_BASE_URL}/api/v1/tunnel/create" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "HK-US-Tunnel",
    "type": 1,
    "inNodeId": [1],
    "outNodeId": [2]
  }' | jq '.'

# Assign tunnel to user
curl -s -X POST "${FLVX_BASE_URL}/api/v1/tunnel/user/assign" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"userId":2,"tunnelId":1,"flow":30}' | jq '.'

# Get available tunnels (for current user)
curl -s -X POST "${FLVX_BASE_URL}/api/v1/tunnel/user/tunnel" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{}' | jq '.'

Forward Operations

# List forwards with traffic
curl -s -X POST "${FLVX_BASE_URL}/api/v1/forward/list" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{}' | jq '.data.list[] | {
    name,
    tunnel: .tunnel_name,
    port: .in_port,
    target: .remote_addr,
    status: (if .status == 1 then "running" else "paused" end),
    upload_gb: ((.in_flow / 1073741824) | floor),
    download_gb: ((.out_flow / 1073741824) | floor)
  }'

# Create forward
curl -s -X POST "${FLVX_BASE_URL}/api/v1/forward/create" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-web-server",
    "tunnelId": 1,
    "remoteAddr": "192.168.1.100:80",
    "strategy": "fifo"
  }' | jq '.'

# Create forward with load balancing
curl -s -X POST "${FLVX_BASE_URL}/api/v1/forward/create" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "web-cluster",
    "tunnelId": 1,
    "remoteAddr": "10.0.0.1:80,10.0.0.2:80,10.0.0.3:80",
    "strategy": "round"
  }' | jq '.'

# Pause forward
curl -s -X POST "${FLVX_BASE_URL}/api/v1/forward/pause" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"id":1}' | jq '.'

# Resume forward
curl -s -X POST "${FLVX_BASE_URL}/api/v1/forward/resume" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"id":1}' | jq '.'

# Diagnose forward
curl -s -X POST "${FLVX_BASE_URL}/api/v1/forward/diagnose" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"id":1}' | jq '.'

# Delete forward
curl -s -X POST "${FLVX_BASE_URL}/api/v1/forward/delete" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"id":1}' | jq '.'

# Batch pause forwards
curl -s -X POST "${FLVX_BASE_URL}/api/v1/forward/batch-pause" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"ids":[1,2,3]}' | jq '.'

Backup Operations

# Export all data
curl -s -X POST "${FLVX_BASE_URL}/api/v1/backup/export" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{}' > backup-$(date +%Y%m%d).json

# Export specific types
curl -s -X POST "${FLVX_BASE_URL}/api/v1/backup/export" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"types":["users","tunnels"]}' > partial-backup.json

# Import backup
curl -s -X POST "${FLVX_BASE_URL}/api/v1/backup/import" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d @backup-20260226.json | jq '.'

Helper Functions

# Add to ~/.bashrc or ~/.zshrc

flvx-login() {
  export FLVX_BASE_URL="${1:-$FLVX_BASE_URL}"
  TOKEN=$(curl -s -X POST "${FLVX_BASE_URL}/api/v1/user/login" \
    -H "Content-Type: application/json" \
    -d "{\"username\":\"${FLVX_USERNAME}\",\"password\":\"${FLVX_PASSWORD}\"}" \
    | jq -r '.data.token')
  export FLVX_TOKEN="$TOKEN"
  echo "Logged in. Token: ${TOKEN:0:20}..."
}

flvx-api() {
  local endpoint="$1"
  local data="${2:-{}}"
  curl -s -X POST "${FLVX_BASE_URL}${endpoint}" \
    -H "Authorization: ${FLVX_TOKEN}" \
    -H "Content-Type: application/json" \
    -d "$data" | jq '.'
}

# Usage:
# flvx-login
# flvx-api /api/v1/node/list
# flvx-api /api/v1/forward/list '{"keyword":"web"}'