Conceptualizacion básica de APIs, e implementación de consultas de la base pública de la OCDE

Universidad de El Salvador · Facultad de Ciencias Económicas Ciclo 02 2026 · Métodos para el análisis económico · estudiante: Aarón Meléndez GM11008

2026-09-18

PARTE 1: Conceptualización básica de APIs

¿Qué es una API?

API significa “interfaz de programación de aplicaciones” ( del ingles Application Programming Interface).

Su utilidad radica en que son mecanismos que permiten a dos componentes de software comunicarse entre sí mediante un conjunto de definiciones y protocolos (AWS, 2026) independientemente de la naturaleza, arquitectura o tecnología de dichos componentes, usando criterios o definiciones equivalentes que puedan interpretar ambos componentes (Bonilla Melara, 2024).

Simplificación analógica

Simplificación Técnica

Clasificación de las API

Ejemplo de formato de intercambio en las API

Modelo SDMx

(Statistical Data and Metadata eXchange) es un sistema de intercambio de datos estadísticos basado en el estándar ISO 17369, y cuenta con el apoyo de instituciones como el FMI, el BM y Eurostat.

Consta de (SDMx org, 2026):

  • Normas técnicas (incluido el Modelo de Información)
  • Directrices estadísticas
  • Una arquitectura y herramientas de TI

SDMx tambien agrupa los estándares técnicos, las directrices estadísticas y la arquitectura y herramientas de TI pueden contribuir a la mejora de los procesos estadisticos y el manejo de los metadatos.

Parte 2: Acceso a la OCDE public database

¿Que es la OCDE?

La Organización para la Cooperación y el Desarrollo Económicos (OCDE) es una organización internacional que trabaja para diseñar mejores políticas que contribuyan a mejorar la calidad de vida (OCDE, 2026) . La precursora de la OCDE fue la Organización Europea para la Cooperación Económica (OECE), creada para administrar la ayuda estadounidense y canadiense del Plan Marshall, destinada a reconstruir Europa tras la Segunda Guerra Mundial. La Convención que transformó la OECE en la OCDE se firmó en el Château de la Muette, en París, el 14 de diciembre de 1960, y entró en vigor el 30 de septiembre de 1961. (OCDE, 2026)

Durante los 60 años siguientes, la OCDE ha ampliado el número de países miembros hasta alcanzar los 38, entre ellos naciones de América Latina, Asia y el Pacífico, y ha cumplido su misión de ayudar a los países a encontrar soluciones comunes a desafíos comunes. (OCDE, 2026)

OCDE Data Explorer

La OCDE distribuye toda su información estadística a través de su plataforma OECD Data Explorer, cuyo motor de consultas sigue el estándar SDMx 3.0. El flujo de trabajo para acceder a un indicador es el siguiente (OECD, 2023):

  1. Ingresar al sitio https://www.oecd.org/en/data/datasets/oecd-DE.html

  2. Seleccionar los indicadores de interés. Se dividen en las siguientes grandes categorías:

    Agricultura y pesca.

    Desarrollo

    Economía

    Educación y habilidades

    Medio Ambiente y Cambio Climático

    Industria, negocios y emprendimientos.

    Ciencia, tecnología e innovación

    Empleo

    Sociedad

    Desarrollo urbano, rural y regional

    Finanzas e investigación

    Gobierno Publico.

    Salud

    Comercio

    Transporte

    Impuestos

  1. Aplicar los filtros deseados directamente en el explorador. Dependiendo del nivel de segregación deseado, se mostrará el indicador que cumple las condiciones (de existir en la base de datos). Para el Caso de El Salvador, para la consulta realizada en septiembre 2026, únicamente la librería dispone de 154 datasets que recopilan información del país.
  2. Subfiltrar el indicador escogido. Dependiendo del tipo de indicador, y de la data disponible así serán el subnivel de filtro. Como mínimo, se puede filtrar por el periodo de tiempo.
  3. Ingresar a la opción Developer API query builder. Esta opción muestra la URL construida en función del indicador y los filtros seleccionados. La URL Data query, conecta y descarga de la OCDE la información hacia el repositorio local. La URL Structure query, descarga la información complementaria que describe la base de datos.
  4. Copiar esa URL y cargarla en R Studio empleando la libreria rsdmx y el comando readSDMX() para traer los datos directamente a un tibble, pasando primero por un dataframe.

Sintasix de la URL API de consulta

