Desarrolladores

API para anunciantes · v1

Conecta tu sistema con Bodegas.com para publicar tu inventario en tiempo real y recibir las reservaciones al instante. Es una API REST con JSON sobre HTTPS.

  • URL base: https://bodegas.com/wp-json/bodegas/v1
  • Autenticación: header Authorization: Bearer <tu_llave>. Genera tu llave en tu portal: Bodegas.com → Integración (API).
  • Formato: Content-Type: application/json, UTF-8. Medidas en metros, precios en pesos mexicanos al mes.
  • Límite: 600 solicitudes por minuto por cuenta.

¿No tienes sistema propio? No necesitas la API: sube tu inventario en Excel desde el portal, o publica un feed JSON (ver abajo) y nosotros lo leemos cada hora.

Crear cuenta y obtener llave Entrar al portal

Probar tu llave

GET /me confirma que tu llave funciona y muestra tu cuenta, tu webhook y tu comisión.

curl https://bodegas.com/wp-json/bodegas/v1/me -H "Authorization: Bearer bdg_live_xxx"
{
  "empresa": {
    "nombre": "Condesa Storage",
    "slug": "condesa-storage"
  },
  "webhook": {
    "url": "https://tusistema.mx/hooks/bodegas",
    "configurado": true
  },
  "comision": {
    "tipo": "meses",
    "valor": 1
  }
}

Integración mínima en 3 pasos

  1. Da de alta cada sucursal con PUT /sucursales/{codigo}. El codigo es tu identificador interno de la sucursal.
  2. Envía el inventario disponible con PUT /sucursales/{codigo}/unidades cada vez que cambie, y al menos una vez al día.
  3. Recibe las reservaciones configurando tu webhook en el portal, y repórtanos cuáles rentaron con POST /reservaciones/{folio}.

Si una sucursal no recibe inventario en 72 horas, sus unidades se ocultan automáticamente para no ofrecer espacios que ya no existen. Vuelven a publicarse con el siguiente envío.

Sucursales

Crear o actualizar una sucursal

PUT /sucursales/{codigo}

{
  "nombre": "Condesa",
  "direccion": "Circuito Interior 169, Col. San Miguel Chapultepec, Miguel Hidalgo, 11850, CDMX",
  "lat": 19.4151307,
  "lng": -99.1804565,
  "telefono": "55 8842 7951",
  "correo": "condesa@tuempresa.mx",
  "horario": "Lunes a viernes de 9 a 18 h, sábados de 9 a 14 h",
  "descripcion": "Acceso vehicular, montacargas y vigilancia 24 h.",
  "imagen": "https://tuempresa.mx/fotos/condesa.jpg"
}

Para crear una sucursal se requieren nombre, direccion, lat y lng. En actualizaciones manda solo lo que cambió. Respuesta 201 al crear, 200 al actualizar.

Consultar

  • GET /sucursales: todas tus sucursales, con estado de sincronización.
  • GET /sucursales/{codigo}: una sucursal.

Inventario

Reemplazar el inventario de una sucursal

PUT /sucursales/{codigo}/unidades

Envía todas las unidades disponibles. Las que no vengan en la lista se marcan como no disponibles (no se borran: si vuelven en un envío posterior, se reactivan). Máximo 5,000 por sucursal.

{
  "unidades": [
    {
      "id": "A-101",
      "codigo": "A-101",
      "tipo": "bodega",
      "ancho": 2,
      "largo": 3,
      "alto": 2.5,
      "piso": 1,
      "precio": 2450,
      "precio_lista": 2800,
      "disponible": true,
      "clima": false,
      "camaras": true,
      "elevador": true,
      "estacionamiento": true,
      "promocion": "Primer mes al 50%"
    }
  ]
}
CampoTipoObligatorioDescripción
idtextosíIdentificador único y estable de la unidad en tu sistema (máx. 64).
codigotextonoNúmero visible (puerta). Si no se envía, se usa id.
tipotextonolocker, bodega, arriba (arriba/abajo), nave o cajon. Por defecto bodega.
ancho, largonúmerosíMetros.
altonúmeronoMetros.
pisoenterono0 = planta baja.
precionúmerosíPrecio mensual que verá el cliente en Bodegas.com, IVA incluido.
precio_listanúmeronoPrecio normal para mostrar el ahorro.
disponiblebooleanonoPor defecto true.
clima, camaras, elevador, escaleras, techado, estacionamiento, cerradura, mudanza, segurobooleanonoCaracterísticas.
promociontextonoMáx. 250 caracteres.

Respuesta:

