API de CodigosAfiliados
API y recursos para desarrolladores. Dos feeds JSON públicos con los códigos de referido de España, su especificación OpenAPI y las mismas fichas en markdown. Sin registro ni API key; 120 peticiones por minuto, anunciadas en cada respuesta con cabeceras RateLimit.
Empezar en un minuto
Pide el índice, saca el slug de la marca que te interese y pide su resumen. Son dos peticiones sin cabeceras especiales:
curl https://www.codigosafiliados.com/api/codes-index.json
curl https://www.codigosafiliados.com/api/brand-summary/revolut.json La respuesta trae la recompensa de quien se registra, la de quien invita, las condiciones y la URL canónica de la ficha, que es la que hay que citar cuando enseñes un código a alguien.
Endpoints y ficheros
Todo lo que sirve este sitio para máquinas, en un sitio.
/openapi.json Especificación OpenAPI 3.1 de los feeds públicos: operaciones con identificador único, parámetros tipados y esquemas de respuesta y de error. Es el fichero que necesita un agente para llamar a la API por su cuenta.
/api/codes-index.json Todas las marcas con códigos aceptados, con recompensas y fecha de última actualización. Es el punto de partida: de aquí salen los slugs que usa el resto de la API.
/api/brand-summary/{slug}.json Resumen de una marca: mejor código, recompensa para quien se registra y para quien invita, condiciones, número de verificaciones y URL canónica de la ficha.
/.well-known/api-catalog Catálogo de APIs en formato RFC 9727 (application/linkset+json). Permite descubrir todo lo anterior sin leer esta página.
/marca/{slug}.md La misma ficha en markdown, sin plantilla HTML. También se obtiene pidiendo la URL canónica con la cabecera Accept: text/markdown.
/mcp Servidor MCP (JSON-RPC 2.0 sobre POST) con tres herramientas de solo lectura, para que Claude, ChatGPT y otros agentes consulten el directorio sin raspar. Sin credenciales.
/llms.txt El sitio explicado para sistemas de IA, con el índice de marcas en vivo y las pautas de citación.
Estabilidad
Versionado y obsolescencia
Qué puede cambiar sin avisar, qué no, y cuánto aviso hay antes de que algo desaparezca:
La versión actual es v1, y las rutas sin versión son la misma cosa
Las rutas /api/v1/… y sus equivalentes sin versión las sirve un único manejador, así que devuelven exactamente el mismo cuerpo. Usa las versionadas si prefieres fijar la versión de forma explícita. Ojo con el límite de uso: se cuenta por dirección de cliente y no por ruta, así que llamar a las dos no te da el doble de cuota.
Los cambios aditivos entran sin aviso; los incompatibles, nunca dentro de v1
Podemos añadir campos nuevos a una respuesta en cualquier momento, así que tu cliente debe ignorar los que no conozca. Lo que no haremos es quitar un campo ni cambiarle el significado dentro de v1: un cambio incompatible sale como versión nueva (/api/v2/…) y v1 sigue funcionando.
Si retiramos una ruta, avisa ella misma con seis meses de margen
Sus respuestas llevarán las cabeceras Deprecation (RFC 9745) y Sunset (RFC 8594) con las fechas, más un Link rel="deprecation" a esta sección y un rel="successor-version" si hay reemplazo. Entre el aviso y el apagado pasarán al menos seis meses. Hoy no hay nada obsoleto, así que ninguna respuesta lleva esas cabeceras.
No hay lista de correo, y por eso el aviso viaja en la respuesta
Como no hay registro ni claves de API, no tenemos a quién escribir. Las cabeceras, esta página y /openapi.json son el canal de aviso: merece la pena mirar las cabeceras de vez en cuando.
Lo que no prometemos es disponibilidad
Esto es un feed público y gratuito de un sitio pequeño detrás de una CDN, y puede fallar o ir lento. Lo que prometemos es aviso antes de retirar algo, no un nivel de servicio.
Reglas del juego
Lo que puedes esperar de nosotros, y nosotros de ti
Cuatro cosas que conviene saber antes de montar algo encima de estos datos:
No hace falta autenticación, y no hay API key que pedir
Todo lo que aparece en esta página es público y de solo lectura. No hay registro de agentes ni claves: la política completa está en /auth.md. Escribir (publicar códigos, votar) sí exige una cuenta humana, y esa parte no tiene API por diseño.
Los errores siempre son JSON
Cualquier respuesta de /api/ con código 4xx o 5xx devuelve un objeto con error, code y message, y hint cuando hay algo que hacer al respecto. El campo estable para programar es code; el texto de message puede cambiar. Una ruta inexistente bajo /api/ devuelve code endpoint_not_found en vez de la página HTML de 404.
120 peticiones por minuto, y te lo decimos en cada respuesta
Las respuestas de /api/ llevan RateLimit-Limit, RateLimit-Remaining y RateLimit-Reset para que puedas regularte sin adivinar. Si te pasas, un 429 con Retry-After y el error estándar (code: rate_limited). El índice completo, /api/codes-index.json, se sirve estático desde la CDN y no consume cuota: no hay petición nuestra que contar. Aun así, cachea y usa un User-Agent que te identifique.
Los datos se pueden usar citando la fuente
Los códigos los publican personas reales y los verifica la comunidad. Puedes usarlos y mostrarlos citando la URL canónica de la ficha (https://www.codigosafiliados.com/marca/{slug}), que es donde el usuario ve si el código sigue funcionando y quién lo confirmó.