Cómo se construye una integración por API REST, paso a paso

Diagrama de la arquitectura de IANALITICS: la solicitud pasa por autenticación con token JWT, autorización por rol y servidor backend antes de llegar a la base de datos MySQL

En resumen

  • Una API REST organiza los datos de un sistema en recursos con dirección web propia, que se trabajan con métodos HTTP (GET, POST, PATCH, DELETE), casi siempre en JSON.
  • Antes del código se define el flujo: qué evento dispara el envío, qué datos viajan, quién manda en cada dato y con qué volumen.
  • La autenticación se resuelve con API key, OAuth 2.0 o tokens JWT; las credenciales nunca van en el código y llevan solo los permisos necesarios.
  • Una integración confiable mapea bien los campos, busca antes de crear para no duplicar, reintenta solo los errores temporales y avisa cuando algo falla.

En el artículo sobre integraciones contamos qué conecta IANALITICS y para qué le sirve a una empresa. Este es la otra mitad: cómo se hace. Está pensado para quien va a estar del lado técnico del proyecto, y también para quien quiere entender qué le están cotizando cuando le hablan de una integración a la medida.

Nuestras integraciones se construyen sobre API REST y se programan en Python. Los pasos de abajo sirven para casi cualquier sistema: un CRM, un ERP, una hoja de cálculo de Google o un sistema de facturación.

Qué es una API REST, en concreto

Una API REST organiza la información de un sistema en recursos, y cada recurso tiene su propia dirección web: los clientes, las facturas, los productos. Para trabajar con ellos se usan los mismos métodos del protocolo HTTP que usa tu navegador, y los datos viajan casi siempre en formato JSON.

Método Qué hace Ejemplo
GET Leer GET /clientes/4821 trae ese cliente
POST Crear POST /clientes crea uno nuevo
PUT o PATCH Actualizar PATCH /clientes/4821 cambia solo los campos que envías
DELETE Eliminar DELETE /clientes/4821

Cada respuesta trae un código que dice cómo salió todo. Vale la pena conocerlos, porque la integración decide qué hacer según el código que recibe:

Así se ve una petición real

Crear un contacto en un CRM, con datos de ejemplo:

POST https://api.ejemplo-crm.com/v1/contacts
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Content-Type: application/json

{
  "name": "Distribuidora Andina SAS",
  "tax_id": "900123456-7",
  "email": "compras@ejemplo.com",
  "city": "Medellín"
}

Y lo que responde el CRM si todo salió bien:

HTTP/1.1 201 Created

{
  "id": "c_48213",
  "name": "Distribuidora Andina SAS",
  "created_at": "2026-09-13T10:42:05-05:00"
}

Eso es todo lo que pasa por debajo. Una integración es, en el fondo, un programa que arma peticiones como esa en el momento correcto y sabe qué hacer con la respuesta.

Paso 1. Definir el flujo antes de escribir código

La mitad de los problemas de una integración se resuelven o se crean aquí. Hay que dejar por escrito:

Paso 2. Leer la documentación de la otra API

Aquí se descubre qué tan sencilla va a ser la integración. Lo primero que hay que buscar:

Si el sistema no tiene API, todavía hay caminos, como leer su base de datos (SQL Server, MySQL) o intercambiar archivos. Funcionan, pero son más frágiles, y eso hay que decirlo desde el principio.

Paso 3. Resolver la autenticación

Ninguna API seria responde sin saber quién pregunta. Las formas más comunes son tres:

Sea cual sea el método, dos reglas no se negocian. Las credenciales van en variables de entorno o en un gestor de secretos, nunca escritas en el código ni guardadas en un repositorio. Y se piden solo los permisos necesarios: si la integración solo lee facturas, su credencial no debería poder borrar clientes.

Paso 4. Mapear los campos

Dos sistemas casi nunca le dicen igual a la misma cosa. Un mapeo típico entre la ficha de cliente de IANALITICS y un CRM se ve así:

IANALITICS CRM Ojo con
Nombre del cliente name Razón social o nombre comercial: hay que elegir uno
Identificación tax_id El NIT con o sin dígito de verificación, con o sin guion
Correo electrónico email Si el CRM guarda varios, cuál es el de facturación
Teléfono phone Indicativo +57 y solo dígitos
Dirección address Si la ciudad va en el mismo campo o aparte

Los detalles pequeños son los que rompen: fechas en formatos distintos, valores en pesos con o sin decimales, zonas horarias. Una venta registrada a las 11 de la noche en Colombia ya es del día siguiente en hora UTC, y si nadie lo tiene en cuenta aparece en el informe del día equivocado. Por eso IANALITICS pide configurar la zona horaria de la empresa desde los ajustes iniciales.

Paso 5. Escribir la integración

