SubReply

Endpoints

Een reactie publiceren

Plaatst een reactie op Reddit vanaf een account uit het SubReply-bestand, achter een residentiële proxy.

POST/api/v1/publish50 credits

Deze route publiceert echt op Reddit

Er is geen sandboxmodus. Test eerst op r/testingground4bots, controleer de permalink die je terugkrijgt en koppel de route pas daarna aan je productieomgeving.

Parameters

Body van de aanvraag (application/json)

ParameterTypeVerplichtBeschrijving
post_urlstringVerplichtVolledige URL van de Reddit-post waaronder je wilt reageren. Moet beginnen met https://www.reddit.com/ of https://reddit.com/.
commentstringVerplichtTekst van de reactie, van 10 tot 2.000 tekens. Onder de 10 is het geen reactie — en een «ok» schaadt de geloofwaardigheid van het account dat hem plaatst.

Voorbeeld

cURL
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..."
  }'

202: niet opnieuw proberen

Een 202 betekent dat de aanvraag de deur uit is, maar dat de publicatie niet bevestigd is. Er wordt niets afgeschreven — en vooral: speel de aanroep niet opnieuw af, want de reactie staat er misschien al en dan plaats je een tweede. Controleer de post vóór elke nieuwe poging.

Hoe het werkt

1

Een account uit het bestand kiezen

SubReply kiest een actief Reddit-account met een geldige sessie, dat het minst is ingezet — zodat het API-verkeer nooit op één account rust.

Geen account beschikbaar om te plaatsen? De route antwoordt 503 en schrijft niets af.
2

Residentiële proxy

De sessie loopt achter een vast residentieel IP dat aan het account hangt. Eén account houdt zijn IP van post tot post, net als een echte gebruiker.

Een account dat van IP naar IP springt is de meest banale banreden.
3

Publiceren via een browser

Een echte Chrome opent de post en typt de reactie, met menselijke pauzes en een menselijk typeritme. Er komt geen officiële Reddit API aan te pas.

Dat maakt de aanroep traag (tot 2 min) — en dat maakt hem geloofwaardig.

Bescherming tegen shadowban

  • Aged accounts: echte accounts met historie en karma, geen accounts die op bestelling zijn aangemaakt.
  • Nagebootst menselijk gedrag: echte navigatie, wisselende pauzes, geleidelijk typen.
  • Accountrotatie: het minst ingezette account publiceert als eerste, zodat het bestand het volume opvangt in plaats van het te concentreren.

Facturatie

De 50 credits worden na bevestiging van de publicatie afgeschreven, nooit bij het versturen. Concreet:

  • 200 met een permalink → afgeschreven.
  • 202, 422, 503 → geen afschrijving.
  • Herhaling op dezelfde post_url credits_used: 0, de afschrijving is idempotent per post. Let op: dat beschermt tegen een dubbele afschrijving, niet tegen een dubbele reactie op Reddit.

Fouten die specifiek zijn voor deze route

CodeOorzaakWat te doen
503Publicatiedienst niet beschikbaar: geen account om mee te plaatsen, of de dienst antwoordt niet.Probeer het over 60 s opnieuw. Er is niets afgeschreven en als de reactie tóch verstuurd was, beschermt de idempotente afschrijving je tegen dubbel betalen.
422Functionele weigering: post vergrendeld, gearchiveerd of verwijderd, subreddit alleen-lezen, of Reddit-account tijdelijk niet beschikbaar.Niet ongewijzigd opnieuw proberen — verhelpen. De foutmelding bevat de exacte reden die de dienst teruggaf.

De volledige lijst staat op de pagina foutcodes.

Timeout aan de clientkant

Een aanroep kan tot twee minuten duren. Zet de timeout van je HTTP-client op minstens 180 seconden: een korte timeout aan de clientkant verbreekt de verbinding zonder de publicatie te annuleren, en dan verlies je de permalink van een reactie die er wél staat.

Node.js
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),
});