Índice de la documentación
04 · Partners
Referencia de la API.
Una API REST sobre HTTPS que devuelve JSON. Los mismos recursos que usa el panel de Subvia, con los mismos permisos.
Autenticación
Cada partner recibe con el alta un identificador de espacio y una clave de API. La clave viaja en la cabecera api_key y se usa solo desde servidor: nunca en un navegador ni en una app móvil.
http
Base URL https://subvia.es/api/apps/{ESPACIO}
Cabecera api_key: {TU_CLAVE}
Formato application/json · UTF-8 · fechas ISO 8601Recursos
| Recurso | Acceso | Contenido |
|---|---|---|
| Opportunity | Lectura | Convocatorias normalizadas: código BDNS o externo, órgano, importe, plazos, región, finalidad, beneficiarios, URL oficial. |
| CompanyProfile | Lectura · escritura | Perfil de cada empresa cliente: actividad CNAE, territorio, tamaño, proyectos previstos. |
| WatchedOpportunity | Lectura · escritura | Convocatorias en seguimiento por empresa, con su estado (interesa, presentada, concedida). |
| Expediente | Lectura | Expedientes en curso: estado, fase, plazos, importes solicitado y concedido. |
| Hito | Lectura | Plazos de cada expediente con su base legal, fecha calculada y responsable. |
Rutas: GET /entities/{Recurso} para listar, GET /entities/{Recurso}/{id} para un registro, POST para crear y PUT /entities/{Recurso}/{id} para actualizar donde el acceso lo permite.
Consultar convocatorias abiertas
curl
curl -G "https://subvia.es/api/apps/$ESPACIO/entities/Opportunity" \
-H "api_key: $SUBVIA_KEY" \
--data-urlencode 'q={"esta_abierta":true,"region_nombre":"Comunidad de Madrid"}' \
--data-urlencode "sort=fecha_cierre" \
--data-urlencode "limit=50"javascript
const base = `https://subvia.es/api/apps/${process.env.SUBVIA_ESPACIO}`;
const params = new URLSearchParams({
q: JSON.stringify({ esta_abierta: true, finalidad: "Industria y energía" }),
sort: "fecha_cierre",
limit: "50",
});
const res = await fetch(`${base}/entities/Opportunity?${params}`, {
headers: { api_key: process.env.SUBVIA_KEY },
});
if (!res.ok) throw new Error(`Subvia ${res.status}`);
const convocatorias = await res.json();Alta de una empresa cliente
curl
curl -X POST "https://subvia.es/api/apps/$ESPACIO/entities/CompanyProfile" \
-H "api_key: $SUBVIA_KEY" -H "Content-Type: application/json" \
-d '{"razon_social":"Talleres Ejemplo SL","comunidad_autonoma":"Aragón","empleados":"10-49"}'Parámetros de consulta
| Parámetro | Uso | Ejemplo |
|---|---|---|
| q | Filtro JSON. Admite $in, $gte, $lte, $ne, $regex. | {"esta_abierta":true} |
| sort | Campo de orden; prefijo - para descendente. | -fecha_cierre |
| limit | Registros por página. Máximo recomendado 100. | 50 |
| skip | Desplazamiento para paginar. | 100 |
| fields | Campos a devolver, separados por comas. | titulo,fecha_cierre |
Límites y errores
401clave ausente o revocada ·403el recurso no pertenece a tu espacio ·404no existe.429límite de peticiones alcanzado: reintenta con espera exponencial. Los límites se fijan por espacio en el alta.- Pagina siempre con
limit+skip. No descargues la colección completa para filtrar en tu lado: filtra conq.
El esquema completo de cada recurso, con todos sus campos y enumerados, se entrega en el alta junto con un espacio de pruebas con datos sintéticos.