Datos de Georgia, para tu código
Una API REST de solo lectura sobre cada conjunto de datos de Georgia depurado y estandarizado. Obtén filas en JSON, CSV o Parquet, filtradas por año, lugar y datos demográficos. Sin clave de API ni registro.
URL base
https://georgiacivicdata.org/api/v1- Pública y de solo lectura. Cada endpoint es un
GET. No hay nada que autenticar. - Basada en contratos. Cada conjunto de datos se genera a partir de un contrato ODCS versionado, así que sus columnas, unidades, rangos y valores permitidos son estables y están documentados.
- Los mismos datos en todas partes. El panel y el servidor MCP leen esta misma API.
Tu primera solicitud
Los datos de hechos están en /api/v1/{main_topic}/{topic}. Pide los puntajes ACT compuestos de 2024 a nivel de distrito:
curl "https://georgiacivicdata.org/api/v1/education/act_scores?year=2024&test_component=composite&detail=districts"Las respuestas JSON son un sobre: un arreglo data de filas más un bloque pagination. Las etiquetas de dimensión (nombres de distrito y escuela) se incluyen por ti.
{
"data": [
{
"year": 2024,
"district_code": "601",
"district_name": "Appling County",
"test_component": "composite",
"num_tested": 234,
"avg_score": 18.7
}
],
"pagination": { "limit": 1000, "offset": 0, "total": 181, "returned": 181 }
}Formatos de respuesta
Agrega ?format= para elegir cómo se devuelven las filas:
- json (predeterminado). Sobre paginado con
data+pagination. - csv. Bytes CSV con un encabezado
X-Total-Count. - parquet. Bytes Parquet — ideal para análisis en polars/DuckDB.
Filtrado
- Año.
year=2024(exacto) oyear_min/year_max(rango inclusivo). Usa uno u otro, no ambos. - Nivel de detalle.
detail=states,districtsoschools— el que publique el conjunto de datos. Un conjunto documenta todos sus niveles. - Geografía y datos demográficos.
district_code,school_codeydemographicaceptan listas de códigos separadas por comas. - Filtros por columna. Cada columna categórica es su propio parámetro (p. ej.
test_component=composite). Los valores separados por comas son OR dentro de un parámetro; varios parámetros se combinan con AND.
Cada página de conjunto de datos enumera sus parámetros de filtro exactos y sus valores permitidos.
Paginación
Usa limit (predeterminado 1000, máximo 10000) y offset. El campo pagination.total siempre reporta el total de coincidencias para paginar de forma determinista.
Errores y límites de tasa
Los errores devuelven { "error": { "code", "message", "details?" } } con el estado HTTP correspondiente — p. ej. TOPIC_NOT_FOUND (404), INVALID_FILTER_VALUE (400), RATE_LIMITED (429). La API tiene límites de tasa generosos; ante un 429, espera y reintenta.
Descubrimiento
No fijes las formas de los conjuntos de datos en tu código: descúbrelas:
- Catálogo.
GET /api/v1/datasetslista cada conjunto de datos y dimensión. - Esquema.
GET /api/v1/datasets/{main}/{topic}devuelve columnas, filtros, rangos y valores permitidos como JSON. - Contrato.
.../contract?format=yamldevuelve el contrato ODCS sin procesar.
Consulta la referencia de endpoints para cada ruta, o explora el catálogo de conjuntos de datos.
Para agentes de IA
Apunta un agente de programación a uno de estos — ambos se generan a partir de los mismos contratos:
- llms.txt Un índice de la API y de cada conjunto de datos.
- llms-full.txt La referencia completa y densa — cada columna, filtro, enum y rango en línea.
- openapi.json Esquema OpenAPI (nota: los filtros categóricos por columna se generan por solicitud y no se enumeran allí — usa los contratos o llms-full.txt para eso).