La URL que genera el compositor de consultas de la OCDE, sigue los siguientes elementos (OECD, 2024a):

Sintasix general de consulta mediante ResFul API
{Host URL}/{Agency identifier},{Dataset identifier},{Dataset version}/{Data selection}?{other optional parameters}

Sintaxis de la URL API de estructura de datos

La URL que genera el compositor de consultas de la OCDE, que contiene la metadata relacionada a la URL de consulta tiene los siguientes elementos (OECD, 2024a):

Sintaxis general de la estructura de datos relacionada a la consulta
{Host URL}/{Agency identifier},{Dataset identifier},{Dataset version}?Data structure parameters

Sin embargo, la OCDE pone en disposición la lista completa de datasets, en la siguiente URL:

https://sdmx.oecd.org/public/rest/dataflow/all

Caracteristicas técnicas de la API de la OCDE

  • Endpoint: genera URL para una consulta con sus propios filtros. Usando R Studio ,la consulta y la respuesta se manejan del lado del backend, por lo que el usuario no requiere de mayor conocimiento de programaciòn de API

  • Tipo de API: RESTful API (peticiones HTTP GET para recursos de datos y metadatos).

  • Modelo: SDMx (Statistical Data and Metadata eXchange) como modelo para estructuras de datos y metadatos.

  • Formato de respuesta por default: JSON

Parametros extra

Como parámetros extra, la OCDE permite definir el formato de respuesta de la consulta (OECD, 2024a):

Para XML, agregar al final de la URL de consulta:
format=genericdata
Para JSON, agregar al final de la URL de consulta:
format=jsondata
Para obtener un CVS, agregar al final de la URL de consulta:
format=cvsfile

Caso práctico

Obtener el PIB pércapita real proyectado para el período 2026-2036 para los Estados Unidos de América.

  1. Ingresar a la OCDE Data Explorer, y buscar GDP Forecast Long-term

    Se puede acceder directamente a traves de esta dirección:

    https://www.oecd.org/es/data/indicators/real-gdp-long-term-forecast.html

  2. Aplicar los filtros necesarios. Para fines de demostración, solo aplicar el filtro de serie temporal para datos de 2026 a 2036.

  1. Acceder al Developer API query builder, y copiar la Data Query generada:

  2. Pegar la url en nuestro codigo en R.

Importación del dataset a R

# Carga de librerias:
library(dplyr)
library(tidyverse)
library(rsdmx)
library(knitr)
library(kableExtra)
library(tsbox)


# Como buena practica de documentacion, siempre anotar la URL original del indicador a cargar:
# https://www.oecd.org/es/data/indicators/real-gdp-long-term-forecast.html

# 5.carga de los datos
url_data_query<- "https://sdmx.oecd.org/public/rest/data/OECD.ECO.MAD,DSD_EO_LTB@DF_EO_LTB,/.GDPVTRD_CAP..A?startPeriod=2026&endPeriod=2036&dimensionAtObservation=AllDimensions" 

GDPppr_potential_2026_2036<- readSDMX(url_data_query)


# 6.conversion de las consultas a tabla tipo Tibble
GDPppr_potential_2026_2036<-as_tibble(GDPppr_potential_2026_2036,labels=TRUE)

#Mostrar la database tal como se descarga de la OCDE
GDPppr_potential_2026_2036 |> 
  head(10)
# A tibble: 10 × 9
   TIME_PERIOD REF_AREA MEASURE   SCENARIO FREQ  obsValue UNIT_MEASURE UNIT_MULT
   <chr>       <chr>    <chr>     <chr>    <chr>    <dbl> <chr>        <chr>    
 1 2026        A9       GDPVTRD_… BAU1     A       20202. USD_PPP_PS   0        
 2 2027        A9       GDPVTRD_… BAU1     A       20505. USD_PPP_PS   0        
 3 2028        A9       GDPVTRD_… BAU1     A       20839. USD_PPP_PS   0        
 4 2029        A9       GDPVTRD_… BAU1     A       21202. USD_PPP_PS   0        
 5 2030        A9       GDPVTRD_… BAU1     A       21591. USD_PPP_PS   0        
 6 2031        A9       GDPVTRD_… BAU1     A       22002. USD_PPP_PS   0        
 7 2032        A9       GDPVTRD_… BAU1     A       22432. USD_PPP_PS   0        
 8 2033        A9       GDPVTRD_… BAU1     A       22880. USD_PPP_PS   0        
 9 2034        A9       GDPVTRD_… BAU1     A       23346. USD_PPP_PS   0        
