# Shared Resource Examples

Working examples for managing proxies, groups, and tags — shared across Browser Profiles and Cloud Phones.

**Base URL**: `http://127.0.0.1:40000`

## Proxy Management

### curl

```bash
# List proxies
curl -X POST http://127.0.0.1:40000/api/proxyInfo/page \
  -H "Content-Type: application/json" \
  -d '{"pageNo": 1, "pageSize": 10}'

# Add a proxy
curl -X POST http://127.0.0.1:40000/api/proxyInfo/add \
  -H "Content-Type: application/json" \
  -d '{
    "proxyName": "US Proxy 1",
    "proxyType": "socks5",
    "host": "proxy.example.com",
    "port": 1080,
    "proxyUserName": "user",
    "proxyPassword": "pass"
  }'

# Delete a proxy
curl -X POST http://127.0.0.1:40000/api/proxyInfo/delete \
  -H "Content-Type: application/json" \
  -d '{"proxyId": "PROXY_ID"}'
```

### Python

```python
import requests

BASE = "http://127.0.0.1:40000"

# Add multiple proxies
proxies = [
    {"proxyName": "US-1", "proxyType": "socks5", "host": "us1.proxy.com", "port": 1080},
    {"proxyName": "UK-1", "proxyType": "http", "host": "uk1.proxy.com", "port": 8080},
    {"proxyName": "DE-1", "proxyType": "socks5", "host": "de1.proxy.com", "port": 1080},
]

for proxy in proxies:
    resp = requests.post(f"{BASE}/api/proxyInfo/add", json=proxy)
    print(f"Added {proxy['proxyName']}: {resp.json()['code']}")

# List all proxies
resp = requests.post(f"{BASE}/api/proxyInfo/page", json={
    "pageNo": 1, "pageSize": 100
})
all_proxies = resp.json()["data"]["dataList"]
print(f"Total proxies: {len(all_proxies)}")
```

### Node.js

```javascript
const axios = require('axios');

const BASE = 'http://127.0.0.1:40000';

async function main() {
  // Add a proxy
  const addResp = await axios.post(`${BASE}/api/proxyInfo/add`, {
    proxyName: 'US Proxy',
    proxyType: 'socks5',
    host: 'proxy.example.com',
    port: 1080,
    proxyUserName: 'user',
    proxyPassword: 'pass'
  });
  console.log('Proxy added:', addResp.data);

  // List all proxies
  const listResp = await axios.post(`${BASE}/api/proxyInfo/page`, {
    pageNo: 1, pageSize: 100
  });
  console.log(`Total proxies: ${listResp.data.data.dataList.length}`);
}

main().catch(console.error);
```

## Group Management

### Python

```python
import requests

BASE = "http://127.0.0.1:40000"

# Create a group
resp = requests.post(f"{BASE}/api/envgroup/create", json={
    "groupName": "Production"
})
group_id = resp.json()["data"]
print(f"Created group: {group_id}")

# List all groups
resp = requests.post(f"{BASE}/api/envgroup/page", json={
    "pageNo": 1, "pageSize": 50
})
groups = resp.json()["data"]["dataList"]
for g in groups:
    print(f"  {g['groupId']}: {g['groupName']}")

# Update group name
requests.post(f"{BASE}/api/envgroup/edit", json={
    "groupId": group_id,
    "groupName": "Production-v2"
})
```

## Tag Management

### Python

```python
import requests

BASE = "http://127.0.0.1:40000"

# Create tags
for tag_name in ["web-scraping", "social-media", "e-commerce"]:
    resp = requests.post(f"{BASE}/api/envtag/create", json={
        "tagName": tag_name
    })
    print(f"Created tag '{tag_name}': {resp.json()['code']}")

# List all tags
resp = requests.post(f"{BASE}/api/envtag/all", json={})
tags = resp.json()["data"]
print(f"Total tags: {len(tags)}")
```

## Complete Workflow: Create Resources → Assign to Profile

```python
import requests

BASE = "http://127.0.0.1:40000"

# 1. Create a proxy
resp = requests.post(f"{BASE}/api/proxyInfo/add", json={
    "proxyName": "My Proxy",
    "proxyType": "socks5",
    "host": "proxy.example.com",
    "port": 1080
})
proxy_id = resp.json()["data"]

# 2. Create a group
resp = requests.post(f"{BASE}/api/envgroup/create", json={
    "groupName": "Automation"
})
group_id = resp.json()["data"]

# 3. Create a browser profile with proxy and group
resp = requests.post(f"{BASE}/api/env/create/quick", json={
    "name": "automated-profile",
    "groupId": group_id,
    "proxyInfo": {
        "proxyId": proxy_id
    }
})
env_id = resp.json()["data"]["envId"]
print(f"Profile {env_id} created with proxy {proxy_id} in group {group_id}")
```