SubReply

Endpoints

Publicar un comentario

Publica un comentario en Reddit desde una cuenta del parque de SubReply, detrás de un proxy residencial.

POST/api/v1/publish50 créditos

Esta ruta publica de verdad en Reddit

No hay modo de pruebas. Prueba primero en r/testingground4bots, comprueba el enlace permanente que devuelve y solo después conecta la ruta en producción.

Parámetros

Cuerpo de la petición (application/json)

ParámetroTipoObligatorioDescripción
post_urlstringObligatorioURL completa de la publicación de Reddit bajo la que comentar. Debe empezar por https://www.reddit.com/ o https://reddit.com/.
commentstringObligatorioTexto del comentario, de 10 a 2.000 caracteres. Por debajo de 10 no es un comentario — y un «ok» daña la credibilidad de la cuenta que lo publica.

Ejemplo

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: no reintentes

Un 202 significa que la petición ha salido pero que la publicación no está confirmada. No se descuenta nada — y sobre todo, no repitas la llamada: puede que el comentario ya esté publicado y pondrías un segundo. Comprueba la publicación antes de cualquier nuevo intento.

Cómo funciona

1

Selección de una cuenta del parque

SubReply elige una cuenta de Reddit activa, con sesión válida y la menos solicitada del parque — para que el tráfico de la API nunca recaiga sobre una sola cuenta.

¿Ninguna cuenta disponible para publicar? La ruta responde 503 y no descuenta nada.
2

Proxy residencial

La sesión sale detrás de una IP residencial fija, asociada a la cuenta. Una misma cuenta conserva su IP de una publicación a otra, como un usuario real.

Una cuenta que salta de IP en IP es el motivo de baneo más común.
3

Publicación mediante navegador

Un Chrome real abre la publicación y escribe el comentario, con pausas y un ritmo de escritura humanos. No se usa ninguna API oficial de Reddit.

Es lo que hace que la llamada sea lenta (hasta 2 min) — y lo que la hace creíble.

Protección frente al shadowban

  • Cuentas aged: cuentas reales con historial y karma, no cuentas creadas a demanda.
  • Comportamiento humano simulado: navegación real, pausas variables, escritura progresiva.
  • Rotación de cuentas: publica primero la menos solicitada, y el parque absorbe el volumen en vez de concentrarlo.

Facturación

Los 50 créditos se descuentan tras la confirmación de la publicación, nunca al enviar. En concreto:

  • 200 con enlace permanente → se cobra.
  • 202, 422, 503 → ningún cargo.
  • Repetición sobre la misma post_url credits_used: 0, el cargo es idempotente por publicación. Ojo: eso protege de un doble cargo, no de un doble comentario en Reddit.

Errores propios de esta ruta

CódigoCausaQué hacer
503Servicio de publicación no disponible: ninguna cuenta con la que publicar, o el servicio no responde.Reintentar en 60 s. No se ha cobrado nada y, si el comentario sí había salido, el cargo idempotente protege del doble pago.
422Rechazo funcional: publicación bloqueada, archivada o eliminada, subreddit en solo lectura, o cuenta de Reddit temporalmente no disponible.No reintentar igual — corregir. El mensaje de error recoge el motivo exacto que devolvió el servicio.

La lista completa está en la página códigos de error.

Timeout del lado del cliente

Una llamada puede tardar hasta dos minutos. Ajusta el timeout de tu cliente HTTP a 180 segundos como mínimo: un timeout corto en el cliente corta la conexión sin anular la publicación, y pierdes el enlace permanente de un comentario que sí está publicado.

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