10 2035        A9       GDPVTRD_… BAU1     A       23827. USD_PPP_PS   0        
# ℹ 1 more variable: DECIMALS <chr>

Filtrado de la data para USA periodo 2026-2036

# 7. Creación de una tabla con los datos filtrados para USA periodo 2026-2036
Tabla_GDPppr_Potential<-GDPppr_potential_2026_2036 %>% 
  filter(REF_AREA=="USA",SCENARIO%in%c("BAU1","BAU2")) |> 
  group_by(TIME_PERIOD, SCENARIO) |> 
  summarise(
    obsValue = round(sum(obsValue, na.rm = TRUE) / 1000, digits = 2),
    .groups = "drop"
  ) |> 
  pivot_wider(names_from = SCENARIO, values_from = obsValue)

# 8. Aplicación de estilo a la tabla
Tabla_GDPppr_Potential|> 
  head(11) %>% 
  rename(
    "AÑO"="TIME_PERIOD",
    "Bussiness as Usual (medium damage)"= "BAU1",
    "Bussiness as Usual (high damage)"= "BAU2"
  ) |> 
  kable(caption = "USA: PIB Real Potencial Per Capita (base 2021) expresado en miles de dólares de los Estados Unidos de América, para el periodo 2026-2036, bajo el supuesto que las políticas públicas, las leyes energéticas y las tendencias económicas no sufriran un cambio radical y no se tomen acciones contra el cambio climatico.") %>%  
  kable_classic(html_font = "Times New Roman", font_size = 14) %>% 
  add_footnote(label="Datos tomado de la API de la OCDE. Los valores BAU 1 y BAU 2 (Business-As-Usual) en las proyecciones económicas globales de largo plazo son elaborados internamente por el Departamento de Economía de la OCDE, utilizando su propio Modelo de Largo Plazo (LTM, por sus siglas en inglés: OECD Long-Term Model). Ambos escenarios simulan una transición energética ineficaz que no logra limitar el calentamiento global por debajo de los 2°C (OECD,2025)",notation="symbol") |> 
  kable_styling(full_width = FALSE)
USA: PIB Real Potencial Per Capita (base 2021) expresado en miles de dólares de los Estados Unidos de América, para el periodo 2026-2036, bajo el supuesto que las políticas públicas, las leyes energéticas y las tendencias económicas no sufriran un cambio radical y no se tomen acciones contra el cambio climatico.
AÑO Bussiness as Usual (medium damage) Bussiness as Usual (high damage)
2026 77.94 77.94
2027 79.16 79.14
2028 80.45 80.39
2029 81.80 81.67
2030 83.19 82.99
2031 84.61 84.31
2032 86.03 85.63
2033 87.43 86.90
2034 88.79 88.13
2035 90.09 89.29
2036 91.34 90.38
* Datos tomado de la API de la OCDE. Los valores BAU 1 y BAU 2 (Business-As-Usual) en las proyecciones económicas globales de largo plazo son elaborados internamente por el Departamento de Economía de la OCDE, utilizando su propio Modelo de Largo Plazo (LTM, por sus siglas en inglés: OECD Long-Term Model). Ambos escenarios simulan una transición energética ineficaz que no logra limitar el calentamiento global por debajo de los 2°C (OECD,2025)

Generación de la Gráfica

# 9. GENERACIÓN DE LA GRÁFICA 
# ========================================================================

# Paso A: Preparar y limpiar los datos en formato largo para tsbox
Graf_GDPppr <- GDPppr_potential_2026_2036 %>% 
  filter(REF_AREA == "USA", SCENARIO %in% c("BAU1", "BAU2")) %>% 
  # Renombramos las columnas obligatorias que requiere tsbox
  select(time = TIME_PERIOD, id = SCENARIO, value = obsValue) %>% 
  # Dividimos entre 1000 y redondeamos para mantener consistencia con tu tabla
  mutate(
    value = as.numeric(value),
    value = round(value / 1000, digits = 2),
    # Renombramos los códigos técnicos a nombres legibles para la leyenda
    id = case_match(id,
                    "BAU1" ~ "Business as Usual (Medium Damage)",
                    "BAU2" ~ "Business as Usual (High Damage)")
  )

# Paso B: Dibujar la serie de tiempo interactiva
ts_plot(Graf_GDPppr, 
        title = "USA: PIB Real Potencial Per Cápita (Base 2021)",
        subtitle = "Proyecciones 2026-2036 en miles de USD bajo escenarios de daño climático")

