Qbox
Documentación

Nivel 1 · Conectado

Publica tus centros

Los datos de cada centro, lo que comprobamos, la revisión y la lista de cada día.

Cada centro se manda entero, con su identificador en tu software. Si ya existe, se pone al día; si no, se da de alta. Puedes repetir un envío las veces que haga falta: con la misma Idempotency-Key, la respuesta es la misma.

1. Manda el centro

HTTP
PUT /connect/v1/facilities/madrid-01
Authorization: Bearer <token>
Idempotency-Key: 5b1d0c3e-8f6a-4c2e-9d1b-7a0e2f4c6b11
Content-Type: application/json

{
  "version": "2026-10-26T08:15:00Z",
  "name": "Trasteros Serrano Salamanca",
  "address": {
    "street": "Calle de Serrano 120",
    "postalCode": "28006",
    "city": "Madrid",
    "province": "Madrid",
    "country": "ES"
  },
  "location": { "lat": 40.4365, "lng": -3.6862 },
  "openingHours": { "kind": "daily", "opens": "07:00", "closes": "22:00" },
  "leadsEmail": "avisos@trasteros-serrano.example.com",
  "pricesIncludeVat": true,
  "policies": { "depositMonths": 1 }
}
CampoTipoObligatorioNotas
versiontextoSíCambia cuando cambia algo de estos datos (vale su updatedAt)
nametextoSíEl nombre comercial: ni una dirección ni solo la ciudad
address{street, postalCode, city, province, country}SíLa ciudad y la provincia, con su nombre entero. country: ES
location{lat, lng}SíEn WGS 84, a menos de 1 km de donde cae su dirección
openingHourshorarioSí{"kind": "always"}, {"kind": "daily", "opens", "closes"} o {"kind": "weekly", "days": {"mon": [{"opens", "closes"}], …}}
leadsEmailcorreoSíPara las solicitudes que la gestora quiera en su correo. Nunca sale en el portal
pricesIncludeVatsí o noSíSi los precios de sus trasteros llevan el IVA
policies{depositMonths, minimumStayMonths}SíLa fianza, en mensualidades (0: sin fianza), y la permanencia, en meses
accessMethodslistaNoapp, pin, qr, key, remote o card
amenitieslistaNocctv, alarm, trolleys, groundFloor, loadingAtDoor, lift, parking o climateControl
description{es, en, fr, de, it, pt}NoAl menos en un idioma: lo que falte lo traduce el portal, y lo dice
openedOnfechaNoCuándo abrió: «Centro nuevo» durante 180 días
opensOnmesNoSi aún no ha abierto: «Abre en marzo de 2027» y «Avísame cuando abra»

2. Mira lo que responde

La respuesta es cómo queda el centro: su status, la dirección de su ficha cuando está publicado y sus warnings, lo que no impide publicarlo pero conviene arreglar.

Respuesta
{
  "id": "madrid-01",
  "status": "in_review",
  "listing": null,
  "reasons": [],
  "message": null,
  "warnings": [
    { "code": "few_photos", "message": "Tiene 0 fotos: con tres o más, la ficha se ve mucho mejor." }
  ],
  "updatedAt": "2026-10-26T08:15:02Z"
}
statusQué quiere decir
pending_linkSe parece a uno que la gestora ya tenía en Qbox. Espera a que ella diga si es el mismo
in_reviewEs nuevo: el equipo lo revisa antes de publicarlo, como los que se dan de alta en Qbox. Te avisa facility.reviewed
publishedEstá en el portal. Desde ahora, cada cambio sale al momento
returnedEl equipo lo ha devuelto, con sus motivos. Corrígelo y vuelve a mandarlo
withdrawnNo está en el portal: lo quitaste, no vino en la lista del día, la gestora retiró el permiso o lo retiró el equipo

3. Si falta algo

No se publica nada a medias: la respuesta es un 422 con cada campo que falla y por qué. Si el centro ya estaba publicado, sigue con sus últimos datos buenos. Todo queda en el registro de tu área durante 30 días.

422
{
  "error": {
    "code": "invalid_facility",
    "message": "El centro no se publica: revisa estos campos.",
    "fields": [
      { "path": "address.postalCode", "code": "invalid_postal_code",
        "message": "«03203» no es un código postal de Madrid." },
      { "path": "name", "code": "name_is_address",
        "message": "El nombre es una dirección o solo la ciudad: pon el nombre comercial del centro." }
    ]
  }
}

Lo que comprobamos

codeQué falla
requiredFalta un campo obligatorio
invalid_formatUn campo no tiene su formato: un correo, una fecha, un color…
invalid_postal_codeEl código postal no es de su país o no es de su provincia
unknown_cityLa ciudad no es un municipio de su provincia
location_farEl punto está a más de 1 km de donde cae su dirección
name_is_addressEl nombre es una dirección o solo la ciudad
invalid_priceUn precio menor que cero o que no es razonable
duplicate_idDos tamaños, trasteros, plantas o fotos con el mismo id
unknown_unit_typeUn trastero con un unitTypeId que no es de sus tamaños
unknown_floorUn trastero con un floorId que no es de su plano
invalid_svgEl plano no pasa la limpieza
unknown_unit_in_planUna forma del plano con un data-unit-id que no es de ningún trastero
invalid_photoLa foto no es JPEG, PNG o WebP, o es demasiado pequeña

Y lo que no impide publicar (warnings): few_photos (menos de tres), no_description y unit_not_in_plan (un trastero sin su forma en el plano).

Si la gestora ya lo tenía en Qbox

Si el centro cae a menos de 150 metros de uno que la gestora ya tiene en Qbox, o en su misma calle y su mismo código postal, queda en pending_link. En «Conecta tu software», ella dice si es el mismo (sigue publicado, ahora con tus datos) o es otro (se revisa como uno nuevo). Te llega el aviso facility.linked.

La lista de cada día

Al menos una vez al día, PUT /facilities con todos los centros de la gestora: el id de cada uno y, si quieres, sus versiones (facility, unitTypes, units, floorPlan y photos).

  • Un centro que no esté en la lista se retira del portal. Vuelve si reaparece.
  • Si mandas las versiones, la respuesta dice qué tenemos atrasado (outdated) para que lo vuelvas a mandar.
PUT /facilities
{
  "facilities": [
    { "id": "madrid-01", "versions": { "facility": "2026-10-26T08:15:00Z", "units": "2026-10-26T09:02:11Z" } },
    { "id": "madrid-02" }
  ]
}

Quitar un centro

DELETE /facilities/{facilityId} lo quita del portal. GET /facilities/{facilityId} dice cómo está en cada momento.

¿Dudas? Escríbenos a team@findqbox.com.