Guía de la API de GitHub · Actualizada el 4 de noviembre de 2026

API GraphQL de GitHub: calendario de contribuciones y consulta

Obtén los datos estructurados de un calendario de contribuciones de perfil con la API GraphQL de GitHub. Aquí se explica la consulta, las variables, los campos devueltos, los límites de privacidad y los errores habituales.

Qué devuelve la API GraphQL de contribuciones de GitHub

La API GraphQL de contribuciones de GitHub permite leer el calendario de un perfil con fechas y recuentos estructurados. Indica el login, solicita contributionsCollection para un intervalo y selecciona contributionCalendar. La respuesta contiene el total y semanas con días individuales.

Cada registro diario incluye date y contributionCount. color y weekday ayudan a reproducir el calendario; totalContributions suma el intervalo. Estos valores describen actividad del perfil, no commits de un repositorio, un historial completo ni toda actividad privada.

La documentación de GitHub indica que las contribuciones de repositorios privados e internos solo se incluyen con el permiso opcional read:user. Solicítalo únicamente si el producto lo necesita; de lo contrario, limita los permisos del token.

La solicitud es un POST GraphQL al endpoint de GitHub y requiere autenticación. Guarda el token en un servidor o variable local, limita el acceso y nunca lo incluyas en JavaScript, repositorios públicos ni consultas compartidas.

Las casillas de un calendario de contribuciones atraviesan un flujo GraphQL y se convierten en un resultado estructurado con forma de calendario.
El calendario puede solicitarse como campos estructurados y después mostrarse en una visualización propia.

Crear una solicitud a la API GraphQL de contribuciones de GitHub

El endpoint GraphQL de GitHub es https://api.github.com/graphql. Envía un POST con un token bearer en Authorization y un cuerpo JSON con query y variables. Separarlos facilita revisar y reutilizar la llamada con otro usuario o intervalo.

El ejemplo consulta el calendario del perfil, no los commits del repositorio. Pide el total, las semanas y sus días de contribución. Si solo necesitas el total anual, solicita totalContributions y omite los campos anidados.

GraphQL devuelve una envoltura JSON. Comprueba el estado HTTP y el arreglo superior errors: puede haber datos y errores a la vez. Registra por separado el mensaje y la ruta del campo afectado.

Consulta y variables

query UserContributionCalendar($login: String!, $from: DateTime!, $to: DateTime!) {
  user(login: $login) {
    contributionsCollection(from: $from, to: $to) {
      contributionCalendar {
        totalContributions
        weeks {
          contributionDays {
            date
            contributionCount
            color
            weekday
          }
        }
      }
    }
  }
}

{
  "login": "octocat",
  "from": "2026-01-01T00:00:00Z",
  "to": "2026-02-01T00:00:00Z"
}

Incluye la consulta y el objeto variables en el cuerpo JSON del POST. No pongas un token real en este ejemplo y revisa el esquema oficial antes de añadir campos.

Leer los campos del calendario de contribuciones

La ruta de respuesta es data.user.contributionsCollection.contributionCalendar. Trata cada nivel como opcional en tu código: el usuario puede no resolverse, un campo puede no estar disponible para la cuenta autenticada o la respuesta puede incluir errores. No accedas a propiedades anidadas antes de validar la respuesta.

totalContributions suma el intervalo. weeks agrupa el calendario y cada contributionDays representa una fecha. contributionCount es la actividad diaria; date, la fecha; weekday, el día semanal (1 es lunes); color es hexadecimal y los tonos oscuros indican más contribuciones. Conserva fecha y recuento como datos, y color como metadato visual.

La lista diaria sirve para construir una tabla accesible, un mapa de intensidad, un resumen semanal o un gráfico. Conserva también los días sin actividad: si eliminas los ceros, la secuencia puede desplazarse y asignar la actividad a fechas equivocadas.

Un calendario anual se amplía hasta una semana de siete días; cada casilla se asocia con una intensidad y un valor estructurado.
La respuesta agrupa los días por semanas, pero un gráfico suele necesitar un registro normalizado por fecha.

Elegir un intervalo de fechas explícito

Pasa from y to como DateTime ISO 8601. Los límites UTC explícitos hacen reproducibles los informes y evitan desfases de un día entre zonas horarias. Decide si agruparás por la fecha de GitHub o por una zona local antes de convertir marcas de tiempo.

En informes móviles, guarda los extremos exactos. Compara periodos de igual duración y divide historiales largos en intervalos acotados; una respuesta no es un archivo ilimitado.

Prueba límites cercanos a la medianoche UTC y un periodo sin actividad visible. El total y los días deben coincidir con el intervalo solicitado. Un total cero es válido, no indica un fallo.

1

Define el periodo del calendario

Elige un periodo con nombre, como un año natural o los últimos doce meses, y fija los dos extremos antes de enviar la solicitud.

2

Envía variables UTC

Usa marcas de tiempo ISO 8601 terminadas en Z cuando necesites límites UTC estables.

