Busillo para desarrolladores
Guía paso a paso

Inicio rápido

De cero a una petición real contra datos de TUSSAM en cinco pasos. Todo lo de aquí usa el plan gratis — no hace falta pagar nada para seguir esta guía completa.

  1. Pide tu clave de API

    No hay auto-registro todavía — escribe a hola@busillo.app contando qué quieres construir y te mandamos una clave (formato bsl_...) a mano. Suele ser rápido, pero es una persona la que la emite, no un formulario.

    Pide tu clave →
  2. Haz tu primera petición

    Todo vive bajo https://devsapi.busillo.app. Manda la clave en la cabecera X-API-Key (o como ?key= si estás probando algo rápido desde el navegador). Prueba con el catálogo de líneas:

    Terminal
    # sustituye bsl_... por tu clave real
    curl -H "X-API-Key: bsl_..." \
      https://devsapi.busillo.app/v1/lineas
    Respuesta
    {
      "lineas": [
        { "id": "1", "nombre": "01", "nombreLargo": "Plg. Norte H. Virgen del Rocio" },
        { "id": "2", "nombre": "02", "nombreLargo": "Puerta Triana - Heliopolis" },
        
      ],
      "atribucion": "Datos GTFS de TUSSAM, distribuidos vía NAP — MITRAMS"
    }
  3. Consulta el horario de una línea real

    :id acepta el routeId interno o el nombre corto de la línea (el que va en el rótulo del bus, p.ej. "01"). Aquí, la línea 01 (Plaza de Armas / Polígono Norte ↔ Hospital Virgen del Rocío):

    Terminal
    curl -H "X-API-Key: bsl_..." \
      https://devsapi.busillo.app/v1/lineas/01/horario

    Devuelve las salidas programadas por sentido, con la primera parada de cada uno — es el mismo dato que usa la propia app de Busillo, ya parseado del GTFS. Formato completo de la respuesta en el grupo de endpoints "Líneas".

  4. Busca una parada y sus avisos

    /v1/paradas da el catálogo completo (código, nombre, coordenadas, líneas que pasan); /v1/paradas/:codigo el detalle de una. /v1/avisos da los cortes, desvíos e incidencias activos de TUSSAM ahora mismo — sin parámetros, es un único listado:

    Terminal
    curl -H "X-API-Key: bsl_..." \
      https://devsapi.busillo.app/v1/paradas/1092
    
    curl -H "X-API-Key: bsl_..." \
      https://devsapi.busillo.app/v1/avisos
  5. Ejemplo mínimo funcionando

    Un script de Node de menos de 15 líneas que pide el horario de una línea y muestra la próxima salida en día laborable — sin librerías, solo fetch (Node 18+):

    proxima-salida.mjs
    const API_KEY = "bsl_...";
    const res = await fetch(
      "https://devsapi.busillo.app/v1/lineas/01/horario",
      { headers: { "X-API-Key": API_KEY } }
    );
    if (!res.ok) {
      // 401 = clave inválida, 429 = límite de 60/min superado
      throw new Error(`${res.status}: ${(await res.json()).error}`);
    }
    const horario = await res.json();
    const ahora = new Date().toTimeString().slice(0, 5);
    const siguiente = horario.salidas_laborable.find(h => h > ahora);
    console.log(`Línea ${horario.nombre} (${horario.sentido}): próxima salida ${siguiente ?? "no hay más hoy"}`);

    Con eso ya tienes lo básico: catálogo, horario y avisos, todo en el plan gratis. El siguiente paso natural es mirar casos de uso reales para ver cómo se combina esto en un widget, un bot o una intranet completa.

Errores que te vas a encontrar

Todos devuelven JSON con un campo "error" — nunca una página HTML ni un 200 con datos vacíos disfrazando el fallo.

CódigoMotivoQué hacer
401Falta la clave o no es válidaRevisa la cabecera X-API-Key o el parámetro ?key=
404Línea o parada que no existe con ese id/códigoComprueba el id contra /v1/lineas o /v1/paradas
429Más de 60 peticiones/minuto con esa claveEspera un minuto o cachea la respuesta en tu lado — el GTFS estático no cambia cada segundo
501/v1/paradas/:codigo/tiempos — pendiente de resolverLee el aviso completo en endpoints antes de depender de este

¿Listo para construir algo?

Revisa casos de uso reales con los endpoints exactos de cada uno, o pide tu clave directamente si ya sabes lo que quieres montar.