Eindpunten op deze pagina
GET /v1/catalog/products: Producten, abonnementen en prijzenPOST /v1/orders: Een abonnement kopen met je saldo (nieuwe dienst, meer verkeer of verlenging van de poort)GET /v1/orders: Bestellingen weergevenGET /v1/orders/{orderId}: Een bestelling ophalen
Basis-URL https://localserpproxy.com/api/v1. Authenticatie, fouten en limieten: zie het API-overzicht.
Producten, abonnementen en prijzen
GET/v1/catalog/products
Alle producten met hun abonnementen en prijzen, precies zoals ze in rekening worden gebracht bij het bestellen.
Openbaar: geen API-sleutel nodig.
Response 200 OK
{
"data": [
{
"id": "residential",
"name": "Residential proxies",
"description": "Residential traffic for manual local search, advertising, price and application checks in US cities. State, city and ZIP selection, subject to available exits; no promise of GPS position or rankings.",
"unit": "GB",
"plans": [
{
"id": "res-10",
"productId": "residential",
"name": "Local team",
"quantity": 10,
"unit": "GB",
"durationDays": null,
"price": "7.50",
"pricePerUnit": "0.75",
"popular": false,
"features": [
"US city selection, subject to availability",
"Traffic stays until used",
"Rotating or sticky sessions"
],
"available": true,
"countries": null
}
]
}
]
}Codevoorbeelden
curl -s "https://localserpproxy.com/api/v1/catalog/products"import os
import requests
API = "https://localserpproxy.com/api/v1"
r = requests.get(f"{API}/catalog/products", 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/products`);
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Koop een abonnement met je saldo (nieuwe dienst, extra verkeer of verlenging van een poort)
POST/v1/orders
Wordt altijd betaald met het prepaid saldo: de API berekent de prijs (catalogusprijs × quantity), het bedrag wordt van je saldo afgeschreven, de dienst wordt aangemaakt of verlengd en de bestelling wordt teruggegeven als completed met de bijbehorende fulfillment. Je proxygegevens zijn direct beschikbaar.
- Nieuw residentieel verkeer:
{ "planId": "res-10" }. - Nieuw roterend 4G/5G-verkeer (per GB):
{ "planId": "mgb-10" }(een verkeersabonnement metproductId: "mobile-gb", geleverd infulfillment.residentialSubscriptionId). - Verkeer toevoegen aan een bestaand abonnement:
{ "planId": "res-10", "options": { "subscriptionId": "res_9x2m4k" } }: het abonnement moet bij het product van de dienst horen. - Nieuwe mobiele poort(en):
{ "planId": "mob-us-30d", "quantity": 1, "options": { "country": "US" } }, eventueel metcarrier(bekijk de providers van een land bij Mobiele poorten). Zoneabonnementen zijn alleen geldig in de landen van hun zone (422opoptions.countryanders). - Een mobiele poort verlengen:
{ "planId": "mob-us-7d", "options": { "portId": "mob_2v8k1q" } }voegt de looptijd van het abonnement toe aanexpiresAt.
Saldo te laag → 402 insufficient_balance, met het ontbrekende bedrag en een voorgestelde opwaardering in error.details (missing, suggestedTopUp). Bij een fout wordt er niets afgeschreven. Om het verschil te betalen, start je een opwaardering met hetzelfde verzoek in purchase (POST /v1/topups): het abonnement wordt gekocht zodra de opwaardering is bijgeschreven.
Authenticatie: API-sleutel in de Authorization: Bearer API_KEY-header.
Parameters
| Naam | In | Type | Verplicht | Beschrijving |
|---|---|---|---|---|
Idempotency-Key | header | string | Nee | Unieke sleutel (bijv. een UUID) om een POST veilig opnieuw te proberen. 24 h bewaard. — max. 128 tekens |
Requestbody
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
planId | string | Ja | — |
quantity | integer | Nee | 1–100, standaard 1 |
options | object | Nee | — |
{
"planId": "res-10"
}{
"planId": "mob-us-30d",
"quantity": 1,
"options": {
"country": "US",
"carrier": "verizon",
"autoRenew": true
}
}{
"planId": "mob-us-7d",
"options": {
"portId": "mob_2v8k1q"
}
}{
"planId": "mgb-10"
}{
"planId": "mob-us-30d",
"options": {
"country": "US",
"carrier": "verizon"
}
}Response 201 Created
{
"id": "ord_4f8k2m9q",
"status": "completed",
"productId": "residential",
"planId": "res-10",
"planName": "Local team",
"quantity": 1,
"unitPrice": "7.50",
"subtotal": "7.50",
"discount": "0.00",
"total": "7.50",
"promoCode": null,
"currency": "USD",
"topUpId": null,
"options": {},
"fulfillment": {
"residentialSubscriptionId": "res_9x2m4k",
"mobilePortIds": []
},
"createdAt": "2026-10-05T14:03:11Z",
"paidAt": "2026-10-05T14:03:11Z"
}Codevoorbeelden
curl -s -X POST "https://localserpproxy.com/api/v1/orders" \
-H "Authorization: Bearer $API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"planId":"res-10"}'import os, uuid
import requests
API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}", "Idempotency-Key": str(uuid.uuid4())}
r = requests.post(f"{API}/orders", headers=HEADERS, json={"planId": "res-10"}, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
import { randomUUID } from 'node:crypto';
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/orders`, {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Idempotency-Key': randomUUID(), 'Content-Type': 'application/json' },
body: JSON.stringify({ planId: 'res-10' }),
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Bestellingen weergeven
GET/v1/orders
Authenticatie: API-sleutel in de Authorization: Bearer API_KEY-header.
Parameters
| Naam | In | Type | Verplicht | Beschrijving |
|---|---|---|---|---|
page | query | integer | Nee | ≥ 1, standaard 1 |
perPage | query | integer | Nee | 1–100, standaard 20 |
status | query | completed · cancelled | Nee | Bestellingen worden aangemaakt als betaald (afgeschreven van het saldo). completed — betaald en geleverd (gegevens direct beschikbaar). |
productId | query | string | Nee | Product-ID uit de catalogus. Waarden voor LocalSERP Proxy: residential (GB), mobile (dedicated 4G/5G-poorten) en mobile-gb (roterend 4G/5G-verkeer per GB). Clients moeten onbekende waarden kunnen verwerken. |
Response 200 OK
{
"data": [
{
"id": "ord_4f8k2m9q",
"status": "completed",
"productId": "residential",
"planId": "res-10",
"planName": "Local team",
"quantity": 1,
"unitPrice": "7.50",
"subtotal": "7.50",
"discount": "0.00",
"total": "7.50",
"promoCode": null,
"currency": "USD",
"topUpId": null,
"options": {},
"fulfillment": {
"residentialSubscriptionId": "res_9x2m4k",
"mobilePortIds": []
},
"createdAt": "2026-10-05T14:03:11Z",
"paidAt": "2026-10-05T14:03:11Z"
}
],
"pagination": {
"page": 1,
"perPage": 20,
"total": 1,
"totalPages": 1
}
}Codevoorbeelden
curl -s "https://localserpproxy.com/api/v1/orders" \
-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}/orders", 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}/orders`, {
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());Een bestelling ophalen
GET/v1/orders/{orderId}
Authenticatie: API-sleutel in de Authorization: Bearer API_KEY-header.
Parameters
| Naam | In | Type | Verplicht | Beschrijving |
|---|---|---|---|---|
orderId | path | string | Ja | — |
Response 200 OK
{
"id": "ord_4f8k2m9q",
"status": "completed",
"productId": "residential",
"planId": "res-10",
"planName": "Local team",
"quantity": 1,
"unitPrice": "7.50",
"subtotal": "7.50",
"discount": "0.00",
"total": "7.50",
"promoCode": null,
"currency": "USD",
"topUpId": null,
"options": {},
"fulfillment": {
"residentialSubscriptionId": "res_9x2m4k",
"mobilePortIds": []
},
"createdAt": "2026-10-05T14:03:11Z",
"paidAt": "2026-10-05T14:03:11Z"
}Codevoorbeelden
curl -s "https://localserpproxy.com/api/v1/orders/ord_4f8k2m9q" \
-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}/orders/ord_4f8k2m9q", 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}/orders/ord_4f8k2m9q`, {
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());