Orpheus Docs Obtenir une clé d'API

Documentation de l'API

Envoyez une URL et votre proxy. Orpheus détecte le challenge anti-bot, le franchit et vous rend la page — avec une session réutilisable pour les requêtes suivantes.

URL de base https://orpheus-api.lapetiteagora.fr

Démarrage rapide

  1. Connectez-vous à la console et créez une clé d'API dans l'onglet Clés d'API. Copiez-la : elle n'est affichée qu'une seule fois.
  2. Prévoyez un proxy résidentiel ou ISP sticky (une même IP de sortie conservée au moins 10 minutes).
  3. Appelez POST /v1/fetch avec l'URL et le proxy.
curl -X POST https://orpheus-api.lapetiteagora.fr/v1/fetch \
  -H "Authorization: Bearer $LPA_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.example.com/",
    "proxy": "http://user:pass@proxy.example:8080"
  }'

Réglez le timeout de votre client à 70 secondes environ : franchir un challenge peut prendre quelques secondes, parfois plus.

Authentification

Chaque requête porte votre clé d'API dans le header Authorization :

HTTP
Authorization: Bearer lpa_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Les clés se créent et se révoquent dans la console. Traitez-les comme des mots de passe : gardez-les côté serveur, jamais dans un navigateur ni dans un dépôt public. Une clé révoquée, ou un compte suspendu, reçoit immédiatement 401 invalid_key.

Récupérer une page

POST/v1/fetch

Corps de la requête (JSON)

ChampTypeDescription
urlobligatoirestringLa page à récupérer, en http ou https.
proxystringObligatoire pour démarrer une session. http://user:pass@host:port, https://… ou socks5://…. Omettez-le (ou renvoyez la même valeur) quand vous passez un session_id.
session_idstringRéutilise une session renvoyée par un appel précédent. Voir Sessions.
methodstringGET (par défaut), POST, PUT, PATCH, DELETE, HEAD ou OPTIONS.
headersobjectHeaders supplémentaires, sous forme de chaînes {"Name": "value"}. Les headers du navigateur (User-Agent, client hints…) sont déjà en place.
bodystringCorps de la requête pour POST/PUT/PATCH.
body_encodingstringtext (par défaut) ou base64 pour un corps binaire.
cookiesobject · arrayCookies à ajouter à la session avant la requête. Voir Cookies.
presetstringEmpreinte de navigateur, fixée à la création de la session. Par défaut chrome-latest-windows (gardez-la sauf raison précise).

Réponse

L'API répond 200 dès que le site cible a répondu — quel que soit le statut renvoyé par le site. Lisez ce statut dans status.

200 OK
{
  "status": 200,
  "headers": { "content-type": ["text/html; charset=utf-8"] },
  "body": "<!doctype html>…",
  "encoding": "text",
  "url": "https://www.example.com/",
  "session_id": "s_Ij4oudr1bYPzUA8U3sdlACAf",
  "solved": ["datadome"],
  "cookies": [{ "name": "datadome", "value": "…", "domain": ".example.com", "path": "/" }],
  "elapsed_ms": 2343
}
ChampDescription
statusStatut HTTP renvoyé par le site cible.
headersHeaders de la réponse ; chaque valeur est une liste de chaînes.
body · encodingLa page. encoding vaut text (UTF-8) ou base64 pour un contenu binaire (images, PDF…).
urlURL finale, après redirections.
session_idRenvoyez-le pour garder la même identité. Également renvoyé avec la plupart des erreurs.
solvedProtections franchies pendant cet appel : akamai, datadome, incapsula, kasada, cloudflare, ticketmaster. Vide quand il n'y avait rien à franchir.
cookiesTous les cookies de la session après l'appel.
elapsed_msTemps passé de notre côté, franchissement compris.

Sessions

Les cookies anti-bot sont liés à l'identité de navigateur qui les a obtenus : IP, empreinte, jar de cookies. Une session conserve cette identité pour vous : un challenge franchi une fois le reste.

  • Le premier appel (avec un proxy, sans session_id) crée une session et renvoie son session_id.
  • Renvoyez ce session_id aux appels suivants : même proxy, même empreinte, mêmes cookies. Les pages suivantes reviennent généralement en quelques centaines de millisecondes, avec solved: [].
  • Une session expire après 30 minutes sans requête. Chaque requête la prolonge.
  • Une session garde son proxy jusqu'au bout. Envoyer un autre proxy avec un session_id renvoie 409 proxy_mismatch : démarrez plutôt une nouvelle session.
  • Une requête à la fois par session. Une deuxième requête simultanée attend jusqu'à 10 secondes, puis reçoit 409 session_busy. Pour aller plus vite, lancez plusieurs sessions en parallèle, chacune avec son propre proxy.
import os, requests

API = "https://orpheus-api.lapetiteagora.fr/v1/fetch"
HEADERS = {"Authorization": f"Bearer {os.environ['LPA_KEY']}"}

def fetch(**payload):
    r = requests.post(API, headers=HEADERS, json=payload, timeout=70)
    data = r.json()
    if r.status_code != 200:
        raise RuntimeError(data["error"])
    return data

# 1. D'abord la page d'accueil : crée la session et franchit le challenge
home = fetch(url="https://www.shop.example/", proxy="http://user:pass@proxy.example:8080")

# 2. Puis la page produit, avec la même identité
product = fetch(
    url="https://www.shop.example/product/42",
    session_id=home["session_id"],
    headers={"Referer": "https://www.shop.example/"},
)
print(product["status"], product["solved"])

Cookies