3

Guarda el intervalo solicitado

Almacena los extremos junto con los datos para que el gráfico pueda explicar qué cubre el total.

4

Comprueba los días de borde

Compara la primera y la última fecha devueltas con tus reglas de visualización antes de agrupar semanas.

Normalizar la respuesta antes de dibujarla

Un modelo compacto permite usar la respuesta en gráficos, CSV o instantáneas programadas. Aplana las semanas en una lista ordenada, conserva fecha y recuento, y guarda color o weekday solo si hacen falta. Ordena por fecha, no por las claves del objeto.

Valida que cada fecha se interprete y que el recuento sea finito y no negativo. Define cómo tratar usuarios ausentes, colecciones vacías, fechas duplicadas, datos parciales y límites de uso. Muestra un estado vacío en vez de un calendario roto o ceros inventados.

El calendario del perfil responde a una pregunta distinta del historial de repositorio. Usa la guía de reglas del gráfico de contribuciones para investigar casillas ausentes y la guía del historial de commits para consultar registros de un repositorio.

Aplanar semanas en registros diarios

const days = (calendar.weeks || [])
  .flatMap((week) => week.contributionDays || [])
  .map(({ date, contributionCount, color, weekday }) => ({
    date,
    count: Number(contributionCount),
    color,
    weekday,
  }))
  .sort((a, b) => a.date.localeCompare(b.date));

Valida el calendario antes de este paso y trata los datos ausentes expresamente. Conserva los días con recuento cero para alinear la cronología.

Solucionar errores y límites de GraphQL

Ante un fallo, revisa el estado HTTP, el JSON y errors juntos. GitHub puede rechazar una consulta inválida o devolver un usuario sin actividad para el periodo. Sé concreto y no registres el token bearer ni la cabecera Authorization.

SíntomaQué revisarSiguiente paso
El usuario es nullConfirma el login y que la cuenta sea visible para la solicitud autenticada.Prueba con una cuenta pública conocida y revisa los errores GraphQL.
Campo o argumento desconocidoCompara la consulta con el esquema GraphQL actual de GitHub.Consulta la referencia oficial de users y pide solo campos admitidos.
HTTP correcto, pero errors contiene valoresLee el mensaje y la ruta de cada error; GraphQL puede devolver datos parciales.Trata los datos parciales deliberadamente o corrige el campo rechazado.
El calendario está vacíoRevisa usuario, fechas, acceso de la cuenta y si se espera cero actividad.Muestra un estado vacío real; no inventes recuentos diarios.
Se alcanzó el límite de solicitudesRevisa la información de límite y el coste de la consulta.Guarda en caché resultados adecuados, evita sondeos y reintenta tras el reinicio.

Respetar la privacidad y el significado de las contribuciones

El calendario muestra actividad del perfil, no repositorios privados ni todo el trabajo de una persona. La privacidad de GitHub afecta los datos visibles y una aplicación debe pedir solo lo necesario. Al compartir un gráfico, explica su origen e intervalo.

Trata el token como credencial: cárgalo desde un secreto del servidor o variable local, limita permisos, rota credenciales expuestas y ocúltalas en los registros. Nunca incluyas un token personal en HTML o JavaScript públicos.

No uses los recuentos como puntuación de calidad o productividad: no reflejan revisiones, mantenimiento ni actividad privada. Etiqueta el resultado como una instantánea fechada del calendario.

Preguntas frecuentes sobre la API GraphQL de contribuciones de GitHub

¿Qué campo GraphQL devuelve el calendario de contribuciones?

Busca un usuario por login y solicita contributionsCollection con contributionCalendar. Selecciona totalContributions, weeks y contributionDays que use la aplicación.

¿Devuelve commits individuales de repositorios?

No. Devuelve datos del calendario de contribuciones del perfil para un intervalo. Usa el historial del repositorio o una conexión de commits si necesitas registros, archivos, mensajes o detalles de un proyecto concreto.

¿Necesito un token para la API GraphQL de GitHub?

Sí. La API GraphQL de GitHub requiere autenticación. Mantén el token fuera del código del navegador y los repositorios públicos, y concede solo el acceso necesario.

¿Qué significa contributionCount?

Es el recuento de actividad que GitHub informa para un día del calendario incluido en la colección. No equivale a todos los commits ni mide la calidad del código.

¿Puedo consultar todo el historial de contribuciones?

Indica fechas explícitas y confirma el intervalo admitido por la API. Para historiales largos, solicita periodos acotados y guarda sus extremos.

¿Por qué la API puede no devolver datos del calendario?

Revisa el login, los campos, la autenticación, las fechas y el arreglo superior errors. Una consulta válida también puede devolver cero contribuciones para ese usuario y periodo.

Referencias oficiales

Explora el calendario de forma visual

Después de revisar el origen de los datos y el intervalo, explora el patrón público de contribuciones con una visualización en el navegador. Abrir GitHub City