이 페이지의 엔드포인트
GET /v1/mobile: 모바일 포트 목록GET /v1/mobile/{portId}: 모바일 포트 조회PATCH /v1/mobile/{portId}: 이름 변경, 자동 갱신 설정 또는 자동 로테이션 구성POST /v1/mobile/{portId}/rotate: 지금 IP 변경GET /v1/mobile/{portId}/rotate: 로테이션 링크 (쿼리 문자열에 API 키를 포함한 GET 요청)POST /v1/mobile/{portId}/reset-password: 포트의 새 프록시 비밀번호 생성GET /v1/mobile/{portId}/usage: 포트를 통한 일일 트래픽 (참고: 데이터 무제한, 공정 사용 정책 적용)GET /v1/catalog/countries/{countryCode}/carriers: 국가별 4G/5G 포트 이용 가능 모바일 통신사
기본 URL https://localserpproxy.com/api/v1. 인증, 오류 및 제한 사항은 API 개요를 참조하세요.
모바일 포트 목록
GET/v1/mobile
인증: Authorization: Bearer API_KEY 헤더에 API 키를 입력합니다.
응답 200 OK
{
"data": [
{
"id": "mob_2v8k1q",
"label": "US Verizon #1",
"status": "active",
"country": "US",
"city": null,
"carrier": "verizon",
"carrierName": "Verizon",
"networkType": "4G",
"currentIp": "203.0.113.201",
"ipChangedAt": "2026-10-05T14:03:11Z",
"endpoint": {
"host": "gw.localserpproxy.com",
"httpPort": 7777,
"socksPort": 7778
},
"username": "USERNAME",
"password": "PASSWORD",
"rotation": {
"mode": "interval",
"intervalMinutes": 10
},
"minRotationIntervalSeconds": 30,
"rotationLink": "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/rotate?key=API_KEY",
"planId": "mob-us-30d",
"autoRenew": false,
"createdAt": "2026-10-05T14:03:11Z",
"expiresAt": "2026-11-04T14:03:11Z"
}
]
}코드 예시
curl -s "https://localserpproxy.com/api/v1/mobile" \
-H "Authorization: Bearer $API_KEY"import os
import requests
API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.get(f"{API}/mobile", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/mobile`, {
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());모바일 포트 받기
GET/v1/mobile/{portId}
인증: Authorization: Bearer API_KEY 헤더에 API 키를 입력합니다.
매개변수
| 이름 | 위치 | 유형 | 필수 | 설명 |
|---|---|---|---|---|
portId | path | string | 예 | — |
응답 200 OK
{
"id": "mob_2v8k1q",
"label": "US Verizon #1",
"status": "active",
"country": "US",
"city": null,
"carrier": "verizon",
"carrierName": "Verizon",
"networkType": "4G",
"currentIp": "203.0.113.201",
"ipChangedAt": "2026-10-05T14:03:11Z",
"endpoint": {
"host": "gw.localserpproxy.com",
"httpPort": 7777,
"socksPort": 7778
},
"username": "USERNAME",
"password": "PASSWORD",
"rotation": {
"mode": "interval",
"intervalMinutes": 10
},
"minRotationIntervalSeconds": 30,
"rotationLink": "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/rotate?key=API_KEY",
"planId": "mob-us-30d",
"autoRenew": false,
"createdAt": "2026-10-05T14:03:11Z",
"expiresAt": "2026-11-04T14:03:11Z"
}코드 예시
curl -s "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q" \
-H "Authorization: Bearer $API_KEY"import os
import requests
API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.get(f"{API}/mobile/mob_2v8k1q", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/mobile/mob_2v8k1q`, {
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());이름 변경, 자동 갱신 켜기/끄기 또는 자동 IP 변경 설정
PATCH/v1/mobile/{portId}
포트 이름을 변경하고, 자동 갱신을 켜거나 끄거나, 2분마다부터 24시간마다까지 자동 IP 변경 간격을 설정하세요: "rotation": { "mode": "interval", "intervalMinutes": 10 } (2~1440분). "mode": "manual"은 기능을 끕니다. 설정하지 않으면 IP를 직접 변경할 때까지 포트가 현재 IP를 유지하지만, 통신사가 때때로 자체적으로 IP를 변경할 수 있습니다.
인증: Authorization: Bearer API_KEY 헤더에 API 키를 입력합니다.
매개변수
| 이름 | 위치 | 유형 | 필수 | 설명 |
|---|---|---|---|---|
portId | path | string | 예 | — |
요청 본문
| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
label | string | 아니요 | 최대 60자 |
autoRenew | boolean | 아니요 | — |
rotation | object | 아니요 | 자동 IP 변경 간격: { "mode": "interval", "intervalMinutes": 2–1440 } (2분마다부터 24시간마다까지), 또는 필요할 때만 IP를 변경하려면 { "mode": "manual", "intervalMinutes": null }. |
{
"rotation": {
"mode": "interval",
"intervalMinutes": 10
}
}{
"rotation": {
"mode": "manual",
"intervalMinutes": null
}
}응답 200 OK
{
"id": "mob_2v8k1q",
"label": "US Verizon #1",
"status": "active",
"country": "US",
"city": null,
"carrier": "verizon",
"carrierName": "Verizon",
"networkType": "4G",
"currentIp": "203.0.113.201",
"ipChangedAt": "2026-10-05T14:03:11Z",
"endpoint": {
"host": "gw.localserpproxy.com",
"httpPort": 7777,
"socksPort": 7778
},
"username": "USERNAME",
"password": "PASSWORD",
"rotation": {
"mode": "interval",
"intervalMinutes": 10
},
"minRotationIntervalSeconds": 30,
"rotationLink": "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/rotate?key=API_KEY",
"planId": "mob-us-30d",
"autoRenew": false,
"createdAt": "2026-10-05T14:03:11Z",
"expiresAt": "2026-11-04T14:03:11Z"
}코드 예시
curl -s -X PATCH "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"rotation":{"mode":"interval","intervalMinutes":10}}'import os
import requests
API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.patch(f"{API}/mobile/mob_2v8k1q", headers=HEADERS, json={"rotation": {"mode": "interval", "intervalMinutes": 10}}, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/mobile/mob_2v8k1q`, {
method: 'PATCH',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ rotation: { mode: 'interval', intervalMinutes: 10 } }),
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());지금 IP 변경
POST/v1/mobile/{portId}/rotate
IP를 변경할 때마다 포트가 통신사에 다시 연결되어 새 IP를 받으며, 보통 5~15초가 걸립니다. 통신사가 가끔 같은 IP를 다시 할당할 수 있습니다. 이 경우 다시 IP를 변경하세요. 포트별로 30초에 최대 1회까지 가능합니다(minRotationIntervalSeconds). 너무 빨리 요청하면 429 rotation_too_soon이 반환되며, Retry-After초 기다려야 합니다.
인증: Authorization: Bearer API_KEY 헤더에 API 키를 입력합니다.
매개변수
| 이름 | 위치 | 유형 | 필수 | 설명 |
|---|---|---|---|---|
portId | path | string | 예 | — |
응답 200 OK
{
"ip": "203.0.113.201",
"previousIp": "203.0.113.77",
"rotatedAt": "2026-10-05T14:03:11Z",
"nextRotationAvailableAt": "2026-10-05T14:03:41Z"
}코드 예시
curl -s -X POST "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/rotate" \
-H "Authorization: Bearer $API_KEY"import os
import requests
API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.post(f"{API}/mobile/mob_2v8k1q/rotate", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/mobile/mob_2v8k1q/rotate`, {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());IP 변경 링크 (쿼리 문자열에 API 키를 넣어 GET 요청)
GET/v1/mobile/{portId}/rotate
POST과 동일하며, 스크립트와 북마크에서 사용할 수 있습니다: GET https://localserpproxy.com/api/v1/mobile/{portId}/rotate?key=API_KEY. 키에 proxies 범위가 필요합니다. format=text은 새 IP를 text/plain로 반환합니다.
인증: key 쿼리 매개변수(범위 proxies)에 API 키를 입력합니다. 따라서 북마크에서 링크를 열 수 있습니다.
매개변수
| 이름 | 위치 | 유형 | 필수 | 설명 |
|---|---|---|---|---|
key | query | string | 예 | API 키 (범위 proxies). |
portId | path | string | 예 | — |
format | query | json · text | 아니요 | 기본 json |
응답 200 OK
{
"ip": "203.0.113.201",
"previousIp": "203.0.113.77",
"rotatedAt": "2026-10-05T14:03:11Z",
"nextRotationAvailableAt": "2026-10-05T14:03:41Z"
}코드 예시
curl -s "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/rotate?key=$API_KEY&format=text"import os
import requests
API = "https://localserpproxy.com/api/v1"
r = requests.get(f"{API}/mobile/mob_2v8k1q/rotate", params={"key": os.environ["API_KEY"], "format": "text"}, timeout=30)
r.raise_for_status()
print(r.text)// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/mobile/mob_2v8k1q/rotate?key=${process.env.API_KEY}&format=text`);
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.text());포트의 새 프록시 비밀번호 생성
POST/v1/mobile/{portId}/reset-password
인증: Authorization: Bearer API_KEY 헤더에 API 키를 입력합니다.
매개변수
| 이름 | 위치 | 유형 | 필수 | 설명 |
|---|---|---|---|---|
portId | path | string | 예 | — |
응답 200 OK
{
"id": "mob_2v8k1q",
"label": "US Verizon #1",
"status": "active",
"country": "US",
"city": null,
"carrier": "verizon",
"carrierName": "Verizon",
"networkType": "4G",
"currentIp": "203.0.113.201",
"ipChangedAt": "2026-10-05T14:03:11Z",
"endpoint": {
"host": "gw.localserpproxy.com",
"httpPort": 7777,
"socksPort": 7778
},
"username": "USERNAME",
"password": "PASSWORD",
"rotation": {
"mode": "interval",
"intervalMinutes": 10
},
"minRotationIntervalSeconds": 30,
"rotationLink": "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/rotate?key=API_KEY",
"planId": "mob-us-30d",
"autoRenew": false,
"createdAt": "2026-10-05T14:03:11Z",
"expiresAt": "2026-11-04T14:03:11Z"
}코드 예시
curl -s -X POST "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/reset-password" \
-H "Authorization: Bearer $API_KEY"import os
import requests
API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.post(f"{API}/mobile/mob_2v8k1q/reset-password", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/mobile/mob_2v8k1q/reset-password`, {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());포트를 통한 일일 트래픽(참고: 공정 사용 정책에 따라 데이터 무제한)
GET/v1/mobile/{portId}/usage
참고용입니다. 전용 포트에서 공정 사용 정책에 따라 데이터를 무제한으로 사용할 수 있습니다. 사용량이 매우 많으면 통신사가 속도를 낮추거나 일시 중지할 수 있습니다.
인증: Authorization: Bearer API_KEY 헤더에 API 키를 입력합니다.
매개변수
| 이름 | 위치 | 유형 | 필수 | 설명 |
|---|---|---|---|---|
portId | path | string | 예 | — |
from | query | string (date) | 아니요 | 첫째 날(UTC), 해당 날짜 포함. 기본값 = to보다 29일 전. |
to | query | string (date) | 아니요 | 마지막 날(UTC), 해당 날짜 포함. 기본값 = 오늘. 최대 기간 366일. |
응답 200 OK
{
"from": "2026-10-04",
"to": "2026-10-05",
"totalBytes": 2350000000,
"totalRequests": 48210,
"points": [
{
"date": "2026-10-04",
"bytes": 1200000000,
"requests": 24800
},
{
"date": "2026-10-05",
"bytes": 1150000000,
"requests": 23410
}
],
"byCountry": [
{
"country": "US",
"bytes": 2350000000
}
]
}코드 예시
curl -s "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/usage" \
-H "Authorization: Bearer $API_KEY"import os
import requests
API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.get(f"{API}/mobile/mob_2v8k1q/usage", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/mobile/mob_2v8k1q/usage`, {
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());국가별 4G/5G 포트 사용 가능 모바일 통신사
GET/v1/catalog/countries/{countryCode}/carriers
공개: API 키가 필요하지 않습니다.
매개변수
| 이름 | 위치 | 유형 | 필수 | 설명 |
|---|---|---|---|---|
countryCode | path | string | 예 | ISO 3166-1 alpha-2, 대문자. |
응답 200 OK
{
"data": [
{
"id": "verizon",
"name": "Verizon",
"networkTypes": [
"4G",
"5G"
],
"available": true,
"cities": []
}
]
}코드 예시
curl -s "https://localserpproxy.com/api/v1/catalog/countries/US/carriers"import os
import requests
API = "https://localserpproxy.com/api/v1"
r = requests.get(f"{API}/catalog/countries/US/carriers", timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/catalog/countries/US/carriers`);
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());