Démarrez une session avec des cookies que vous avez déjà (une connexion, un panier, un choix de consentement), ou ajoutez-en plus tard. Ils sont stockés dans la session et envoyés à chaque requête suivante, jusqu'à ce que le site les remplace.

Forme simple

Un objet {"name": "value"}. Les cookies sont posés sur l'hôte de l'url.

JSON
{
  "url": "https://www.shop.example/cart",
  "proxy": "http://user:pass@proxy.example:8080",
  "cookies": { "cart_id": "42", "lang": "fr" }
}

Forme détaillée

Une liste d'objets, pour choisir le domain (par ex. .shop.example pour tous les sous-domaines) ou le path (par défaut /).

JSON
{
  "url": "https://www.shop.example/",
  "session_id": "s_…",
  "cookies": [
    { "name": "auth", "value": "eyJ…", "domain": ".shop.example", "path": "/" }
  ]
}
  • Jusqu'à 50 cookies par requête, 4 096 caractères par valeur, sans ; ni retour à la ligne dans les valeurs.
  • Un cookie de même nom, domaine et chemin remplace le précédent.
  • Chaque réponse renvoie les cookies de la session dans cookies, pour que vous puissiez les réutiliser ailleurs.
  • Les valeurs des cookies ne sont jamais écrites dans votre journal des requêtes.
!

Les cookies anti-bot sont liés à une identité. Un cookie datadome ou cf_clearance obtenu depuis une autre IP ou un autre navigateur sera généralement refusé. Laissez plutôt Orpheus les obtenir dans la session.

Erreurs

Les erreurs ont un statut différent de 200 et toutes la même forme. Quand une session existe, son session_id est inclus.

422
{
  "error": { "code": "proxy_blocked", "message": "…" },
  "session_id": "s_…"
}
StatutCodeQue faire
400invalid_requestCorrigez la requête : url manquante, proxy manquant pour une nouvelle session, champ invalide, adresse privée ou injoignable.
401invalid_keyClé absente, erronée ou révoquée, ou compte suspendu.
402quota_exceededQuota mensuel atteint. Il est remis à zéro le 1er du mois (UTC).
404session_not_foundLa session a expiré (30 min d'inactivité) ou a été fermée. Démarrez-en une nouvelle.
409proxy_mismatchUne session garde son proxy. Démarrez une nouvelle session pour un autre proxy.
409session_busyUne autre requête utilise cette session. Patientez, ou utilisez une autre session.
413response_too_largeLa page dépasse 5 Mo.
422proxy_blockedLe site a bloqué cette IP. Changez de proxy et démarrez une nouvelle session.
429too_many_concurrentTrop de requêtes en cours pour votre compte. Réessayez dès que l'une d'elles se termine.
502challenge_failedLe challenge n'a pas pu être franchi. Réessayez une fois ; si ça persiste, changez de proxy.
502solver_error · transport_errorProblème temporaire du solveur ou du réseau (souvent le proxy). Réessayez après un court délai.
504timeoutPas de réponse à temps. Réessayez ; la session reste utilisable.
500internal_errorProblème de notre côté. Réessayez, et prévenez-nous si ça persiste.
✓

Règle simple pour réessayer : réessayez les 429, 502, 504 et 500 avec un court backoff. Ne réessayez jamais un 422 sur la même session : changez de proxy.

Limites

LimiteValeur
Requêtes par mois (bêta)20 000 par compte, remises à zéro le 1er du mois (UTC). Tout appel à /v1/fetch qui atteint le site compte, même si le franchissement échoue ensuite ; les appels refusés d'emblée (400, 401, 402, 404, 409, 429) ne comptent pas.
Requêtes simultanées5 par compte par défaut (voir votre onglet Compte).
Durée par requêteEnviron 55 secondes, franchissement compris.
Taille de la réponse5 Mo de contenu de page.
Durée de vie d'une session30 minutes après la dernière requête.
Cookies50 par requête, 4 096 caractères par valeur.

Consommation, challenges franchis et dernières requêtes sont dans la console.

Autres endpoints

GET/v1/usage

Requêtes consommées ce mois-ci, votre quota et le détail jour par jour des 30 derniers jours (requêtes, succès, erreurs, octets, franchissements par protection).

curl
curl -s https://orpheus-api.lapetiteagora.fr/v1/usage -H "Authorization: Bearer $LPA_KEY"
DELETE/v1/sessions/{session_id}

Ferme une session immédiatement (sinon elle expire d'elle-même). Renvoie {"deleted": true}, ou 404 si elle n'existe plus.

curl
curl -s -X DELETE https://orpheus-api.lapetiteagora.fr/v1/sessions/s_… -H "Authorization: Bearer $LPA_KEY"

Bonnes pratiques

  • Uniquement des proxies sticky. Un proxy rotatif change d'IP entre deux requêtes et invalide les cookies que vous venez d'obtenir. Visez des sessions de 10 minutes ou plus.
  • Une session par identité. Réutilisez-la pour toutes les pages d'un même parcours ; ouvrez plus de sessions (avec plus de proxies) pour monter en charge.
  • Naviguez naturellement. Chargez d'abord la page d'accueil ou de catégorie, puis la page produit avec un header Referer. Les accès directs à des pages profondes sont plus souvent signalés.
  • Ne martelez pas une session. Franchissez le challenge avec une requête, puis continuez ; évitez les rafales depuis la même IP.
  • Sur proxy_blocked, abandonnez la session et son proxy pendant un moment ; une IP grillée reste grillée.
  • Respectez les sites que vous consultez. Il vous revient de respecter leurs conditions d'utilisation et les lois qui s'appliquent à vous.