Un ejemplo simplificado en Python que envía un cliente a un CRM. Antes de crear, busca si ya existe por NIT; si existe, lo actualiza. Así, correr la sincronización dos veces no duplica nada.

import os
import time
import requests

CRM_URL = "https://api.ejemplo-crm.com/v1"
TOKEN = os.environ["CRM_TOKEN"]  # la credencial nunca va escrita en el código


def llamar(metodo, ruta, **kwargs):
    for intento in range(4):
        r = requests.request(
            metodo,
            f"{CRM_URL}{ruta}",
            headers={"Authorization": f"Bearer {TOKEN}"},
            timeout=10,
            **kwargs,
        )
        if r.status_code == 429 or r.status_code >= 500:
            time.sleep(2 ** intento)  # espera 1, 2, 4 y 8 segundos
            continue
        r.raise_for_status()  # un 400 o un 401 no se reintenta: se reporta
        return r.json()
    raise RuntimeError(f"{metodo} {ruta} falló después de 4 intentos")


def sincronizar_cliente(cliente):
    datos = {
        "name": cliente["nombre"],
        "tax_id": cliente["nit"],
        "email": cliente["correo"],
    }
    existentes = llamar("GET", "/contacts", params={"tax_id": cliente["nit"]})
    if existentes["data"]:
        contacto_id = existentes["data"][0]["id"]
        llamar("PATCH", f"/contacts/{contacto_id}", json=datos)
    else:
        llamar("POST", "/contacts", json=datos)

Tres detalles de ese código importan más que el resto:

Paso 6. Prepararse para cuando falle

Va a fallar en algún momento. La pregunta es si alguien se entera a tiempo. Lo mínimo:

Un ejemplo de lo último: en la facturación electrónica de IANALITICS cada documento queda marcado como Emitida o Error en el mismo listado de facturas. El error se ve ahí, y no el día que el cliente llama a reclamar.

Paso 7. Probar y salir a producción de a poco

Primero en el ambiente de pruebas y con casos incómodos, no solo con el cliente perfecto: uno sin correo, un NIT con guion, un producto con tildes y eñes, una venta anulada. Con facturación electrónica esto ni siquiera es opcional, porque la DIAN exige superar un set de pruebas antes de dejar emitir.

Después, salir a producción con poco volumen o con un solo tipo de documento, comparar durante unos días contra el proceso manual y, cuando los números cuadren, ampliar.

Paso 8. Mantenerla viva

Una integración no se termina el día que sale. Las APIs publican versiones nuevas y anuncian cuándo apagan las viejas, los tokens vencen, y el negocio empieza a usar un campo que antes no existía. Ese mantenimiento hay que presupuestarlo desde el principio. Desconfía de una cotización de integración que no lo mencione.

Consultar cada cierto tiempo o esperar un aviso

Hay dos formas de enterarse de que algo cambió en el otro sistema. Consultar a intervalos, lo que en inglés llaman polling, es simple y funciona con cualquier API, pero gasta peticiones aunque no haya novedades y siempre llega con algo de retraso.

Los webhooks invierten la dirección: el otro sistema le avisa a una dirección web tuya cuando pasa algo. Son inmediatos, pero esa dirección queda expuesta a internet, así que hay que verificar la firma de cada aviso y estar preparado para recibir el mismo aviso dos veces.

Cómo encaja todo esto en IANALITICS

Una integración entra a IANALITICS por el mismo camino que un usuario, como muestra el diagrama de arquitectura: se autentica y recibe un token JWT, el sistema verifica que su rol tenga permiso para esa operación, y solo entonces el servidor consulta o actualiza la base de datos MySQL. Cada paso queda en el registro de eventos.

Cuando lo que se necesita es análisis y no intercambio de datos, por ejemplo alimentar tableros en Power BI, la integración publica un endpoint REST con los datos del tablero y Power BI lo lee con su conector web. Es como trabajamos el proyecto de Migtra. Si el cliente prefiere los datos crudos, también se puede dar acceso directo a la base de datos, para consulta o edición, bajo un acuerdo de confidencialidad y protección de datos; para análisis, lo recomendable es que sea de solo lectura.

El plan Performance incluye hasta tres integraciones API a la medida. Lo que incluye cada plan está en la página de precios.

¿Tienes una integración en mente?

Cuéntanos qué sistemas usas y qué dato estás cansado de digitar dos veces. Revisamos la documentación de su API y te decimos qué tan viable es.

Agendar una conversación O crea tu cuenta gratis

¿Te sirvió? Cada semana compartimos guías como esta en LinkedIn. Sigue a IANALITICS en LinkedIn →

Compártelo: WhatsApp LinkedIn Facebook

También nos encuentras en Facebook e Instagram.