Prime Services API y recursos para desarrolladores
Cómo leer primeservices.es desde un programa o un agente de IA: Markdown por negociación de contenido, servidor MCP, llms.txt y API REST.
Qué publica Prime Services para máquinas
Todo el contenido de Prime Services es público y se puede leer sin credenciales,
sin registro y sin clave de API. Estas son las rutas estables:
| Recurso | URL | Tipo |
|---|---|---|
| Índice de contenido para modelos | /llms.txt |
text/markdown |
| Instrucciones para agentes | /agents.md |
text/markdown |
| Las mismas, con el otro nombre | /agent-instructions.md |
text/markdown |
| Autenticación | /auth.md |
text/markdown |
| Servidor MCP | /mcp |
application/json |
| Contrato OpenAPI 3.1 | /openapi.json |
application/json |
| Índice de la API (parámetros, ejemplos, errores, autenticación) | /api |
application/json |
| Sandbox: comprobación en vivo | /api/sandbox |
application/json |
| Política de versionado y retirada | /api/versionado |
application/json |
| Ficha del servidor MCP (SEP-1649) | /.well-known/mcp/server-card.json |
application/json |
| API REST de contenido | /wp-json/ps/v1/ |
application/json |
| Cualquier página en Markdown | /<slug>.md |
text/markdown |
| Índice de skills | /.well-known/agent-skills/index.json |
application/json |
| Ficha del servidor MCP | /.well-known/mcp.json |
application/json |
| Catálogo de capacidades | /.well-known/ai-catalog.json |
application/json |
| Catálogo de API (RFC 9727) | /.well-known/api-catalog |
application/linkset+json |
| Servidor de autorización (RFC 8414) | /.well-known/oauth-authorization-server |
application/json |
| Recurso protegido: el sitio (RFC 9728) | /.well-known/oauth-protected-resource |
application/json |
| Recurso protegido: la API de contenido | /.well-known/oauth-protected-resource/wp-json/ps/v1 |
application/json |
| Contenido en JSON de WordPress | /wp-json/wp/v2/pages |
application/json |
| Mapa del sitio | /sitemap_index.xml |
application/xml |
Markdown por negociación de contenido
Cualquier página o entrada devuelve Markdown si lo pides por su nombre en la
cabecera Accept. No hay que cambiar de URL: es la misma, negociada.
curl -H "Accept: text/markdown" https://primeservices.es/fontaneros-tenerife/
La respuesta llega como text/markdown; charset=utf-8 y lleva
Vary: Accept, Accept-Encoding, de modo que ninguna caché intermedia mezcla las dos
variantes. Se respetan los valores q: si pides HTML con más prioridad que Markdown,
recibes HTML. Un Accept que no admita ni text/html ni
text/markdown recibe 406 Not Acceptable.
Si prefieres no depender de cabeceras, la misma página está en una URL explícita
añadiendo .md: https://primeservices.es/fontaneros-tenerife.md. Devuelve
byte a byte lo mismo que la negociada.
El comodín no cuenta como petición de Markdown: un cliente que manda solo el
comodín genérico recibe HTML, que es lo que espera un navegador o un rastreador normal.
API REST de Prime Services
Cuatro operaciones de solo lectura, sin autenticación obligatoria y con contrato
OpenAPI 3.1 en /openapi.json. Son las mismas que expone el servidor
MCP: comparten implementación, así que no pueden dar respuestas distintas.
| Operación | Endpoint | Para qué |
|---|---|---|
buscar_contenido |
GET /wp-json/ps/v1/buscar_contenido |
Buscar por síntoma, aparato, oficio o municipio. |
leer_pagina |
GET /wp-json/ps/v1/leer_pagina |
Texto completo de una página en Markdown. |
listar_servicios |
GET /wp-json/ps/v1/listar_servicios |
Catálogo, filtrable por ubicación y tipo. |
datos_empresa |
GET /wp-json/ps/v1/datos_empresa |
Razón social, NIF, domicilio y cobertura. |
estado |
GET /wp-json/ps/v1/estado |
Tu cuota: límite, consumidas y segundos hasta el reinicio. Es la única que exige token. |
curl "https://primeservices.es/wp-json/ps/v1/buscar_contenido?consulta=nevera%20no%20enfria&limite=3"
Para acotar a una ubicación, el parámetro es ubicacion, con el slug que llevan sus
URLs al final (tenerife, las-palmas, madrid…) o
todas. El antiguo provincia se sigue aceptando como alias.
Los errores son siempre JSON, nunca HTML, con la misma forma: code
estable para ramificar en código, message legible y data.hint con qué
hacer para arreglarlo.
{
"code": "ps_peticion_invalida",
"message": "No hay ninguna pagina publicada en "/no-existe/".",
"data": { "status": 400, "hint": "Revisa los parametros contra el esquema en .../openapi.json" }
}
Empezar en un minuto
- Gratis. No hay planes de pago ni prueba que caduque: la lectura pública es gratuita y sin límite de tiempo.
- Sin clave para empezar. Prueba ahora:
curl https://primeservices.es/wp-json/ps/v1/datos_empresa - Claves en autoservicio.
POST /oauth/registerda unclient_idy unclient_secretal instante, sin formulario, sin aprobación humana y sin contactar con ventas. Sube la cuota de 60 a 600 peticiones por minuto. - Sandbox. No hace falta uno aparte: la API es de solo lectura sobre contenido ya público, así que la URL de producción es inocua de probar. Ninguna llamada crea, modifica, reserva ni cobra nada. Compruébalo en vivo en
/api/sandbox.
Autenticación y cuota
Leer no exige credenciales. Registrarse es opcional y lo único que cambia es
cuánto puedes pedir por minuto: un token no abre contenido nuevo, da exactamente los mismos
datos públicos con más holgura. Por eso el alta es automática y no la aprueba nadie.
| Peticiones por minuto | Se cuentan por | Acceso al contenido | |
|---|---|---|---|
| Anónimo | 60 | dirección IP | completo |
| Identificado | 600 | client_id |
el mismo |
El alta sigue RFC 7591 y la emisión de token, RFC 6749 con la
concesión client_credentials:
curl -X POST https://primeservices.es/oauth/register \
-H "Content-Type: application/json" \
-d '{"client_name":"mi-agente"}'
curl -u CLIENT_ID:CLIENT_SECRET \
-X POST https://primeservices.es/oauth/token \
-d grant_type=client_credentials
curl -H "Authorization: Bearer TOKEN" https://primeservices.es/wp-json/ps/v1/estado
Hay además introspección (/oauth/introspect, RFC 7662) y revocación
(/oauth/revoke, RFC 7009). Los metadatos de descubrimiento están en
/.well-known/oauth-authorization-server (RFC 8414) y
/.well-known/oauth-protected-resource (RFC 9728, con la ficha de la API en /.well-known/oauth-protected-resource/wp-json/ps/v1).
Toda respuesta de la API trae la cuota, para que un cliente pueda autolimitarse desde la primera
llamada en lugar de descubrir el límite al chocar con él:
RateLimit-Limit: 60
RateLimit-Remaining: 57
RateLimit-Reset: 34
RateLimit-Policy: "anonimo";q=60;w=60
RateLimit: "anonimo";r=57;t=34
Se emiten las dos familias a propósito: las tres cabeceras clásicas, que son las que casi todo el
mundo lee hoy, y los campos estructurados del borrador vigente del IETF. Un 429 añade
Retry-After. Un token inválido recibe 401 y no se degrada a anónimo en
silencio.
No se publica /.well-known/openid-configuration: OpenID Connect
autentica personas y aquí no hay usuarios ni login que descubrir. Tampoco hay jwks_uri,
porque los tokens son opacos y no van firmados; para saber si uno vale está la introspección. El
detalle completo, en /auth.md.
Versionado y retirada (deprecation and sunset policy)
- Versión actual: v1, en la ruta (
/wp-json/ps/v1/). Cada respuesta de la API traeAPI-Version: 1. El contrato OpenAPI 3.1 está en/openapi.json. - Cambios compatibles (un campo nuevo, una operación nueva) se hacen dentro de v1 sin aviso previo. Un cliente debe ignorar los campos que no conozca.
- Cambios incompatibles salen en una versión nueva (
/wp-json/ps/v2/). La versión anterior sigue funcionando al menos 90 días después de anunciar su retirada. - Cómo se avisa: la versión en retirada responde con
Deprecation(RFC 9745) desde el día del anuncio y conSunset(RFC 8594) con la fecha exacta de apagado. Cada respuesta de la API lleva un enlacerel="deprecation"a este apartado. - La política, en JSON:
/api/versionado. - Hoy ninguna versión está en retirada, por eso las respuestas actuales no llevan
DeprecationniSunset: si ves esas cabeceras, es que hay que migrar.
Servidor MCP de Prime Services
Hay un servidor Model Context Protocol de solo lectura sobre el contenido
publicado, con transporte Streamable HTTP:
POST https://primeservices.es/mcp
No requiere autenticación y no expone ninguna herramienta de escritura. Habla las dos eras del
protocolo: la de 2026-07-28, con metadatos por petición y server/discover,
y la del handshake initialize de 2025-11-25 y anteriores.
Herramientas disponibles
| Herramienta | Para qué sirve |
|---|---|
buscar_contenido |
Buscar por síntoma, aparato, oficio o municipio. Devuelve URL y extracto. |
leer_pagina |
Texto completo de una URL en Markdown, sin menús ni pie. |
listar_servicios |
Catálogo completo, filtrable por ubicación y por tipo. |
datos_empresa |
Razón social, NIF, domicilio, cobertura, impuestos y modelo de servicio (quién ejecuta y factura cada trabajo). |
Ejemplo de llamada
curl -X POST https://primeservices.es/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"buscar_contenido",
"arguments":{"consulta":"nevera no enfria","limite":3}}}'
La ficha del servidor, con el transporte y la versión, está en
/.well-known/mcp.json.
Índice del sitio e instrucciones para agentes
/llms.txt lista todas las URLs publicadas agrupadas por ubicación y por tipo de
servicio, e incluye una sección de cuándo usar esta fuente con los casos que este sitio
resuelve y los que no. /agents.md repite esa guía y añade los ejemplos de llamada.
API REST de WordPress
El contenido también está en JSON a través de la API REST de WordPress, en
/wp-json/wp/v2/pages y /wp-json/wp/v2/posts. La lectura es pública. La
escritura exige credenciales de administración y no se concede a terceros; los detalles están en
/auth.md.
El servidor OAuth 2.0 de este dominio no sirve para escribir: sus tokens solo
amplían la cuota de la API de contenido y no conceden ningún permiso dentro de WordPress. Son dos
mecanismos distintos y no se cruzan.
Política de uso del contenido
El robots.txt declara Content-Signal: ai-train=yes, search=yes,. El contenido puede usarse para entrenamiento, para búsqueda y como entrada de
ai-input=yes
un modelo. Se agradece la cita con enlace a la URL de origen.
Soporte
Para cualquier consulta sobre acceso automatizado, escribe a través de la página de
contacto. Si lo que buscas es información sobre la
empresa, está en sobre nosotros.