4dim / Notas
Por qué Dropi te bloquea por IP
Su API responde 401 con una sola pista dentro: la IP que te vio. No dice si tu llave está mal. Qué gatillo falló, y cómo se pide el acceso.
El 401 que te devuelve tu propia IP
Pides el catálogo a la API de integraciones de Dropi y te contesta esto, entero:
{"isSuccess":false,"message":"Access denied","status":401,"ip":"190.158.29.x"}
Ese campo ip es tu IP de salida: la dirección desde la que Dropi vio llegar la petición. Y no aparece en su documentación. En las 17 páginas del documento oficial no hay ni una sola vez «Access denied» ni ningún campo ip — cero ocurrencias de cada una, contadas sobre el texto completo el 13-09-2026.
Lo incómodo: ese mismo cuerpo, byte a byte, lo devuelven cuatro fallos distintos.
| Lo que se envía | Lo que responde |
|---|---|
| Ninguna cabecera | 401 · Access denied + ip |
| Cabecera vacía | 401 · Access denied + ip |
Mal escrita: dropi-integracion-key | 401 · Access denied + ip |
| Correcta, token inválido | 401 · Access denied + ip |
Las cuatro respuestas son idénticas salvo el valor de ip. Medido con curl contra api.dropi.co/integrations/categories el 13-09-2026 y repetido a las 19:40 GMT de ese día. Añadir además una cabecera Authorization inválida tampoco cambia nada.
Lo que se deduce de cada fila es lo mismo: nada. No puedes distinguir «mi llave está mal» de «mi IP no está autorizada», y quien te diga «revisa tu token» está adivinando. Compruébalo en diez segundos: curl -H "dropi-integration-key: loquesea" https://api.dropi.co/integrations/categories.
Qué pide Dropi, con sus palabras
El acceso no se autogenera en un panel: se pide por correo. Lo dice el documento oficial, un PDF de 17 páginas titulado «INTEGRATIONS: CORE DROPI» subido a Scribd por un empleado. Cita localizada en esa página el 13-09-2026:
«[…] se debe hacer una solicitud al equipo directivo de TI, relacionando el Domino de la plataforma a integrar, la IP desde donde serán consumidos los servicios, los datos personales […] y deberá informarse la proyección de uso. […] Si aplica para integración con nuestra plataforma, su domino e IP serán anexados a nuestra lista de plataformas habilitadas.»
| Lo que hay que mandar | De dónde sale |
|---|---|
| Dominio de la plataforma | El tuyo, en producción |
| IP de salida | La del servidor que llamará. Fija, o esto no funciona |
| Nombre, documento y correo del titular | Para abrir la cuenta de pruebas |
| Proyección de uso | Estimación tuya de volumen |
Identificador (shop_type) | No lo pones tú: lo entrega TI |
El correo es soporteti@dropi.co, y no sale de un blog: lo declara el propio backend en info.contact.email del OpenAPI que sirve en api.dropi.co/docs (descargado el 13-09-2026).
Dos cosas que conviene leer dos veces. El «Si aplica»: el alta es discrecional. Y la prohibición literal — pedir a los usuarios de Dropi sus credenciales desde una plataforma externa «incurrirá en el bloqueo inmediato y definitivo del acceso al API». Eso cierra la salida que a alguien se le ocurrirá: raspar el panel con las credenciales del cliente es la forma documentada de quedarse fuera.
Por qué filtran por IP, y qué te obliga a decidir
La misma petición, con la misma cabecera inválida, desde dos máquinas distintas con cuatro minutos de diferencia:
| Origen | IP que Dropi devuelve | Medición |
|---|---|---|
| Portátil, Medellín | 190.158.29.x | 13-09-2026, 15:18 GMT |
| VPS de producción | 66.94.108.x | 13-09-2026, 15:22 GMT |
| El mismo portátil, 16 días antes | 190.158.28.x | 28-08-2026 |
Enmascaramos el último octeto a propósito: lo que importa es que son tres direcciones distintas. Dos redes dan dos IPs, y la misma casa con el mismo proveedor cambió de IP en dieciséis días. La medición del 28 de agosto es nuestra, está registrada por escrito en la especificación del proyecto y no es enlazable por un tercero: va citada como medición de la casa, no como dato público.
El 401 de Dropi no te dice si tu llave está mal: te dice desde qué IP la mandaste. Ese campo es todo el diagnóstico que vas a tener, y por eso la decisión que importa no es de código, es de dónde despliegas.
De ahí sale lo único accionable de esta nota. Si despliegas en una plataforma con IP de salida variable —serverless, por ejemplo—, la integración no falla: falla a veces. Unas peticiones salen por una IP autorizada y otras no, y el error es el mismo Access denied en los dos casos. Es la avería más cara que existe: intermitente y sin mensaje que la explique.
Las tres salidas son de infraestructura, no de código: servidor con IP fija, proxy de salida fijo por delante, o IP dedicada contratada al proveedor. Se elige antes de escribir la primera línea de cliente.
La clave, y los planos que se confunden
La cabecera se llama dropi-integration-key, con t. Hay que decirlo porque la documentación se contradice dentro del mismo PDF: escribe dropi-integracion-key —con c— dos veces y la otra forma una sola. Lo zanja el plugin oficial para WooCommerce, «Dropify» (wc-dropi-integration 4.7.3, del 16-07-2026): siete ocurrencias con t y ninguna con c, contadas sobre el ZIP descargado el 13-09-2026.
Cómo se genera esa clave es lo que dice el documento, no algo que hayamos ejecutado: no tenemos cuenta habilitada. Según el PDF, POST /login con white_brand_id devuelve un token que «es temporal y tiene una duración de 24 horas»; con ese Bearer se hace POST /shops/store y la respuesta trae el definitivo, que «es permanente, no tiene vencimiento». Tampoco se puede corroborar leyendo software de Dropi: el plugin 4.7.3 no implementa ese flujo — cero ocurrencias de shops/store, shop_type y white_brand_id en su código.
Lo que sí está medido son los dos mecanismos que conviven. La cabecera gobierna /integrations/categories y /integrations/department; el Bearer JWT gobierna /integrations/shops/store y todo /api/*.
| Mecanismo | Sin credencial | Credencial inválida |
|---|---|---|
dropi-integration-key | Access denied + ip | Access denied + ip |
| Bearer JWT | The token could not be parsed from the request | Token is Invalid |
Los cuatro casos devuelven HTTP 401. Y hay una trampa que cualquiera cometería leyendo los errores por encima: el mensaje no distingue la ruta. /integrations/shops/store y /api/* devuelven exactamente los mismos dos textos. Lo que cambia el mensaje es si el token falta o si es inválido, no en qué plano estás. Medido cruzando dos rutas por dos estados de credencial el 13-09-2026.
Y lo obvio, que se escribe igual: la clave es de servidor y nunca toca el navegador.
El mapa de la API, medido hoy
Una API cerrada se puede cartografiar sin credenciales, y el método sirve con cualquier backend de Laravel. 401: la ruta existe y está tras el guardia. 404: no existe. 405: existe con otro verbo, y el mensaje te dice cuál («The GET method is not supported for this route. Supported methods: POST.»). Así se averigua que /integrations/department es singular: en plural da 404.
El detalle que lo hace funcionar: el 405 llega sin enviar ninguna credencial. El enrutador resuelve la existencia de la ruta antes de que actúe el guardia de IP. Todo el sondeo se hizo con credenciales inválidas, sin acceder a dato alguno.
Aplicado a los dominios por país. Dropi anuncia 22 países en su portada (HTML leído el 13-09-2026) y su plugin solo trae dominio de API para diez. Todos los hosts se llaman api.dropi. más un sufijo, y todos los que contestan contestan el mismo Access denied. Respuestas a GET /integrations/categories el 13-09-2026 a las 19:40 GMT, desde una red de Medellín:
Sufijo de api.dropi. | Respuesta el 13-09-2026 | Nota |
|---|---|---|
co pa mx ec cl pe com.py ar cr | 401 | Los nueve del plugin que responden |
com.es | Sin respuesta a los 15 s | Está en el plugin. No responde desde Colombia: solo se midió desde dos redes colombianas |
ro | 401 | Vivo y no figura en el plugin |
com.ve | 401 | Vivo y no figura en el plugin |
gt | 401 | Tampoco está en el plugin. Su certificado estaba caducado por la mañana; a las 19:40 GMT ya renovado, válido hasta el29-03-2027 |
hu | 404 de openresty | No es la API: sirve un certificado ajeno (CN=*.*, WebSupport) caducado en 2024 |
pt pl si sk hr gr bg cz | No resuelven | NXDOMAIN: el nombre no existe |
La fila de Guatemala es el mejor argumento contra fiarse de una tabla como esta, la nuestra incluida: entre la primera medición del día y la segunda, Dropi renovó el certificado. Es una foto de un día.
Cierre incómodo, comprobado el 13-09-2026: no hay portal de desarrolladores en ningún dominio de Dropi —docs., developers. y ayuda.dropi.co dan NXDOMAIN— y su página pública de integraciones es promocional: no contiene ni una sola vez la palabra «API». La documentación técnica es un PDF en Scribd.
Qué hacer mientras esperas
La tienda entera se construye sin Dropi. El catálogo entra por un adaptador con dos modos —semilla y API— que conmuta una variable de entorno: el día del alta se cambia la variable, no el código. Y con menos de diez pedidos al día, transcribir la orden a mano en el panel sale más barato que integrar.
| Plataforma | Documentación de API, comprobada el 13-09-2026 |
|---|---|
| Dropi | PDF en Scribd, no en dominio propio. La API está viva; el enlace a veces devuelve un muro anti-bot |
| Rocketfy | GitBook público y legible, que dice «Last updated 5 years ago». api.rocketfy.co da NXDOMAIN en 1.1.1.1, 8.8.8.8 y 9.9.9.9 |
| Mastershop, Triidy, Venndelo | Sitio vivo, y no la encontramos. «No la encontramos» no es «no existe» |
Un aviso operativo que no sale en ningún tutorial. El ambiente de pruebas existe —test-api.dropi.co devuelve el mismo 401— pero la documentación dice que «test no está integrado con el sistema de transportadoras»: no genera guía real, solo «una simulación de proceso» agendada con Soporte. Traducido: tu primer envío de verdad ocurre en producción. Mándatelo a tu propia dirección.
Lo que no sabemos
Va en apartado propio, no en nota al pie, porque es la mitad del valor:
- Cuánto tarda el alta. No hay plazo publicado. La pedimos y seguimos sin acceso: una muestra de uno, sin aprobar, no es un plazo.
- Si el 401 lo dispara la IP o el token. Es indistinguible. Ni siquiera consta que existan dos gatillos: consta que la documentación describe una lista blanca de IP y que el error devuelve la IP. Lo demás es inferencia nuestra.
- Si esa IP es la de origen o la que ve el balanceador. En nuestras dos máquinas coincide con la que reporta
api.ipify.org, pero no lo hemos probado tras un proxy. - Si la lista blanca es por IP sola o por IP más dominio. El documento dice que anexan «su domino e IP», y una llamada entre servidores no manda
Origin. Tampoco hay límites de tasa publicados. - Qué comisión cobra Dropi y en cuántos días liquida. Circulan cifras en blogs; no están verificadas contra ningún documento de Dropi ni contra un extracto, así que no van aquí.
- Qué parte del comercio electrónico colombiano es contra entrega. Nadie lo publica por separado: PCMI lo mete en un cajón de «Otros» del 2 % con las tarjetas de regalo —y advierte que analiza «datos de plataformas de pagos», o sea lo que observa, no el mercado; sus datos son de 2024— y la CCCE lo mete dentro del efectivo y mide a sus afiliados. El dropshipping contra entrega es estadísticamente invisible en Colombia, y eso también es un dato.
- Cuántas tiendas usan el plugin oficial. WordPress.org devuelve
active_installs: nullpara Dropify. Solo hay 39.986 descargas acumuladas (consultado el 13-09-2026), que no son instalaciones.
Esta nota sale de nuestro trabajo en Software a medida.