Endpoints
Publier un commentaire
Poste un commentaire sur Reddit depuis un compte du parc SubReply, derrière un proxy résidentiel.
/api/v1/publish50 créditsCette route publie réellement sur Reddit
r/testingground4bots, vérifiez le permalien retourné, puis seulement branchez la route en production.Paramètres
Corps de la requête (application/json)
| Paramètre | Type | Requis | Description |
|---|---|---|---|
post_url | string | Requis | URL complète du post Reddit sous lequel commenter. Doit commencer par https://www.reddit.com/ ou https://reddit.com/. |
comment | string | Requis | Texte du commentaire, de 10 à 2 000 caractères. En dessous de 10, ce n'est pas un commentaire — et un « ok » abîme la crédibilité du compte qui le poste. |
Exemple
curl -s -X POST https://subreply.io/api/v1/publish \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sr_live_VOTRE_CLE_API" \
-d '{
"post_url": "https://www.reddit.com/r/startupfrance/comments/1abc23/...",
"comment": "J'\''ai monté mon cabinet il y a deux ans avec exactement le même problème..."
}'{
"status": "posted",
"reddit_comment_url": "https://www.reddit.com/r/startupfrance/comments/1abc23/_/xyz789",
"account_used": "subreply_community",
"credits_used": 50,
"credits_remaining": 450
}{
"status": "queued",
"reddit_comment_url": null,
"account_used": "subreply_community",
"credits_used": 0,
"credits_remaining": 500
}202 : ne retentez pas
202signifie que la demande est partie mais que la publication n'est pas confirmée. Rien n'est débité — et surtout, ne rejouez pas l'appel : le commentaire est peut-être déjà en ligne, vous en posteriez un second. Vérifiez le post avant toute nouvelle tentative.Comment ça fonctionne
Sélection d'un compte du parc
SubReply choisit un compte Reddit actif, à session valide, et le moins sollicité du parc — pour que le trafic d'API ne repose jamais sur un seul compte.
503 et ne débite rien.Proxy résidentiel
La session part derrière une IP résidentielle collante, associée au compte. Un même compte garde son IP d'un post à l'autre, comme un vrai utilisateur.
Publication par navigateur
Un vrai Chrome ouvre le post et écrit le commentaire, avec des délais et un rythme de frappe humains. Aucune API Reddit officielle n'est utilisée.
Étape 1
Sélection d'un compte du parc
503 et ne débite rien.Anti-shadowban
- Comptes aged: de vrais comptes avec de l'historique et du karma, pas des comptes créés à la demande.
- Comportement humain simulé : navigation réelle, délais variables, frappe progressive.
- Rotation des comptes : le moins sollicité publie en premier, et le parc absorbe le volume au lieu de le concentrer.
Facturation
Les 50 crédits sont débités après confirmationde la publication, jamais à l'envoi. Concrètement :
200avec un permalien → débité.202,422,503→ aucun débit.- Rejeu sur la même
post_url→credits_used: 0, le débit est idempotent par post. Attention : cela protège d'un double débit, pas d'un double commentaire sur Reddit.
Erreurs spécifiques à cette route
| Code | Cause | Que faire |
|---|---|---|
503 | Service de publication indisponible : aucun compte publiable, ou le service ne répond pas. | Réessayer dans 60 s. Rien n'a été débité et, si le commentaire était parti, le débit idempotent protège du double paiement. |
422 | Refus fonctionnel : post verrouillé, archivé, supprimé, subreddit en lecture seule, ou compte Reddit momentanément indisponible. | Ne pas retenter à l'identique — corriger. Le message d'erreur reprend le motif exact renvoyé par le service. |
La liste complète est sur la page codes d'erreur.
Timeout côté client
Un appel peut prendre jusqu'à deux minutes. Réglez le timeout de votre client HTTP à 180 secondes au moins : un timeout court côté client coupe la connexion sans annuler la publication, et vous perdez le permalien d'un commentaire pourtant en ligne.
const response = await fetch("https://subreply.io/api/v1/publish", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.SUBREPLY_API_KEY}`,
},
body: JSON.stringify({ post_url: postUrl, comment }),
// 3 minutes : la publication passe par un vrai navigateur.
signal: AbortSignal.timeout(180_000),
});