{
  "aplicadas": 152,
  "desactivadas": 3,
  "errores": []
}

Enviar {"unidades": []} marca todas las unidades de la sucursal como no disponibles (sucursal llena). Si todas las unidades traen error, la respuesta es 422 y no se modifica el inventario actual.

Cambiar una sola unidad

PATCH /sucursales/{codigo}/unidades/{id}: ideal para reflejar al instante que una unidad se rentó o cambió de precio.

{ "disponible": false }
{ "precio": 2300, "promocion": "" }

Consultar

GET /sucursales/{codigo}/unidades

Reservaciones

Cuando un cliente aparta una bodega, la reservación se crea en Bodegas.com con un folio (por ejemplo BD-2609-00123). Te llega por correo y por webhook.

Listar y consultar

  • GET /reservaciones?estado=nueva&desde=2026-09-01
  • GET /reservaciones/{folio}

Reportar el resultado

POST /reservaciones/{folio}

{
  "estado": "rentada",
  "fecha_movein": "2026-10-03"
}

Estados válidos: contactado, rentada, no_rentada y cancelada. Reportar rentada genera la comisión correspondiente, que aparece en tu estado de cuenta mensual. También puedes reportarlo con un clic desde el correo de la reservación o en tu portal.

Ciclo automático: si en 3, 7 y 14 días no hay respuesta, te enviamos un recordatorio. Al sexto día le preguntamos al cliente si rentó. Si el cliente confirma que rentó y no recibimos respuesta tuya en 7 días, la renta se registra con la confirmación del cliente. A los 45 días sin confirmación, la reservación se cierra como "sin confirmar".

Webhooks

Configura en tu portal una URL https. Te enviamos un POST con JSON en cada evento:

  • reservacion.creada
  • reservacion.actualizada
  • ping (botón "Enviar prueba")
{
  "evento": "reservacion.creada",
  "enviado": "2026-09-29T18:20:11+00:00",
  "reservacion": {
    "folio": "BD-2609-00123",
    "estado": "nueva",
    "creada": "2026-09-29T12:20:10-06:00",
    "sucursal": {
      "codigo": "CONDESA",
      "nombre": "Condesa"
    },
    "unidad": {
      "id": "A-101",
      "codigo": "A-101",
      "descripcion": "Mini bodega de 6 m² (2 × 3 m, 2.5 m alto)",
      "m2": 6
    },
    "precio_mensual": 2450,
    "cliente": {
      "nombre": "Ana",
      "apellido": "López",
      "email": "ana@correo.com",
      "telefono": "5512345678"
    },
    "fecha_ingreso": "2026-10-01",
    "mensaje": null,
    "fecha_movein": null,
    "comision": null
  }
}

Valida la firma. Cada envío incluye X-Bodegas-Signature: t=<unix>,v1=<firma>, donde firma = HMAC_SHA256(secreto, "<t>.<cuerpo>") en hexadecimal. El secreto está en tu portal.

// PHP
[$t, $v1] = sscanf($_SERVER['HTTP_X_BODEGAS_SIGNATURE'], 't=%d,v1=%s');
$ok = hash_equals(hash_hmac('sha256', $t . '.' . file_get_contents('php://input'), $secreto), $v1)
      && abs(time() - $t) < 300;

Responde con 2xx en menos de 15 segundos. Si falla, reintentamos hasta 6 veces con espera creciente.

Feed JSON (alternativa sin programar llamadas)

Si prefieres que nosotros leamos tu inventario, publica una URL que regrese el mismo formato de PUT /unidades:

{
  "unidades": [
    {
      "id": "A-101",
      "ancho": 2,
      "largo": 3,
      "precio": 2450,
      "disponible": true
    }
  ]
}

Regístrala en tu portal, en la ficha de la sucursal, con la opción Feed JSON. La leemos cada hora y justo antes de cada reservación.

Errores

CódigoSignificado
401Falta la llave o es inválida.
404La sucursal, unidad o reservación no existe en tu cuenta.
409La reservación ya está incluida en un estado de cuenta.
413 / 422Datos inválidos; el cuerpo explica qué corregir.
429Excediste el límite de solicitudes.

Cuerpo de error: { "code": "bdg_validacion", "message": "…", "data": { "status": 422 } }

Ejemplo completo con curl

curl -X PUT https://bodegas.com/wp-json/bodegas/v1/sucursales/CONDESA/unidades \
  -H "Authorization: Bearer bdg_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"unidades":[{"id":"A-101","ancho":2,"largo":3,"precio":2450}]}'

¿Dudas técnicas? Escríbenos a hola@bodegas.com.