Conclusiones y recomendaciones.

  • El acceso mediante API a la base de datos de la OCDE usando R Studio, permite enfocarse directamente en el manejo de datos, sin involucrarse en los detalles tecnicos, y lenguajes de programaciòn necesarios para hacer funcionar la interface. La libreria rsdmx realiza el backend de la consulta.

  • Cada vez que se corre el código, se realiza una consulta HTTP hacia la base de datos de la OCDE. Según las normas y politicas de uso, la OCDE limita la velocidad de acceso, y se reserva el derecho de bloquear un usuario que intente realizar consultas masivas en periodos muy cortos de tiempo. Se permiten un limite de 60 solicitudes por hora (OECD, 2024b).

  • Según la documentación, existe el paquete OECD en R Studio, versión 0.2.5, lanzado en diciembre 2021. Sin embargo, debido a la actualización y homogenización de la OCDE de sus base de datos para adaptarse al modelo SDMx 3.0, su antiguo servidor Stat, esta fuera de acceso público (Stack Overflow, 2024) . Actualmente hay un paquete beta disponible en github que usa el nuevo modelo SDMx 3.0, pero su testing, sobrepasa los objetivos de esta investigación. La beta esta disponible en

    https://github.com/expersso/OECD

API

Preguntas para la clase:

¿Por qué la OCDE adoptó el estándar SDMX para su API en lugar de usar un formato JSON convencional?

¿Cuáles son las ventajas y desventajas de consumir los datos en vivo mediante la API frente a la descarga tradicional de archivos CSV o Excel?

¿Que riesgos potenciales podriamos enfrentar al integrar la API de la OCDE a un entorno de producción o institucional, y como mitigarlos?

¿Cómo podemos aprovechar la API para vincular la consulta del Structure Query con los Data Query?

Parte 3: Acceso a la UN Comtrade

UN Comtrade es una oficina de propósito estadístico de las Naciones Unidas. Su nombre es el acronimo de Commodity & trade (mercancia y comercio) por lo que su interpretación al castellano es “Comercio de Mercancias.”

La base de datos UN COMTRADE es mantenida por la División de Estadística del DESA/ONU. Ofrece estadísticas detalladas sobre la importación y exportación de bienes y servicios, comunicadas por las autoridades estadísticas de cerca de 200 países y territorios desde 1962. Con cientos de miles de millones de datos, se considera la base de datos de comercio en línea más completa. Los usuarios pueden acceder a información sobre importaciones y exportaciones de bienes y servicios desglosada por socios comerciales y productos (United Nations Statistics Division, 2026a).

Acceso por suscripción.

Debido al volumen, consistencia, disponibilidad y usos comerciales de la base de datos, la oficina de UN Comtrade divide a sus usuarios en tres categorias (United Nations Statistics Division, 2026a):

