APIs de WordPress.org
WordPress.org proporciona múltiples APIs que el núcleo de WordPress consulta para diversas funcionalidades. Todas estas APIs están alojadas en api.wordpress.org y soportan tanto HTTP como HTTPS (con preferencia por HTTPS cuando está disponible).
Core Version Check API
Endpoint
https://api.wordpress.org/core/version-check/1.7/
Archivo Fuente
wp-includes/update.php – Función wp_version_check() (línea 226)
Método
POST
Frecuencia
- Automática: Cada 12 horas vía WP-Cron
- Manual: Al visitar Dashboard > Actualizaciones
Parámetros Query String (GET)
- version // Versión de WordPress (ej: '6.9')
- php // Versión de PHP (ej: '8.3.0')
- locale // Idioma del sitio (ej: 'es_ES')
- mysql // Versión de MySQL/MariaDB
- local_package // Paquete local si existe
- blogs // Número de sitios (multisite)
- users // Número de usuarios
- multisite_enabled // 0 o 1
- initial_db_version // Versión DB inicial
- myisam_tables // Array de tablas MyISAM
- extensions // Array de extensiones PHP y versiones
- platform_flags // OS y arquitectura (32/64 bits)
- image_support // Soporte GD/Imagick para WebP, AVIF, HEIC, JXL
- channel // 'beta', 'rc', 'development' (si está configurado)
Cuerpo POST (Body)
- translations // JSON con traducciones instaladas
- [extra_stats] // Estadísticas adicionales opcionales
Headers Enviados
User-Agent: WordPress/6.9; https://example.com/
wp_install: https://example.com/
wp_blog: https://example.com/
Respuesta
JSON con información de actualizaciones disponibles:
{
"offers": [
{
"response": "upgrade|development",
"download": "https://downloads.wordpress.org/release/...",
"packages": {
"full": "URL",
"no_content": "URL",
"new_bundled": "URL",
"partial": "URL",
"rollback": "URL"
},
"current": "6.9",
"version": "6.9.1",
"php_version": "7.2.24",
"mysql_version": "5.5.5",
"locale": "es_ES"
}
],
"translations": []
}
Implicaciones de Privacidad
- Alta exposición técnica: Revela toda la configuración del servidor
- Extensiones PHP: Lista completa expone posibles vulnerabilidades
- Tablas MyISAM: Información sobre estructura de base de datos
- URL del sitio: Enviada en headers y User-Agent
Plugin Update Check API
Endpoint
https://api.wordpress.org/plugins/update-check/1.1/
Archivo Fuente
wp-includes/update.php – Función wp_update_plugins() (línea 464)
Método
POST
Frecuencia
- Automática: Cada 12 horas vía WP-Cron
- Manual: Al visitar Plugins > Plugins instalados
Cuerpo POST (Body)
- plugins // JSON con todos los plugins (slug, version, metadata)
- translations // JSON con traducciones instaladas
- locale // JSON con locales activos
- all // JSON: true (solicitar todos los plugins)
- update_stats // JSON con estadísticas adicionales (opcional)
Headers Enviados
User-Agent: WordPress/6.9; https://example.com/
Ejemplo de Datos Enviados
{
"akismet/akismet.php": {
"Name": "Akismet Anti-spam",
"PluginURI": "https://akismet.com/",
"Version": "5.3",
"Description": "...",
"Author": "Automattic",
"AuthorURI": "https://automattic.com/",
"TextDomain": "akismet",
"DomainPath": "",
"Network": false,
"RequiresWP": "5.8",
"RequiresPHP": "5.6.20",
"UpdateURI": "",
"Title": "Akismet Anti-spam",
"AuthorName": "Automattic"
}
}
Respuesta
JSON con actualizaciones, traducciones y plugins sin actualización:
{
"plugins": {
"plugin-slug/plugin.php": {
"id": "...",
"slug": "plugin-slug",
"plugin": "plugin-slug/plugin.php",
"new_version": "2.0",
"url": "https://wordpress.org/plugins/plugin-slug/",
"package": "https://downloads.wordpress.org/plugin/...",
"icons": {},
"banners": {},
"tested": "6.9",
"requires_php": "7.4"
}
},
"translations": [],
"no_update": {}
}
Implicaciones de Privacidad
- Inventario completo de plugins: Revela toda la pila de software
- Identificación de vulnerabilidades: Los plugins desactualizados son objetivos conocidos
- Huella digital única: Combinación de plugins puede identificar el sitio
- Metadata sensible: Versiones exactas facilitan exploits dirigidos
Soporte para Update URI
Los plugins pueden especificar un Update URI personalizado en sus headers, permitiendo actualizaciones desde repositorios propios en lugar de WordPress.org. Se aplica el filtro update_plugins_{$hostname}.
Theme Update Check API
Endpoint
https://api.wordpress.org/themes/update-check/1.1/
Archivo Fuente
wp-includes/update.php – Función wp_update_themes() (línea 750)
Método
POST
Frecuencia
- Automática: Cada 12 horas vía WP-Cron
- Manual: Al visitar Apariencia > Temas
Cuerpo POST (Body)
- themes // JSON con todos los temas (slug, version, metadata)
- translations // JSON con traducciones instaladas
- locale // JSON con locales activos
- update_stats // JSON con estadísticas adicionales (opcional)
Headers Enviados
User-Agent: WordPress/6.9; https://example.com/
Ejemplo de Datos Enviados
{
"twentytwentyfive": {
"Name": "Twenty Twenty-Five",
"ThemeURI": "https://wordpress.org/themes/twentytwentyfive/",
"Description": "...",
"Author": "the WordPress team",
"AuthorURI": "https://wordpress.org/",
"Version": "1.0",
"Template": "",
"Status": "publish",
"Tags": "...",
"TextDomain": "twentytwentyfive",
"DomainPath": "",
"RequiresWP": "6.7",
"RequiresPHP": "7.2.24",
"UpdateURI": "",
"Title": "Twenty Twenty-Five",
"AuthorName": "the WordPress team"
}
}
Respuesta
Similar a plugins: themes, translations, no_update
Implicaciones de Privacidad
- Identificación del tema activo: Puede revelar propósito del sitio
- Temas inactivos: Expone temas no utilizados (posibles vulnerabilidades)
- Tema hijo: Revela si se usa personalización
Soporte para Update URI
Al igual que los plugins, los temas pueden usar Update URI personalizado. Filtro: update_themes_{$hostname}.
Core Checksums API
Endpoint
https://api.wordpress.org/core/checksums/1.0/
Archivo Fuente
wp-admin/includes/update.php – Función get_core_checksums() (línea 132)
Método
GET
Parámetros Query String
- version // Versión de WordPress (ej: '6.9')
- locale // Idioma (ej: 'es_ES')
Uso
Verificar integridad de archivos del núcleo de WordPress detectando modificaciones no autorizadas.
Respuesta
{
"checksums": {
"wp-admin/index.php": "abc123...",
"wp-includes/version.php": "def456...",
...
}
}
Implicaciones de Privacidad
- Mínimas: Solo envía versión e idioma
- No expone datos sensibles
Community Events API
Endpoint
https://api.wordpress.org/events/1.0/
Archivo Fuente
wp-admin/includes/class-wp-community-events.php – Función get_events() (línea 101)
Método
GET
Frecuencia
- Manual: Al visitar el Dashboard (widget “Eventos de WordPress”)
- Bajo demanda: Al buscar eventos por ubicación
Parámetros Query String
- locale // Idioma del usuario
- timezone // Zona horaria del usuario
- ip // IP anonimizada del usuario (últimos octetos a 0)
- lat // Latitud (si se proporciona ubicación)
- lon // Longitud (si se proporciona ubicación)
- location_search // Búsqueda de ciudad (opcional)
Headers Enviados
User-Agent: WordPress/6.9; https://example.com/
Respuesta
{
"location": {
"description": "Madrid, Spain",
"latitude": "40.4168",
"longitude": "-3.7038",
"country": "ES"
},
"events": [
{
"type": "meetup",
"title": "WordPress Madrid Meetup",
"url": "https://...",
"meetup": "...",
"meetup_url": "...",
"date": "2026-02-15 19:00:00",
"end_date": "2026-02-15 21:00:00",
"location": {
"location": "Madrid",
"country": "ES",
"latitude": 40.4168,
"longitude": -3.7038
}
}
],
"ttl": 3600
}
Implicaciones de Privacidad
- IP anonimizada: Los últimos octetos se reemplazan con 0
- Geolocalización opcional: El usuario puede proporcionar ubicación manualmente
- Proxy del servidor: La petición la hace el servidor, no el navegador del usuario
- Caché compartida: Los resultados se almacenan en caché para todos los usuarios del sitio
Privacidad por diseño: WordPress implementa medidas para minimizar la exposición de datos del usuario.
Translations API
Endpoint
https://api.wordpress.org/translations/{type}/1.0/
Donde {type} puede ser: core, plugins, themes
Archivo Fuente
wp-admin/includes/translation-install.php – Función translations_api() (línea 53)
Método
POST
Parámetros POST Body
- wp_version // Versión de WordPress
- locale // Idioma solicitado
- version // Versión del core/plugin/theme
- slug // Slug del plugin/theme (no aplica para core)
Respuesta
{
"translations": [
{
"language": "es_ES",
"version": "6.9",
"updated": "2026-01-15 10:30:00",
"english_name": "Spanish (Spain)",
"native_name": "Español",
"package": "https://downloads.wordpress.org/translation/core/6.9/es_ES.zip",
"iso": ["es"],
"strings": {
"continue": "Continuar"
}
}
]
}
Implicaciones de Privacidad
- Mínimas: Solo versión, idioma y slug
- No datos personales
Plugin Information API
Endpoint
https://api.wordpress.org/plugins/info/1.2/
Archivo Fuente
wp-admin/includes/plugin-install.php – Función plugins_api() (línea 149)
Método
GET
Acciones Soportadas
query_plugins– Buscar pluginsplugin_information– Información de un plugin específicohot_tags– Tags populares
Parámetros Query String
- action // query_plugins | plugin_information | hot_tags
- request // Objeto serializado con criterios de búsqueda
Ejemplo de Request (query_plugins)
{
"page": 1,
"per_page": 24,
"search": "contact form",
"tag": "",
"author": "",
"locale": "es_ES",
"wp_version": "6.9",
"browse": "popular" // popular | featured | recommended
}
Headers Enviados
User-Agent: WordPress/6.9; https://example.com/
Respuesta (plugin_information)
{
"name": "Contact Form 7",
"slug": "contact-form-7",
"version": "5.9",
"author": "<a href='...'>Takayuki Miyoshi</a>",
"author_profile": "https://profiles.wordpress.org/takayukister/",
"requires": "6.3",
"tested": "6.9",
"requires_php": "7.4",
"rating": 92,
"ratings": {
"5": 1200,
"4": 100,
"3": 50,
"2": 20,
"1": 30
},
"num_ratings": 1400,
"support_threads": 500,
"support_threads_resolved": 450,
"active_installs": 5000000,
"downloaded": 200000000,
"last_updated": "2026-01-10 08:00:00",
"added": "2007-08-07",
"homepage": "https://contactform7.com/",
"sections": {
"description": "...",
"installation": "...",
"faq": "...",
"screenshots": "...",
"changelog": "...",
"reviews": "..."
},
"download_link": "https://downloads.wordpress.org/plugin/contact-form-7.5.9.zip",
"screenshots": [],
"tags": {},
"versions": {},
"donate_link": "",
"banners": {},
"icons": {}
}
Implicaciones de Privacidad
- Búsquedas del usuario: Revela intenciones/necesidades del administrador
- URL del sitio: Enviada en User-Agent
- Versión de WordPress: Puede exponer vulnerabilidades conocidas
Theme Information API
Endpoint
https://api.wordpress.org/themes/info/1.2/
Archivo Fuente
wp-admin/includes/theme.php – Función themes_api() (línea 545)
Método
GET
Funcionamiento
Idéntico a Plugin Information API pero para temas.
Acciones
query_themestheme_informationfeature_list
Browse Happy API
Endpoint
https://api.wordpress.org/core/browse-happy/1.1/
Archivo Fuente
wp-admin/includes/dashboard.php – Función wp_check_browser_version() (línea 1818)
Método
POST
Frecuencia
- Manual: Al visitar el Dashboard
- Condicional: Solo si no está en caché
Parámetros POST Body
- useragent // User-Agent completo del navegador del administrador
Headers Enviados
User-Agent: WordPress/6.9; https://example.com/
Respuesta
{
"platform": "Windows",
"name": "Chrome",
"version": "95.0",
"current_version": "120.0",
"upgrade": true,
"insecure": false,
"update_url": "https://www.google.com/chrome/",
"img_src": "https://...",
"img_src_ssl": "https://..."
}
Implicaciones de Privacidad
- User-Agent completo: Puede usarse para fingerprinting
- Identifica al administrador: Versión y tipo de navegador
- IP del servidor: Aunque la petición la hace el servidor
Nota: El widget también enlaza a https://browsehappy.com/ para más información.
Block Pattern Directory API
Endpoint
https://api.wordpress.org/patterns/1.0/
Archivo Fuente
wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php – Función get_items() (línea 117)
Método
GET
Parámetros Query String
- search // Término de búsqueda
- slug // Slug específico
- locale // Idioma
- wp-version // Versión de WordPress
- pattern-categories // Categorías
- pattern-keywords // Palabras clave
- page // Paginación
- per_page // Resultados por página
Respuesta
Array de patrones con contenido HTML y metadata.
Implicaciones de Privacidad
- Proxy de servidor: WordPress actúa como proxy para no exponer IP del usuario final
- Caché compartida: Resultados cacheados para todos los usuarios del sitio
- Búsquedas: Revelan intenciones de diseño
Resumen de Datos Enviados a WordPress.org
| API | Versión WP | PHP | MySQL | Plugins | Temas | URL Sitio | IP | User-Agent |
|---|---|---|---|---|---|---|---|---|
| Core Update | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✗ | ✗ |
| Plugin Update | ✓ | ✗ | ✗ | ✓ | ✗ | ✓ | ✗ | ✗ |
| Theme Update | ✓ | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ |
| Checksums | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Events | ✓ | ✗ | ✗ | ✗ | ✗ | ✓ | ✓* | ✗ |
| Translations | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Plugin Info | ✓ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ |
| Theme Info | ✓ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ |
| Browse Happy | ✓ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✓ |
| Patterns | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
* IP anonimizada
Configuración de Timeout
| API | Timeout Normal | Timeout WP-Cron |
|---|---|---|
| Core Update | 3 segundos | 30 segundos |
| Plugin Update | 3 + 1s/10 plugins | 30 segundos |
| Theme Update | 3 + 1s/10 temas | 30 segundos |
| Translations | 3 segundos | N/A |
| Plugin Info | 15 segundos | N/A |
| Community Events | Depende del contexto | N/A |
Conclusión
Las APIs de WordPress.org son esenciales para el funcionamiento y seguridad del ecosistema WordPress, pero transmiten información técnica significativa sobre el servidor y su configuración. La mayoría de estas comunicaciones pueden ser filtradas o deshabilitadas si es necesario por razones de privacidad o seguridad.

Deja una respuesta