Í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 8601

Recursos

RecursoAccesoContenido
OpportunityLecturaConvocatorias normalizadas: código BDNS o externo, órgano, importe, plazos, región, finalidad, beneficiarios, URL oficial.
CompanyProfileLectura · escrituraPerfil de cada empresa cliente: actividad CNAE, territorio, tamaño, proyectos previstos.
WatchedOpportunityLectura · escrituraConvocatorias en seguimiento por empresa, con su estado (interesa, presentada, concedida).
ExpedienteLecturaExpedientes en curso: estado, fase, plazos, importes solicitado y concedido.
HitoLecturaPlazos 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ámetroUsoEjemplo
qFiltro JSON. Admite $in, $gte, $lte, $ne, $regex.{"esta_abierta":true}
sortCampo de orden; prefijo - para descendente.-fecha_cierre
limitRegistros por página. Máximo recomendado 100.50
skipDesplazamiento para paginar.100
fieldsCampos a devolver, separados por comas.titulo,fecha_cierre

Límites y errores

  • 401 clave ausente o revocada · 403 el recurso no pertenece a tu espacio · 404 no existe.
  • 429 lí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 con q.
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.