Free Tier (Acceso público y gratuito: Abierto para estudiantes, periodistas y analistas que realizan consultas rápidas y de bajo volumen. Limita el acceso a un máximo de 50k registros por consulta; todo mediante una API validada por una KEY, limitanto tambien a un maximo de 500 llamadas de consulta al día (University of Toronto Libraries, 2026).

Institutional Access: Portal que otorga acceso sin restricciones y sin costos para el docente y el alumno, según los convenios que la universidad suscriba con UN Comtrade (Stanford University Libraries, 2026).

Premium Subscription: Destinado a entidades privadas que lucran con la información, a gobiernos y centros de investigación. Se gestiona mediante licencia (United Nations Shop, 2026), la cual brinda acceso sin restricciones de ancho de banda, sin contador de volumen, e incluye soporte técnico. Esto habilita herramientas de descargas asincronicas por lotes, descargas masivas (Bulk Download Tool), gestion on-deman de la cuenta en Azure, y acceso preferencia al DataLake de la ONU (United Nations Shop, 2026). Se separa en acceso individual (un solo usuario) y Premium Institutional (red de usuarios)

Métodos de acceso

Métodos Técnicos de Acceso e Interfaz de la UN Comtrade
Método Tipo de Usuario Capacidad Caracteristicas clave
Interface Web Usuarios generales y analistas visuales Hasta 250k registros en cuentas autorizadas Formularios dinámicos, filtros por código del Sistema Armonizado (HS) y generación de gráficos en tiempo real.
API de Desarrolladores Programadores y científicos de datos (R, Python). Varía según nivel (500 llamadas/día gratis o ilimitado Premium). Automatización de extracción mediante solicitudes HTTP. Integrado en librerías científicas como comtradr en R.
Bulk Download Tool Administradores de macrodatos y analistas de políticas públicas. Archivos masivos (hasta 2.5M de registros por bloque). Permite bajar nomenclaturas comerciales completas por país y flujos históricos de un solo golpe. Solo Premium.

Acceso gratuito para estudiantes

  1. Crear una cuenta en el portal gratuito en https://comtradeplus.un.org o entrar directamente a UN Sign in

  2. Escoger la opción de cuenta social, considerando utilizar nuestra cuenta institucional ues.edu.sv, aprovechando su soporte de google. E iniciar sesión usando las credenciales de estudiante. Se realizaran las comprobaciones acostumbradas para validar el usuario

  3. Una vez registrado, regresar a la pagina principal https://comtradeplus.un.org y en el menu de perfil, ingresar a “Mi Portal API”, esto nos llevara al sitio para desarrolladores en https://comtradedeveloper.un.org/signin Si las cookies estan habilitaadas, automaticamente se vinculara la cuenta creada en el paso anterior.

  4. Ingresar a “Explore APIs” Y navegar hasta llegar a las APi gratuitas. Se deberían tener tres opciones (United Nations Statistics Division, 2026b), es obligatorio suscribirse para obtener la llave para la API:

    1. API Descripcion
      comtrade v1 API para obtener datos y metadatos comerciales. Se requiere una clave de suscripción.
      comtrade tools V2 Herramientas de API para obtener datos de comercio bilateral y de balanza comercial. Se requiere una clave de suscripción.
      public v1 API gratuita para previsualizar datos de operaciones. No se requiere clave de suscripción.
  5. Para fines demostrativos, escogemos la primer opcion comtrade v1 y hacemos clic en suscribir (en cuenta gratuita solo permite una suscripcion)

  6. La llave generada para usar la API podemos encontrarla en la ruta My Account → My API portal → Profile → Primary key esta debe estar en formato Hexadecimal.

  7. Copiar la clave para nuestro código en R

Caso práctico

Acceso a datos de exportaciones de El Salvador alojados en UN Comtrade

Se realizara la carga de la data de las Exportaciones totales de los paises centroamericanos con el resto del mundo, del periodo 2018 al 2025. Para ello, se emplearan 3 metodos:

  • Utilización de la libreria comtradr de R Studio.
  • Utilizacion de la libreria comtradr simulando una limitación de consulta de la cuenta gratuita de UN comtrade.
  • Utilización de método GET del protocolo HTTP para consulta directa usando las librerias httr2 y jsonlite.
# Carga de librerias
library(comtradr)
library(dplyr)
library(knitr)
library(kableExtra)
library(tidyr)
library(tidyverse)
library(ggplot2)
library(httr2)
library(jsonlite)
m_m_usd <- 1000000000

# Configurar clave API
comtradr::set_primary_comtrade_key("0019ae66e6294f76aa6071daf2557a20")
secundary_comtrade_key <- "4e16602deffc43279e344f14b62bb1b4"

1. Uso de la libreria comtradr

#carga de datos de las Exportaciones de los paises centroamericanos hacia el resto del mundo


datos_export_ca <- comtradr::ct_get_data(
        reporter       = c("BLZ", "GTM", "SLV","HND", "NIC", "CRI"),
        partner        = "World",
        flow_direction = "export",
        frequency      = "A",
        start_date     = 2018,
        end_date       = 2025,
        commodity_code = "TOTAL")

exportaciones_ca <- datos_export_ca |> as_tibble()
head (exportaciones_ca)
# A tibble: 6 × 47
  type_code freq_code ref_period_id ref_year ref_month period reporter_code
  <chr>     <chr>             <int>    <int>     <int> <chr>          <int>
1 C         A              20180101     2018        52 2018              84
2 C         A              20180101     2018        52 2018             188
3 C         A              20180101     2018        52 2018             222
4 C         A              20180101     2018        52 2018             320
5 C         A              20180101     2018        52 2018             340
6 C         A              20180101     2018        52 2018             558
# ℹ 40 more variables: reporter_iso <chr>, reporter_desc <chr>,
#   flow_code <chr>, flow_desc <chr>, partner_code <int>, partner_iso <chr>,
#   partner_desc <chr>, partner2code <int>, partner2iso <chr>,
#   partner2desc <chr>, classification_code <chr>,
#   classification_search_code <chr>, is_original_classification <lgl>,
#   cmd_code <chr>, cmd_desc <chr>, aggr_level <int>, is_leaf <lgl>,
#   customs_code <chr>, customs_desc <chr>, mos_code <chr>, mot_code <int>, …
# Cargar la librería para graficar


# Crear la gráfica paso a paso
grafica_1 <- ggplot(exportaciones_ca, aes(x = ref_year, y = primary_value/m_m_usd, color = reporter_desc)) +
  geom_line() +   # 1. Dibuja las líneas
  geom_point() +  # 2. Dibuja los puntos sobre las líneas
  labs(
    title = "Gráfica 1: Exportaciones de Centroamérica hacia el resto del mundo",
    x = "Año",
    y = "Valor en miles de millones de USD",
    color = "País",
    caption = "Fuente: UN Comtrade utilizando API gratuita validada con Key y la libreria comtradr"
  )
grafica_1

2. Uso de comtradr con limitaciones de consulta

#Bloque sugerido si la consulta llegase a exceder los 50k items.

bloques_paises <- list(c("BLZ", "GTM", "SLV"), c("HND", "NIC", "CRI"))
bloques_anios  <- list(c(2018, 2021), c(2022, 2025))
lista_datos    <- list()
for (paises in bloques_paises) {
  for (anios in bloques_anios) {
    bloque_descargado <- tryCatch(
      {ct_get_data(
        reporter       = paises,
        partner        = "World",
        flow_direction = "export",
        frequency      = "A",
        start_date     = as.character(anios[1]),
        end_date       = as.character(anios[2]),
        commodity_code = "TOTAL")}, 
      error = function(e) { return(NULL) })
    lista_datos <- append(lista_datos, list(bloque_descargado))
    Sys.sleep(2)}}

exportaciones_ca2 <- bind_rows(lista_datos)
head (exportaciones_ca2)
  type_code freq_code ref_period_id ref_year ref_month period reporter_code
1         C         A      20180101     2018        52   2018            84
2         C         A      20180101     2018        52   2018           222
3         C         A      20180101     2018        52   2018           320
4         C         A      20190101     2019        52   2019            84
5         C         A      20190101     2019        52   2019           222
6         C         A      20190101     2019        52   2019           320
  reporter_iso reporter_desc flow_code flow_desc partner_code partner_iso
1          BLZ        Belize         X    Export            0         W00
2          SLV   El Salvador         X    Export            0         W00
3          GTM     Guatemala         X    Export            0         W00
4          BLZ        Belize         X    Export            0         W00
5          SLV   El Salvador         X    Export            0         W00
6          GTM     Guatemala         X    Export            0         W00
  partner_desc partner2code partner2iso partner2desc classification_code
1        World            0         W00        World                  H5
2        World            0         W00        World                  H5
3        World            0         W00        World                  H5
4        World            0         W00        World                  H5
5        World            0         W00        World                  H5
6        World            0         W00        World                  H5
  classification_search_code is_original_classification cmd_code
1                         HS                       TRUE    TOTAL
2                         HS                       TRUE    TOTAL
3                         HS                       TRUE    TOTAL
4                         HS                       TRUE    TOTAL
5                         HS                       TRUE    TOTAL
6                         HS                       TRUE    TOTAL
         cmd_desc aggr_level is_leaf customs_code customs_desc mos_code
1 All Commodities          0   FALSE          C00    TOTAL CPC        0
2 All Commodities          0   FALSE          C00    TOTAL CPC        0
3 All Commodities          0   FALSE          C00    TOTAL CPC        0
4 All Commodities          0   FALSE          C00    TOTAL CPC        0
5 All Commodities          0   FALSE          C00    TOTAL CPC        0
6 All Commodities          0   FALSE          C00    TOTAL CPC        0
  mot_code  mot_desc qty_unit_code qty_unit_abbr qty is_qty_estimated
1        0 TOTAL MOT            -1           N/A   0            FALSE
2        0 TOTAL MOT            -1           N/A   0            FALSE
3        0 TOTAL MOT            -1           N/A   0            FALSE
4        0 TOTAL MOT            -1           N/A   0            FALSE
5        0 TOTAL MOT            -1           N/A   0            FALSE
6        0 TOTAL MOT            -1           N/A   0            FALSE
  alt_qty_unit_code alt_qty_unit_abbr alt_qty is_alt_qty_estimated net_wgt
1                -1               N/A       0                FALSE       0
2                -1               N/A       0                FALSE       0
3                -1               N/A       0                FALSE       0
4                -1               N/A       0                FALSE       0
5                -1               N/A       0                FALSE       0
6                -1               N/A       0                FALSE       0
  is_net_wgt_estimated gross_wgt is_gross_wgt_estimated cifvalue    fobvalue
1                 TRUE         0                  FALSE       NA   240911158
2                 TRUE         0                  FALSE        0  5905411211
3                 TRUE         0                  FALSE       NA 10863483936
4                 TRUE         0                  FALSE       NA   245901227
5                 TRUE         0                  FALSE        0  5904956424
6                 TRUE         0                  FALSE       NA 11289176124
  primary_value legacy_estimation_flag is_reported is_aggregate
1     240911158                      4       FALSE         TRUE
2    5905411211                      4       FALSE         TRUE
3   10863483936                      4       FALSE         TRUE
4     245901227                      4       FALSE         TRUE
5    5904956424                      4       FALSE         TRUE
6   11289176124                      4       FALSE         TRUE
# Crear la gráfica
grafica_2 <- ggplot(exportaciones_ca2, aes(x = ref_year, y = primary_value/m_m_usd, color = reporter_desc)) +
  geom_line() +   # 1. Dibuja las líneas
  geom_point() +  # 2. Dibuja los puntos sobre las líneas
  labs(
    title = "Gráfica 2: Exportaciones de Centroamérica hacia el resto del mundo",
    x = "Año",
    y = "Valor en miles de millones de USD",
    color = "País",
    caption = "Fuente: UN Comtrade utilizando API gratuita validada con key + la libreria comtradr + ciclo for para no saturar consulta"
  )
grafica_2

Carga de data usando una solicitud HTTP en R

# Consulta REST, usando el estandar M9.

solicitud_http <- request("https://comtradeapi.un.org/data/v1/get/C/A/HS") |>
  req_headers("Ocp-Apim-Subscription-Key" = secundary_comtrade_key) |> 
  req_url_query(
  reporterCode = "222,320,188,558,84,340",
  partnerCode = "0",
  flowCode = "X",
  period = "2018,2019,2020,2021,2022,2023,2024,2025",
  cmdCode = "TOTAL") |>
  req_verbose() |> 
  req_perform()
-> GET /data/v1/get/C/A/HS?reporterCode=222%2C320%2C188%2C558%2C84%2C340&partnerCode=0&flowCode=X&period=2018%2C2019%2C2020%2C2021%2C2022%2C2023%2C2024%2C2025&cmdCode=TOTAL HTTP/1.1
-> Host: comtradeapi.un.org
-> User-Agent: httr2/1.3.0 r-curl/8.0.0 libcurl/8.14.1
-> Accept: */*
-> Accept-Encoding: deflate, gzip
-> Ocp-Apim-Subscription-Key: 4e16602deffc43279e344f14b62bb1b4
-> 
<- HTTP/1.1 200 OK
<- Transfer-Encoding: chunked
<- Content-Type: application/json; charset=utf-8
<- x-frame-options: deny
<- X-Content-Type-Options: nosniff
<- X-XSS-Protection: 1;mode=block
<- strict-transport-security: max-age=31536000;includeSubDomains
<- content-security-policy: frame-src 'self'
<- x-permitted-cross-domain-policies: none
<- Referrer-Policy: no-referrer-when-downgrade
<- Permissions-Policy: accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()
<- Request-Context: appId=cid-v1:9b6e1d5a-3728-46ff-b743-6d33d23e54a6
<- Date: Fri, 18 Sep 2026 12:10:33 GMT
<- 
#convierte flujo HTTP a Tibble
exportaciones_ca3 <- solicitud_http |> 
  resp_body_string() |> 
  fromJSON() |> 
  (`[[`)("data") |>  
   as_tibble()
head(exportaciones_ca3)
# A tibble: 6 × 47
  typeCode freqCode refPeriodId refYear refMonth period reporterCode reporterISO
  <chr>    <chr>          <int>   <int>    <int> <chr>         <int> <lgl>      
1 C        A           20180101    2018       52 2018             84 NA         
2 C        A           20180101    2018       52 2018             84 NA         
3 C        A           20180101    2018       52 2018             84 NA         
4 C        A           20180101    2018       52 2018             84 NA         
5 C        A           20180101    2018       52 2018             84 NA         
6 C        A           20180101    2018       52 2018             84 NA         
# ℹ 39 more variables: reporterDesc <lgl>, flowCode <chr>, flowDesc <lgl>,
#   partnerCode <int>, partnerISO <lgl>, partnerDesc <lgl>, partner2Code <int>,
#   partner2ISO <lgl>, partner2Desc <lgl>, classificationCode <chr>,
#   classificationSearchCode <chr>, isOriginalClassification <lgl>,
#   cmdCode <chr>, cmdDesc <lgl>, aggrLevel <lgl>, isLeaf <lgl>,
#   customsCode <chr>, customsDesc <lgl>, mosCode <chr>, motCode <int>,
#   motDesc <lgl>, qtyUnitCode <int>, qtyUnitAbbr <lgl>, qty <dbl>, …

library (countrycode)

exportaciones_ca3 <- exportaciones_ca3 |> 
  mutate(
      refYear      = as.numeric(refYear),      
      primaryValue = as.numeric(primaryValue),
      nombre_pais = countrycode(reporterCode, origin = "un", destination = "country.name.es")
    
  )
# Crear la gráfica 
grafica_3 <- ggplot(exportaciones_ca3, aes(x = refYear, y = primaryValue/m_m_usd, color = nombre_pais,group = nombre_pais)) +
  geom_line() +   # 1. Dibuja las líneas
  geom_point() +  # 2. Dibuja los puntos sobre las líneas
  labs(
    title = "Gráfica 3: Exportaciones de Centroamérica hacia el resto del mundo",
    x = "Año",
    y = "Valor en miles de millones de USD",
    color = "País",
    caption = "Fuente: UN Comtrade utilizando consulta HTTP validada con Key y la libreria httr"
  )
grafica_3

API + key

Preguntas para la clase:

¿Qué es el estandar M49?

¿Qué diferencia hay entre usar el paquete comtradr y construir la URL manualmente con httr2?

¿Por qué la API de UN Comtrade nos exige incluir una “Subscription Key” (clave de API) para darnos los datos?

Conclusión.

Aunque el script en R maneja la consulta, el flujo sigue estando completamente condicionado por la infraestructura de la ONU. Cambios imprevistos en la arquitectura de su API (como la migración de endpoints o modificaciones en los límites de la “Subscription Key”) pueden romper el código por completo, lo que exige un mantenimiento constante del script.

Como analistas de datos, no podemos confiar ciegamente en la respuesta del servidor; se requiere un criterio técnico estricto en R para limpiar, transformar y escalar la información antes de que sea apta para la toma de decisiones.

Referencias empleadas

AWS. (2026). What is an API? - Application Programming Interfaces explained. https://aws.amazon.com/what-is/api/
Bonilla Melara, J. I. (2024). Uso de APIs en R para el Acceso a datos económicos: OCDE, FMI, Banco Mundial, UN Comtrade y Eurostat. RPubs. http://rpubs.com
OCDE. (2026). Acerca de. https://www.oecd.org/es/about.html
OECD. (2023). OECD data explorer: Find, understand and use the data you need. https://www.youtube.com/watch?v=ljyDrj-Fi1s.
OECD. (2024a). OECD data via API. https://www.oecd.org/en/data/insights/data-explainers/2024/09/api.html.
OECD. (2024b). API best practices and recommendations. https://www.oecd.org/en/data/insights/data-explainers/2024/11/Api-best-practices-and-recommendations.html.
SDMx org. (2026). SDMx – The standard for Statistical Data and Metadata. https://sdmx.org.
Stack Overflow. (2024, August). Problem with downloading data from OECD using R. https://stackoverflow.com/questions/78913148/problem-with-downloading-data-from-oecd-using-r
Stanford University Libraries. (2026). UN commodity statistics trade database [electronic resource]. SearchWorks Catalog. https://searchworks.stanford.edu/view/5486644
United Nations Shop. (2026). Databases. UN Shop. https://shop.un.org/databases
United Nations Statistics Division. (2026a). Welcome to UN Comtrade. https://uncomtrade.org/docs/welcome-to-un-comtrade/.
United Nations Statistics Division. (2026b). Welcome to UN Comtrade API portal! – Free product tier. UN Comtrade Developer Portal. https://comtradedeveloper.un.org/product#product=free
University of Toronto Libraries. (2026). UN Comtrade. https://mdl.library.utoronto.ca/collections/data-portal/un-comtrade.