Conceptos Fundamentales de Autenticación
Utiliza api.redditapistack.com y transmite la clave en el encabezado Authorization con el esquema Bearer para las rutas autenticadas. En Python puedes configurar los encabezados de tu cliente HTTP; en Node.js, pásalos a fetch. Conserva la clave en el servidor y evita incluirla en URLs, repositorios o mensajes de diagnóstico públicos.
Una clave correcta no sustituye al saldo. El código 402 indica créditos insuficientes para la recuperación, no que falte alcanzar una recarga mínima ni que toda consulta exija un pago previo. La clave aparece al registrarte y puede utilizar créditos de prueba si se conceden. Para 401 revisa la credencial configurada.
El código 429 indica que se ha alcanzado un límite de frecuencia. Reduce las llamadas y limita los reintentos, en lugar de confundirlo con 402. En JavaScript, comprueba el estado HTTP antes de interpretar el cuerpo como una respuesta correcta; recibir una respuesta de error no equivale a un rechazo de la promesa de fetch.
Rutas de Búsqueda y Estructura de Datos
Utiliza /v1/search para búsquedas generales, /v1/posts para publicaciones y /v1/comments para comentarios. Las respuestas son registros planos, no árboles de conversación. Puedes agrupar localmente parent_id y link_id cuando aparezcan, sin garantía de jerarquía completa. No existen filtros expuestos de búsqueda por esos dos campos; /v1/subreddits permite explorar comunidades con prefix.
El parámetro min_score actúa estrictamente como un filtro y nunca como un control de ordenamiento. Las respuestas se entregan en el orden del índice del documento del archivo, que no es cronológico ni por relevancia. Asegúrate de procesar los resultados sabiendo que el orden de los registros no refleja la antigüedad.
Solo /v1/item exige id; /v1/posts y /v1/comments no lo necesitan. Los filtros de búsqueda son q, subreddit, author, kind, from, to, min_score, limit y page. kind acepta post o comment; las fechas son YYYY-MM-DD en UTC, con to inclusivo. limit admite 1–100 registros y page 1–100 páginas por consulta.
Limitaciones, Totales y Manejo de Errores
Una recuperación correcta cuesta un crédito, incluso vacía. Las peticiones inválidas no descuentan saldo; los fallos del proveedor de búsqueda devuelven la reserva. /v1/status es público y no se cobra: ofrece una declaración estática y una respuesta HTTP, sin probar el motor de búsqueda. En los totales, eq significa exacto, gte límite inferior y unknown total no fiable, posiblemente nulo.
Debes manejar los códigos HTTP literalmente como 400, 401, 402 y 429 en tu código. Un código 400 denota una solicitud inválida. No asumas que los datos no cambian entre solicitudes, ni que la recuperación de comentarios admite filtrado por ID padre en la API expuesta; el agrupamiento es local.
Mantén separados el resultado HTTP y la entrega al cliente. Una interrupción de conexión puede ocurrir después de una recuperación correcta cobrada en el servidor; un reintento correcto consume otro crédito. En Python y JavaScript registra el motivo del fallo y limita los intentos. Ningún total ni recorrido de páginas demuestra cobertura completa del archivo.
Rutas de la API
| Método | Ruta | Parámetros |
|---|---|---|
GET | /v1/search | q, subreddit, author, kind, from, to, min_score, limit, page |
GET | /v1/posts | q, subreddit, author, kind, from, to, min_score, limit, page |
GET | /v1/comments | q, subreddit, author, kind, from, to, min_score, limit, page |
GET | /v1/item | id |
GET | /v1/subreddits | prefix |
GET | /v1/status | — |
Parámetros de consulta
| Parámetro | Valor / tipo / intervalo |
|---|---|
q | text |
subreddit | keyword |
author | keyword |
kind | post | comment |
from | ISO date |
to | ISO date |
min_score | integer |
limit | 1–100 |
page | 1–100 |
id | item ID |
prefix | subreddit prefix |
curl -H "Authorization: Bearer YOUR_API_KEY" 'https://api.redditapistack.com/v1/search?q=research&limit=10'
import json, urllib.request
request = urllib.request.Request('https://api.redditapistack.com/v1/search?q=research&limit=10', headers={"Authorization": "Bearer YOUR_API_KEY"})
with urllib.request.urlopen(request) as response:
print(json.load(response))
fetch("https://api.redditapistack.com/v1/search?q=research&limit=10", {headers: {Authorization: "Bearer YOUR_API_KEY"}})
.then(response => response.json()).then(console.log);