Sans KYC — aucune pièce d’identité, aucun selfie ni document. Payez en crypto.
Langue: Français
Choisir 1 GB

Référence API

Commandes

Consultez les forfaits et leurs prix, achetez un forfait avec votre solde (nouveau service, trafic supplémentaire ou prolongation d’un port) et consultez vos commandes passées.

5 min de lecture

Points de terminaison sur cette page

  • GET /v1/catalog/products : produits, offres et tarifs
  • POST /v1/orders : acheter une offre avec le solde (nouveau service, trafic supplémentaire ou prolongation de port)
  • GET /v1/orders : lister les commandes
  • GET /v1/orders/{orderId} : obtenir une commande

URL de base https://localserpproxy.com/api/v1. Authentification, erreurs et limites : consultez la présentation de l’API.

Produits, offres et tarifs

GET/v1/catalog/products

Tous les produits avec leurs offres et tarifs, tels qu’ils sont facturés lors de la commande.

Public : aucune clé API requise.

Réponse 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
        }
      ]
    }
  ]
}

Exemples de code

curl
curl -s "https://localserpproxy.com/api/v1/catalog/products"
Python
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
// 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());

Acheter un forfait avec le solde (nouveau service, trafic supplémentaire ou prolongation de port)

POST/v1/orders

Le paiement est toujours effectué depuis le solde prépayé : le prix est calculé par l’API (prix du catalogue × quantity), le solde est débité, le service est créé ou prolongé et la commande est renvoyée completed avec son fulfillment. Les identifiants du proxy sont disponibles immédiatement.

  • Nouveau trafic résidentiel : { "planId": "res-10" }.
  • Nouveau trafic rotatif 4G/5G (par GB) : { "planId": "mgb-10" } (un abonnement de trafic avec productId: "mobile-gb", livré en fulfillment.residentialSubscriptionId).
  • Ajouter du trafic à un abonnement existant : { "planId": "res-10", "options": { "subscriptionId": "res_9x2m4k" } } : le forfait doit appartenir au produit de l’abonnement.
  • Nouveau(x) port(s) mobile(s) : { "planId": "mob-us-30d", "quantity": 1, "options": { "country": "US" } }, avec éventuellement carrier (voir les opérateurs d’un pays dans Ports mobiles). Les forfaits par zone couvrent uniquement les pays de leur zone (422 sur options.country sinon).
  • Prolonger un port mobile : { "planId": "mob-us-7d", "options": { "portId": "mob_2v8k1q" } } ajoute la durée du forfait à expiresAt.

Solde insuffisant → 402 insufficient_balance, avec le montant manquant et une suggestion de recharge dans error.details (missing, suggestedTopUp). Aucun montant n’est débité en cas d’erreur. Pour payer la différence, lancez une recharge contenant la même requête dans purchase (POST /v1/topups) : le forfait est acheté dès que la recharge est créditée.

Authentification : clé API dans l’en-tête Authorization: Bearer API_KEY.

Paramètres

NomDansTypeObligatoireDescription
Idempotency-KeyheaderstringNonClé unique (par exemple un UUID) pour réessayer une requête POST en toute sécurité. Conservée 24 h. — 128 caractères max.

Corps de la requête

ChampTypeObligatoireDescription
planIdstringOui—
quantityintegerNon1–100, par défaut 1
optionsobjectNon—
Exemple: Résidentiel
{
  "planId": "res-10"
}
Exemple: Ports mobiles
{
  "planId": "mob-us-30d",
  "quantity": 1,
  "options": {
    "country": "US",
    "carrier": "verizon",
    "autoRenew": true
  }
}
Exemple: Prolonger un port
{
  "planId": "mob-us-7d",
  "options": {
    "portId": "mob_2v8k1q"
  }
}
Exemple: Trafic mobile
{
  "planId": "mgb-10"
}
Exemple: Port par zone
{
  "planId": "mob-us-30d",
  "options": {
    "country": "US",
    "carrier": "verizon"
  }
}

Réponse 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"
}

Exemples de code

curl
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"}'
Python
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
// 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());

Liste des commandes

GET/v1/orders

Authentification : clé API dans l’en-tête Authorization: Bearer API_KEY.

Paramètres

NomDansTypeObligatoireDescription
pagequeryintegerNon≥ 1, par défaut 1
perPagequeryintegerNon1–100, par défaut 20
statusquerycompleted · cancelledNonLes commandes sont créées comme déjà payées (déduites du solde). completed — payée et livrée (identifiants disponibles immédiatement).
productIdquerystringNonID du produit dans le catalogue. Valeurs pour LocalSERP Proxy : residential (GB), mobile (ports dédiés 4G/5G) et mobile-gb (trafic rotatif 4G/5G par GB). Les clients doivent accepter les valeurs inconnues.

Réponse 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
  }
}

Exemples de code

curl
curl -s "https://localserpproxy.com/api/v1/orders" \
  -H "Authorization: Bearer $API_KEY"
Python
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
// 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());

Récupérer une commande

GET/v1/orders/{orderId}

Authentification : clé API dans l’en-tête Authorization: Bearer API_KEY.

Paramètres

NomDansTypeObligatoireDescription
orderIdpathstringOui—

Réponse 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"
}

Exemples de code

curl
curl -s "https://localserpproxy.com/api/v1/orders/ord_4f8k2m9q" \
  -H "Authorization: Bearer $API_KEY"
Python
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
// 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());

1 GB 1,50 $US · sans KYC

Voir les tarifs