{
  "openapi": "3.1.0",
  "info": {
    "title": "Cityflow Fleet OS API",
    "version": "1.0.0",
    "summary": "API RESTful de Cityflow Fleet OS: operación de flotas, reservas y tablas.",
    "description": "Contrato público de la API de Cityflow Fleet OS.\n\n- Todas las operaciones son `POST` con cuerpo JSON.\n- Todas exigen `Authorization: Bearer <API_KEY>`; la clave se entrega al contratar el software. Sin ella la plataforma responde `401` y no expone dato alguno.\n- Las operaciones marcadas con `x-cityflow-implementation: mock` devuelven hoy payloads estáticos con el contrato definitivo (`meta.mock_data: true`), pensados para que un integrador pueda desarrollar contra ellos antes de la conexión real.\n",
    "contact": {
      "name": "Cityflow",
      "url": "https://cityflow.app/software/api",
      "email": "hola@cityflow.app"
    },
    "license": {
      "name": "Propietaria · uso sujeto al contrato de licencia de Cityflow"
    }
  },
  "servers": [
    {
      "url": "https://pruebas.cityflow.app/api/v1",
      "description": "Sandbox (mock data) — clave cf_test_"
    },
    {
      "url": "https://{tu-instalacion}/api/v1",
      "description": "Producción — el dominio de tu instalación de Fleet OS, clave cf_live_",
      "variables": {
        "tu-instalacion": {
          "default": "pruebas.cityflow.app"
        }
      }
    }
  ],
  "x-cityflow-target-base": "/api/v1",
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "Public Sharing — Micromovilidad urbana",
      "description": "Operación pública de flotas compartidas: zonas operativas, geofencing, tarifas por minuto y telemetría de vehículos.",
      "x-cityflow-section": 1,
      "x-cityflow-scope": "public-sharing",
      "x-i18n": {
        "en": {
          "name": "Public Sharing — Urban micromobility",
          "description": "Public shared-fleet operations: operating zones, geofencing, per-minute fares and vehicle telemetry."
        }
      }
    },
    {
      "name": "Corporate Sharing — Flotas privadas corporativas",
      "description": "Flotas privadas para empresas: registro con validación de dominio corporativo, reservas en campus y permisos por departamento.",
      "x-cityflow-section": 2,
      "x-cityflow-scope": "corporate-sharing",
      "x-i18n": {
        "en": {
          "name": "Corporate Sharing — Private corporate fleets",
          "description": "Private fleets for companies: registration with corporate domain validation, campus reservations and per-department permissions."
        }
      }
    },
    {
      "name": "Rental & Tourist — Alquileres y turismo",
      "description": "Reservas anticipadas, pases turísticos por día/semana y ciclo completo de check-in / check-out.",
      "x-cityflow-section": 3,
      "x-cityflow-scope": "rental-tourist",
      "x-i18n": {
        "en": {
          "name": "Rental & Tourist — Rentals and tourism",
          "description": "Advance bookings, day/week tourist passes and the full check-in / check-out cycle."
        }
      }
    },
    {
      "name": "Franchises & Multi-property — Multiciudad y franquicias",
      "description": "Panel Master de supervisión centralizada y métricas segregadas por franquicia o propiedad.",
      "x-cityflow-section": 5,
      "x-cityflow-scope": "franchises",
      "x-i18n": {
        "en": {
          "name": "Franchises & Multi-property — Multi-city and franchises",
          "description": "Master panel for centralized supervision and metrics segmented by franchise or property."
        }
      }
    },
    {
      "name": "Gestión interna",
      "description": "Operaciones de administración de la plataforma: alta de bicicletas y hoteles, precios por hotel y estados de flota.",
      "x-cityflow-section": 6,
      "x-cityflow-scope": "internal",
      "x-i18n": {
        "en": {
          "name": "Internal management",
          "description": "Platform administration operations: bike and hotel registration, per-hotel pricing and fleet statuses."
        }
      }
    },
    {
      "name": "API de tablas — modificación campo a campo",
      "description": "Cada tabla de la plataforma tiene su endpoint `update_*`. Todos funcionan igual:",
      "x-cityflow-section": 7,
      "x-cityflow-scope": "tables",
      "x-i18n": {
        "en": {
          "name": "Table API — field-by-field updates",
          "description": "Every platform table has its own `update_*` endpoint. They all work the same way:"
        }
      }
    }
  ],
  "paths": {
    "/calculate_trip_fare": {
      "post": {
        "tags": [
          "Public Sharing — Micromovilidad urbana"
        ],
        "operationId": "calculateTripFare",
        "summary": "Calcula la tarifa de un trayecto según tipo de vehículo y duración en minutos",
        "description": "Calcula la tarifa de un trayecto según tipo de vehículo y duración en minutos.",
        "x-i18n": {
          "en": {
            "summary": "Calculates a trip fare based on vehicle type and duration in minutes",
            "description": "Calculates a trip fare based on vehicle type and duration in minutes."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "public-sharing",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "vehicle_type": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "duration_minutes": {
                    "type": "number",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number"
                      }
                    }
                  },
                  "city_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "vehicle_type",
                  "duration_minutes"
                ]
              },
              "example": {
                "vehicle_type": "<valor>",
                "duration_minutes": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "vehicle_type": "e-bike",
                    "duration_minutes": 32,
                    "currency": "EUR",
                    "pricing": {
                      "unlock_fee": 1.0,
                      "price_per_minute": 0.25,
                      "minutes_billed": 32,
                      "subtotal": 9.0,
                      "vat_rate": 0.21,
                      "vat_amount": 1.89,
                      "total": 10.89
                    },
                    "applied_tariff": {
                      "tariff_id": "TARIFF-STD-001",
                      "name": "Tarifa estándar por minuto"
                    }
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'vehicle_type' es obligatorio.",
                    "parameter": "vehicle_type"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/get_operating_zones": {
      "post": {
        "tags": [
          "Public Sharing — Micromovilidad urbana"
        ],
        "operationId": "getOperatingZones",
        "summary": "Devuelve las zonas operativas y reglas de geofencing de una ciudad",
        "description": "Devuelve las zonas operativas y reglas de geofencing de una ciudad.",
        "x-i18n": {
          "en": {
            "summary": "Returns a city's operating zones and geofencing rules",
            "description": "Returns a city's operating zones and geofencing rules."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "public-sharing",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "city_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "zone_type": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "city_id"
                ]
              },
              "example": {
                "city_id": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "city_id": "CITY-DEMO-001",
                    "zones": [
                      {
                        "zone_id": "ZONE-001",
                        "name": "Centro Urbano",
                        "zone_type": "operating_area",
                        "geofence": {
                          "type": "Polygon",
                          "coordinates": [
                            [
                              [
                                -3.7038,
                                40.4168
                              ],
                              [
                                -3.69,
                                40.42
                              ],
                              [
                                -3.695,
                                40.41
                              ],
                              [
                                -3.7038,
                                40.4168
                              ]
                            ]
                          ]
                        },
                        "speed_limit_kmh": 25,
                        "parking_allowed": true
                      },
                      {
                        "zone_id": "ZONE-002",
                        "name": "Zona Peatonal",
                        "zone_type": "no_ride_zone",
                        "geofence": {
                          "type": "Polygon",
                          "coordinates": [
                            [
                              [
                                -3.708,
                                40.415
                              ],
                              [
                                -3.706,
                                40.416
                              ],
                              [
                                -3.707,
                                40.414
                              ],
                              [
                                -3.708,
                                40.415
                              ]
                            ]
                          ]
                        },
                        "speed_limit_kmh": 0,
                        "parking_allowed": false
                      }
                    ]
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'city_id' es obligatorio.",
                    "parameter": "city_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/get_vehicles_status": {
      "post": {
        "tags": [
          "Public Sharing — Micromovilidad urbana"
        ],
        "operationId": "getVehiclesStatus",
        "summary": "Estado en tiempo real de la flota: disponibilidad, batería y ubicación GPS",
        "description": "Estado en tiempo real de la flota: disponibilidad, batería y ubicación GPS.",
        "x-i18n": {
          "en": {
            "summary": "Real-time fleet status: availability, battery and GPS location",
            "description": "Real-time fleet status: availability, battery and GPS location."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "public-sharing",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "city_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "status_filter": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "city_id"
                ]
              },
              "example": {
                "city_id": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "city_id": "CITY-DEMO-001",
                    "total_vehicles": 3,
                    "vehicles": [
                      {
                        "vehicle_id": "BIKE-0001",
                        "model": "CityFlow E-Bike V3",
                        "status": "available",
                        "battery_pct": 87,
                        "location": {
                          "lat": 40.4168,
                          "lng": -3.7038
                        },
                        "last_update": "2026-07-24T10:15:00Z"
                      },
                      {
                        "vehicle_id": "BIKE-0002",
                        "model": "CityFlow E-Bike V3",
                        "status": "in_use",
                        "battery_pct": 54,
                        "location": {
                          "lat": 40.4201,
                          "lng": -3.6921
                        },
                        "last_update": "2026-07-24T10:14:30Z"
                      },
                      {
                        "vehicle_id": "BIKE-0003",
                        "model": "CityFlow Scooter S2",
                        "status": "maintenance",
                        "battery_pct": 12,
                        "location": {
                          "lat": 40.411,
                          "lng": -3.7005
                        },
                        "last_update": "2026-07-24T09:58:12Z"
                      }
                    ]
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'city_id' es obligatorio.",
                    "parameter": "city_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/create_campus_reservation": {
      "post": {
        "tags": [
          "Corporate Sharing — Flotas privadas corporativas"
        ],
        "operationId": "createCampusReservation",
        "summary": "Crea una reserva de vehículo dentro de un campus corporativo",
        "description": "Crea una reserva de vehículo dentro de un campus corporativo.",
        "x-i18n": {
          "en": {
            "summary": "Creates a vehicle reservation inside a corporate campus",
            "description": "Creates a vehicle reservation inside a corporate campus."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "corporate-sharing",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "employee_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "campus_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "vehicle_type": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "start_time": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "employee_id",
                  "campus_id"
                ]
              },
              "example": {
                "employee_id": "<valor>",
                "campus_id": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "reservation_id": "CORP-RES-2026-0788",
                    "employee_id": "EMP-00123",
                    "campus_id": "CAMPUS-NORTE-01",
                    "vehicle": {
                      "vehicle_id": "BIKE-0007",
                      "type": "e-bike",
                      "dock": "DOCK-A-03"
                    },
                    "start_time": "2026-07-24T12:00:00Z",
                    "expires_at": "2026-07-24T12:15:00Z",
                    "reservation_status": "confirmed"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'employee_id' es obligatorio.",
                    "parameter": "employee_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/register_corporate_user": {
      "post": {
        "tags": [
          "Corporate Sharing — Flotas privadas corporativas"
        ],
        "operationId": "registerCorporateUser",
        "summary": "Registra un usuario corporativo validando que el email pertenezca al dominio de la empresa (@empresa",
        "description": "Registra un usuario corporativo validando que el email pertenezca al dominio de la empresa (@empresa.com).",
        "x-i18n": {
          "en": {
            "summary": "Registers a corporate user, validating that the email belongs to the company domain (@company",
            "description": "Registers a corporate user, validating that the email belongs to the company domain (@company.com)."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "corporate-sharing",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "email": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "company_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "full_name": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "department": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "email",
                  "company_id"
                ]
              },
              "example": {
                "email": "<valor>",
                "company_id": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "user_id": "CORP-USR-00421",
                    "email": "ana.garcia@empresa.com",
                    "company_id": "COMPANY-DEMO-001",
                    "domain_validation": {
                      "required_domain": "@empresa.com",
                      "domain_valid": true
                    },
                    "account_status": "pending_email_confirmation",
                    "created_at": "2026-07-24T10:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'email' es obligatorio.",
                    "parameter": "email"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/set_employee_permissions": {
      "post": {
        "tags": [
          "Corporate Sharing — Flotas privadas corporativas"
        ],
        "operationId": "setEmployeePermissions",
        "summary": "Asigna permisos de uso de flota por departamento o perfil del empleado",
        "description": "Asigna permisos de uso de flota por departamento o perfil del empleado.",
        "x-i18n": {
          "en": {
            "summary": "Assigns fleet usage permissions by department or employee profile",
            "description": "Assigns fleet usage permissions by department or employee profile."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "corporate-sharing",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "employee_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "department": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "profile": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "employee_id"
                ]
              },
              "example": {
                "employee_id": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "employee_id": "EMP-00123",
                    "department": "Logística",
                    "profile": "field_operations",
                    "permissions": {
                      "can_reserve": true,
                      "max_daily_minutes": 120,
                      "allowed_vehicle_types": [
                        "e-bike",
                        "scooter"
                      ],
                      "allowed_campuses": [
                        "CAMPUS-NORTE-01",
                        "CAMPUS-SUR-02"
                      ],
                      "weekend_access": false
                    },
                    "updated_at": "2026-07-24T10:05:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'employee_id' es obligatorio.",
                    "parameter": "employee_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/cancel_booking": {
      "post": {
        "tags": [
          "Rental & Tourist — Alquileres y turismo"
        ],
        "operationId": "cancelBooking",
        "summary": "Cancela una reserva anticipada",
        "description": "Cancela una reserva anticipada.",
        "x-i18n": {
          "en": {
            "summary": "Cancels an advance booking",
            "description": "Cancels an advance booking."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "rental-tourist",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "booking_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "reason": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "booking_id"
                ]
              },
              "example": {
                "booking_id": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "booking_id": "BOOK-2026-10432",
                    "booking_status": "cancelled",
                    "cancelled_at": "2026-07-24T10:10:00Z",
                    "refund": {
                      "eligible": true,
                      "amount": 45.0,
                      "currency": "EUR",
                      "estimated_days": 5
                    }
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'booking_id' es obligatorio.",
                    "parameter": "booking_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/create_advance_booking": {
      "post": {
        "tags": [
          "Rental & Tourist — Alquileres y turismo"
        ],
        "operationId": "createAdvanceBooking",
        "summary": "Crea una reserva anticipada de alquiler (corta o larga duración)",
        "description": "Crea una reserva anticipada de alquiler (corta o larga duración).",
        "x-i18n": {
          "en": {
            "summary": "Creates an advance rental booking (short or long term)",
            "description": "Creates an advance rental booking (short or long term)."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "rental-tourist",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "customer_email": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "property_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "start_date": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "end_date": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "bike_quantity": {
                    "type": "number",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number"
                      }
                    }
                  }
                },
                "required": [
                  "customer_email",
                  "property_id",
                  "start_date"
                ]
              },
              "example": {
                "customer_email": "<valor>",
                "property_id": "<valor>",
                "start_date": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "booking_id": "BOOK-2026-10432",
                    "customer_email": "cliente@correo.com",
                    "property_id": "HOTEL-DEMO-001",
                    "start_date": "2026-08-01",
                    "end_date": "2026-08-03",
                    "bike_quantity": 2,
                    "booking_status": "confirmed",
                    "total_price": {
                      "amount": 45.0,
                      "currency": "EUR"
                    },
                    "cancellation_policy": "free_until_24h_before"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'customer_email' es obligatorio.",
                    "parameter": "customer_email"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/get_booking": {
      "post": {
        "tags": [
          "Rental & Tourist — Alquileres y turismo"
        ],
        "operationId": "getBooking",
        "summary": "Consulta el detalle de una reserva existente",
        "description": "Consulta el detalle de una reserva existente.",
        "x-i18n": {
          "en": {
            "summary": "Retrieves the details of an existing booking",
            "description": "Retrieves the details of an existing booking."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "rental-tourist",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "booking_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "booking_id"
                ]
              },
              "example": {
                "booking_id": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "booking_id": "BOOK-2026-10432",
                    "booking_status": "confirmed",
                    "customer_email": "cliente@correo.com",
                    "property_id": "HOTEL-DEMO-001",
                    "start_date": "2026-08-01",
                    "end_date": "2026-08-03",
                    "bikes_assigned": [
                      "BIKE-0004",
                      "BIKE-0009"
                    ],
                    "checked_in": false,
                    "total_price": {
                      "amount": 45.0,
                      "currency": "EUR"
                    }
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'booking_id' es obligatorio.",
                    "parameter": "booking_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/purchase_tourist_pass": {
      "post": {
        "tags": [
          "Rental & Tourist — Alquileres y turismo"
        ],
        "operationId": "purchaseTouristPass",
        "summary": "Vende un pase turístico por día o por semana",
        "description": "Vende un pase turístico por día o por semana.",
        "x-i18n": {
          "en": {
            "summary": "Sells a tourist pass per day or per week",
            "description": "Sells a tourist pass per day or per week."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "rental-tourist",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "pass_type": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "customer_email": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "start_date": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "pass_type",
                  "customer_email"
                ]
              },
              "example": {
                "pass_type": "<valor>",
                "customer_email": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "pass_id": "PASS-DAY-88213",
                    "pass_type": "day",
                    "customer_email": "turista@correo.com",
                    "valid_from": "2026-07-25T00:00:00Z",
                    "valid_until": "2026-07-25T23:59:59Z",
                    "price": {
                      "amount": 15.0,
                      "currency": "EUR"
                    },
                    "activation_code": "CFLOW-8821-DEMO",
                    "included": {
                      "unlimited_rides": true,
                      "max_minutes_per_ride": 60
                    }
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'pass_type' es obligatorio.",
                    "parameter": "pass_type"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/rental_checkin": {
      "post": {
        "tags": [
          "Rental & Tourist — Alquileres y turismo"
        ],
        "operationId": "rentalCheckin",
        "summary": "Check-in de un alquiler: entrega del vehículo y código de desbloqueo",
        "description": "Check-in de un alquiler: entrega del vehículo y código de desbloqueo.",
        "x-i18n": {
          "en": {
            "summary": "Rental check-in: vehicle handover and unlock code",
            "description": "Rental check-in: vehicle handover and unlock code."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "rental-tourist",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "booking_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "bike_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "booking_id"
                ]
              },
              "example": {
                "booking_id": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "booking_id": "BOOK-2026-10432",
                    "checkin_at": "2026-08-01T09:02:00Z",
                    "bike": {
                      "bike_id": "BIKE-0004",
                      "model": "CityFlow E-Bike V3",
                      "battery_pct": 98
                    },
                    "unlock_code": "482913",
                    "rental_status": "active"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'booking_id' es obligatorio.",
                    "parameter": "booking_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/rental_checkout": {
      "post": {
        "tags": [
          "Rental & Tourist — Alquileres y turismo"
        ],
        "operationId": "rentalCheckout",
        "summary": "Check-out de un alquiler: devolución del vehículo y liquidación",
        "description": "Check-out de un alquiler: devolución del vehículo y liquidación.",
        "x-i18n": {
          "en": {
            "summary": "Rental check-out: vehicle return and settlement",
            "description": "Rental check-out: vehicle return and settlement."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "rental-tourist",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "booking_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "booking_id"
                ]
              },
              "example": {
                "booking_id": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "booking_id": "BOOK-2026-10432",
                    "checkout_at": "2026-08-03T18:45:00Z",
                    "usage": {
                      "total_minutes": 184,
                      "distance_km": 27.4
                    },
                    "charges": {
                      "base": 45.0,
                      "extras": 0.0,
                      "total": 45.0,
                      "currency": "EUR"
                    },
                    "rental_status": "closed",
                    "invoice_id": "INV-2026-00981"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'booking_id' es obligatorio.",
                    "parameter": "booking_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/validate_tourist_pass": {
      "post": {
        "tags": [
          "Rental & Tourist — Alquileres y turismo"
        ],
        "operationId": "validateTouristPass",
        "summary": "Valida un pase turístico y devuelve su vigencia restante",
        "description": "Valida un pase turístico y devuelve su vigencia restante.",
        "x-i18n": {
          "en": {
            "summary": "Validates a tourist pass and returns its remaining validity",
            "description": "Validates a tourist pass and returns its remaining validity."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "rental-tourist",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "pass_code": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "pass_code"
                ]
              },
              "example": {
                "pass_code": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "pass_id": "PASS-DAY-88213",
                    "pass_code": "CFLOW-8821-DEMO",
                    "valid": true,
                    "pass_type": "day",
                    "valid_until": "2026-07-25T23:59:59Z",
                    "remaining_hours": 14,
                    "rides_today": 3
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'pass_code' es obligatorio.",
                    "parameter": "pass_code"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/get_franchise_metrics": {
      "post": {
        "tags": [
          "Franchises & Multi-property — Multiciudad y franquicias"
        ],
        "operationId": "getFranchiseMetrics",
        "summary": "Métricas segregadas por franquicia o propiedad, con filtros de periodo y tipo de métrica",
        "description": "Métricas segregadas por franquicia o propiedad, con filtros de periodo y tipo de métrica.",
        "x-i18n": {
          "en": {
            "summary": "Metrics segmented by franchise or property, with period and metric-type filters",
            "description": "Metrics segmented by franchise or property, with period and metric-type filters."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "franchises",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "franchise_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "metric_type": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "period": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "franchise_id"
                ]
              },
              "example": {
                "franchise_id": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "franchise_id": "FR-MADRID",
                    "period": "2026-07",
                    "metric_type": "operations",
                    "metrics": {
                      "rentals": 2110,
                      "unique_users": 1430,
                      "revenue": {
                        "amount": 34200.0,
                        "currency": "EUR"
                      },
                      "avg_battery_at_pickup_pct": 78,
                      "incidents_open": 6,
                      "maintenance_events": 22,
                      "top_properties": [
                        {
                          "property_id": "HOTEL-DEMO-001",
                          "rentals": 320
                        },
                        {
                          "property_id": "HOTEL-DEMO-014",
                          "rentals": 289
                        }
                      ]
                    },
                    "data_scope": "franchise_isolated"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'franchise_id' es obligatorio.",
                    "parameter": "franchise_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/get_master_overview": {
      "post": {
        "tags": [
          "Franchises & Multi-property — Multiciudad y franquicias"
        ],
        "operationId": "getMasterOverview",
        "summary": "Panel Master: supervisión centralizada de todas las flotas, ciudades y franquicias",
        "description": "Panel Master: supervisión centralizada de todas las flotas, ciudades y franquicias.",
        "x-i18n": {
          "en": {
            "summary": "Master panel: centralized supervision of all fleets, cities and franchises",
            "description": "Master panel: centralized supervision of all fleets, cities and franchises."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "franchises",
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "period": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                }
              },
              "example": {
                "period": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "period": "2026-07",
                    "network": {
                      "total_franchises": 4,
                      "total_cities": 6,
                      "total_properties": 38,
                      "total_vehicles": 412,
                      "vehicles_available": 301,
                      "vehicles_in_use": 84,
                      "vehicles_maintenance": 27
                    },
                    "kpis": {
                      "total_rentals": 5320,
                      "total_revenue": {
                        "amount": 87450.0,
                        "currency": "EUR"
                      },
                      "avg_rental_minutes": 41,
                      "utilization_rate": 0.63
                    },
                    "by_franchise": [
                      {
                        "franchise_id": "FR-MADRID",
                        "city": "Madrid",
                        "vehicles": 140,
                        "rentals": 2110,
                        "revenue": 34200.0
                      },
                      {
                        "franchise_id": "FR-BCN",
                        "city": "Barcelona",
                        "vehicles": 120,
                        "rentals": 1770,
                        "revenue": 29800.0
                      },
                      {
                        "franchise_id": "FR-VLC",
                        "city": "Valencia",
                        "vehicles": 92,
                        "rentals": 980,
                        "revenue": 15250.0
                      },
                      {
                        "franchise_id": "FR-SEV",
                        "city": "Sevilla",
                        "vehicles": 60,
                        "rentals": 460,
                        "revenue": 8200.0
                      }
                    ]
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "invalid_parameter",
                    "message": "Alguno de los parámetros enviados no es válido."
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/create_bike": {
      "post": {
        "tags": [
          "Gestión interna"
        ],
        "operationId": "createBike",
        "summary": "Alta de una bicicleta en el sistema (equivalente a la gestión interna de la página de administración)",
        "description": "Alta de una bicicleta en el sistema (equivalente a la gestión interna de la página de administración).",
        "x-i18n": {
          "en": {
            "summary": "Registers a bike in the system (equivalent to the internal admin page workflow)",
            "description": "Registers a bike in the system (equivalent to the internal admin page workflow)."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "internal",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "bike_name": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "bike_model": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "hotel_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "lock_type": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "bike_name"
                ]
              },
              "example": {
                "bike_name": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "bike_id": "BIKE-0099",
                    "bike_name": "Bici 99",
                    "bike_model": "CityFlow E-Bike V3",
                    "hotel_id": "HOTEL-DEMO-001",
                    "lock_type": "smart_lock_omni",
                    "bike_status": "available",
                    "created_at": "2026-07-24T10:30:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'bike_name' es obligatorio.",
                    "parameter": "bike_name"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/create_hotel": {
      "post": {
        "tags": [
          "Gestión interna"
        ],
        "operationId": "createHotel",
        "summary": "Alta de un hotel/propiedad en la plataforma",
        "description": "Alta de un hotel/propiedad en la plataforma.",
        "x-i18n": {
          "en": {
            "summary": "Registers a hotel/property on the platform",
            "description": "Registers a hotel/property on the platform."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "internal",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "hotel_name": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "city": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "contact_email": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "hotel_name",
                  "city"
                ]
              },
              "example": {
                "hotel_name": "<valor>",
                "city": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "hotel_id": "HOTEL-DEMO-045",
                    "hotel_name": "Hotel Ejemplo Centro",
                    "city": "Madrid",
                    "contact_email": "recepcion@hotelejemplo.com",
                    "hotel_status": "active",
                    "onboarding": {
                      "pricing_configured": false,
                      "bikes_assigned": 0
                    },
                    "created_at": "2026-07-24T10:32:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'hotel_name' es obligatorio.",
                    "parameter": "hotel_name"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/set_hotel_prices": {
      "post": {
        "tags": [
          "Gestión interna"
        ],
        "operationId": "setHotelPrices",
        "summary": "Define los precios de alquiler específicos de un hotel",
        "description": "Define los precios de alquiler específicos de un hotel.",
        "x-i18n": {
          "en": {
            "summary": "Sets a hotel's specific rental prices",
            "description": "Sets a hotel's specific rental prices."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "internal",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "hotel_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "price_per_hour": {
                    "type": "number",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number"
                      }
                    }
                  },
                  "price_per_day": {
                    "type": "number",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number"
                      }
                    }
                  },
                  "currency": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "hotel_id"
                ]
              },
              "example": {
                "hotel_id": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "hotel_id": "HOTEL-DEMO-001",
                    "pricing": {
                      "price_per_hour": 5.0,
                      "price_per_day": 18.0,
                      "extra_hour": 4.0,
                      "currency": "EUR"
                    },
                    "effective_from": "2026-08-01",
                    "updated_at": "2026-07-24T10:35:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'hotel_id' es obligatorio.",
                    "parameter": "hotel_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/update_bike_status": {
      "post": {
        "tags": [
          "Gestión interna"
        ],
        "operationId": "updateBikeStatus",
        "summary": "Cambia el estado operativo de una bicicleta (available, rented, maintenance)",
        "description": "Cambia el estado operativo de una bicicleta (available, rented, maintenance).",
        "x-i18n": {
          "en": {
            "summary": "Changes a bike's operational status (available, rented, maintenance)",
            "description": "Changes a bike's operational status (available, rented, maintenance)."
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "internal",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "bike_id": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "status": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  },
                  "notes": {
                    "type": "string",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string"
                      }
                    }
                  }
                },
                "required": [
                  "bike_id",
                  "status"
                ]
              },
              "example": {
                "bike_id": "<valor>",
                "status": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "bike_id": "BIKE-0004",
                    "previous_status": "available",
                    "new_status": "maintenance",
                    "notes": "Cambio de pastillas de freno",
                    "changed_at": "2026-07-24T10:40:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'bike_id' es obligatorio.",
                    "parameter": "bike_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/update_audioguide": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateAudioguide",
        "summary": "Audioguías turísticas asociadas a rutas y puntos de interés",
        "description": "Audioguías turísticas asociadas a rutas y puntos de interés.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Tourist audio guides linked to routes and points of interest",
            "description": "Tourist audio guides linked to routes and points of interest.",
            "table": "Audio guides"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "audiofile": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «Audiofile» (se envía como URL).",
                    "x-cityflow-bubble-field": "Audiofile",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «Audiofile» (sent as a URL)."
                      }
                    }
                  },
                  "city": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «🌆 Cities» («City»).",
                    "x-cityflow-reference": "unique id de 🌆 Cities",
                    "x-cityflow-bubble-field": "City",
                    "x-cityflow-type-label": "string (unique id de 🌆 Cities)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of 🌆 Cities)",
                        "description": "Reference to the related «🌆 Cities» record («City»)."
                      }
                    }
                  },
                  "language": {
                    "type": "string",
                    "description": "Opción del conjunto «os_Language» («Language»). Valores posibles: `ES`, `EN`, `FR`, `AR`, `UR`. Idioma / localización.",
                    "enum": [
                      "ES",
                      "EN",
                      "FR",
                      "AR",
                      "UR"
                    ],
                    "x-cityflow-reference": "opción de «os_Language»",
                    "x-cityflow-bubble-field": "Language",
                    "x-cityflow-type-label": "string (opción de «os_Language»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «os_Language»)",
                        "description": "Option from the «os_Language» set («Language»). Possible values: `ES`, `EN`, `FR`, `AR`, `UR`. Language / localization."
                      }
                    }
                  },
                  "name": {
                    "type": "string",
                    "description": "Campo «Name».",
                    "x-cityflow-bubble-field": "Name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Name» field."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "audiofile": "https://ejemplo.cityflow.app/archivo.jpg",
                "city": "<unique_id>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Audioguías",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Audioguías"
      }
    },
    "/update_bike": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateBike",
        "summary": "Flota de vehículos: estado, batería, candado, ubicación y asignación a hoteles",
        "description": "Flota de vehículos: estado, batería, candado, ubicación y asignación a hoteles.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Vehicle fleet: status, battery, lock, location and hotel assignment",
            "description": "Vehicle fleet: status, battery, lock, location and hotel assignment.",
            "table": "Bikes"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "omni_lock_unlock_success": {
                    "type": "boolean",
                    "description": "Indicador sí/no «[omni] Lock/Unlock success». Dato de integración con el candado inteligente Omni.",
                    "x-cityflow-bubble-field": "[omni] Lock/Unlock success",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «[omni] Lock/Unlock success». Integration data for the Omni smart lock."
                      }
                    }
                  },
                  "a_bookings": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «Bookings» («A_Bookings»).",
                    "x-cityflow-reference": "unique id de Bookings",
                    "x-cityflow-bubble-field": "A_Bookings",
                    "x-cityflow-type-label": "lista de string (unique id de Bookings)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of Bookings)",
                        "description": "List. Reference to the related «Bookings» record («A_Bookings»)."
                      }
                    }
                  },
                  "a_clients": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia a un Usuario de la plataforma («A_Clients»).",
                    "x-cityflow-reference": "unique id de Usuario",
                    "x-cityflow-bubble-field": "A_Clients",
                    "x-cityflow-type-label": "lista de string (unique id de Usuario)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of Usuario)",
                        "description": "List. Reference to a platform User («A_Clients»)."
                      }
                    }
                  },
                  "a_electric": {
                    "type": "boolean",
                    "description": "Indicador sí/no «A_Electric».",
                    "x-cityflow-bubble-field": "A_Electric",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «A_Electric»."
                      }
                    }
                  },
                  "aa_bike_name": {
                    "type": "string",
                    "description": "Campo «AA_Bike name».",
                    "x-cityflow-bubble-field": "AA_Bike name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«AA_Bike name» field."
                      }
                    }
                  },
                  "aa_hotel": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («AA_Hotel»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "AA_Hotel",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («AA_Hotel»)."
                      }
                    }
                  },
                  "aa_isavailable": {
                    "type": "boolean",
                    "description": "Indicador sí/no «AA_isAvailable».",
                    "x-cityflow-bubble-field": "AA_isAvailable",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «AA_isAvailable»."
                      }
                    }
                  },
                  "aa_isopen": {
                    "type": "boolean",
                    "description": "Indicador sí/no «AA_isOpen».",
                    "x-cityflow-bubble-field": "AA_isOpen",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «AA_isOpen»."
                      }
                    }
                  },
                  "active": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Active».",
                    "x-cityflow-bubble-field": "Active",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Active»."
                      }
                    }
                  },
                  "ads": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Ads».",
                    "x-cityflow-bubble-field": "Ads",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Ads»."
                      }
                    }
                  },
                  "agujero_marco": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Agujero Marco».",
                    "x-cityflow-bubble-field": "Agujero Marco",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Agujero Marco»."
                      }
                    }
                  },
                  "aprobacion_de_funcionar_con_baja_bateria": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Aprobación de funcionar con baja batería». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "Aprobación de funcionar con baja batería",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Aprobación de funcionar con baja batería». Vehicle battery level or status."
                      }
                    }
                  },
                  "auto_lock_inicio_de_cadena": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Auto-lock: inicio de cadena». Control o estado del candado del vehículo.",
                    "x-cityflow-bubble-field": "Auto-lock: inicio de cadena",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Auto-lock: chain start» date. Vehicle lock control or status."
                      }
                    }
                  },
                  "available_for_the_hotel": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Available for the Hotel».",
                    "x-cityflow-bubble-field": "Available for the Hotel",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Available for the Hotel»."
                      }
                    }
                  },
                  "averiada": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Averiada». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "Averiada",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Averiada». Maintenance / breakdown."
                      }
                    }
                  },
                  "axa_lock_id": {
                    "type": "string",
                    "description": "Campo «AXA Lock ID». Dato del candado AXA.",
                    "x-cityflow-bubble-field": "AXA Lock ID",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«AXA Lock ID» field. AXA lock data."
                      }
                    }
                  },
                  "axa_lock_name": {
                    "type": "string",
                    "description": "Campo «AXA Lock_name». Dato del candado AXA.",
                    "x-cityflow-bubble-field": "AXA Lock_name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«AXA Lock_name» field. AXA lock data."
                      }
                    }
                  },
                  "bastidor": {
                    "type": "string",
                    "description": "Campo «Bastidor».",
                    "x-cityflow-bubble-field": "Bastidor",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Bastidor» field."
                      }
                    }
                  },
                  "battery": {
                    "type": "number",
                    "description": "Valor numérico «Battery %». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "Battery %",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Battery %». Vehicle battery level or status."
                      }
                    }
                  },
                  "battery_locked": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Battery Locked». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "Battery Locked",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Battery Locked». Vehicle battery level or status."
                      }
                    }
                  },
                  "battery_request_in_process": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Battery request in process». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "Battery request in process",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Battery request in process». Vehicle battery level or status."
                      }
                    }
                  },
                  "bicicleta_lista_en_el_taller": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Bicicleta Lista en el Taller». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "Bicicleta Lista en el Taller",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Bicicleta Lista en el Taller». Maintenance / breakdown."
                      }
                    }
                  },
                  "bike_locked": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Bike Locked». Control o estado del candado del vehículo.",
                    "x-cityflow-bubble-field": "Bike Locked",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Bike Locked». Vehicle lock control or status."
                      }
                    }
                  },
                  "bloqueada_por_mantenimiento": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Bloqueada por mantenimiento». Control o estado del candado del vehículo.",
                    "x-cityflow-bubble-field": "Bloqueada por mantenimiento",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Bloqueada por mantenimiento». Vehicle lock control or status."
                      }
                    }
                  },
                  "booked_only_for": {
                    "type": "string",
                    "description": "Referencia a un Usuario de la plataforma («Booked-Only-For»).",
                    "x-cityflow-reference": "unique id de Usuario",
                    "x-cityflow-bubble-field": "Booked-Only-For",
                    "x-cityflow-type-label": "string (unique id de Usuario)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of Usuario)",
                        "description": "Reference to a platform User («Booked-Only-For»)."
                      }
                    }
                  },
                  "cadena_de_hotel": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «🏨 Cadenas» («Cadena de Hotel»).",
                    "x-cityflow-reference": "unique id de 🏨 Cadenas",
                    "x-cityflow-bubble-field": "Cadena de Hotel",
                    "x-cityflow-type-label": "string (unique id de 🏨 Cadenas)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of 🏨 Cadenas)",
                        "description": "Reference to the related «🏨 Cadenas» record («Cadena de Hotel»)."
                      }
                    }
                  },
                  "charginig": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Charginig».",
                    "x-cityflow-bubble-field": "Charginig",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Charginig»."
                      }
                    }
                  },
                  "cierre_deseado_ultima_orden": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Cierre deseado (última orden)». Control o estado del candado del vehículo.",
                    "x-cityflow-bubble-field": "Cierre deseado (última orden)",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Cierre deseado (última orden)». Vehicle lock control or status."
                      }
                    }
                  },
                  "codigo_ayuntamiento": {
                    "type": "string",
                    "description": "Campo «Código Ayuntamiento».",
                    "x-cityflow-bubble-field": "Código Ayuntamiento",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Código Ayuntamiento» field."
                      }
                    }
                  },
                  "codigo_qr": {
                    "type": "string",
                    "description": "Campo «Código QR». Código QR asociado.",
                    "x-cityflow-bubble-field": "Código QR",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Código QR» field. Associated QR code."
                      }
                    }
                  },
                  "comments_when_not_available_for_the_hotel": {
                    "type": "string",
                    "description": "Campo «Comments when NOT AVAILABLE for the Hotel».",
                    "x-cityflow-bubble-field": "Comments when NOT AVAILABLE for the Hotel",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Comments when NOT AVAILABLE for the Hotel» field."
                      }
                    }
                  },
                  "count_of_averias": {
                    "type": "number",
                    "description": "Valor numérico «Count of averías». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "Count of averías",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Count of averías». Maintenance / breakdown."
                      }
                    }
                  },
                  "count_of_bookings": {
                    "type": "number",
                    "description": "Valor numérico «Count of bookings».",
                    "x-cityflow-bubble-field": "Count of bookings",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Count of bookings»."
                      }
                    }
                  },
                  "current_charge_number": {
                    "type": "number",
                    "description": "Valor numérico «Current Charge Number».",
                    "x-cityflow-bubble-field": "Current Charge Number",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Current Charge Number»."
                      }
                    }
                  },
                  "estado": {
                    "type": "string",
                    "description": "Opción del conjunto «OS_EstadoBici» («Estado»). Valores posibles: `En hotel`, `Vendida`, `Delivery`, `Taller`, `Exposición`, `Inactiva`.",
                    "enum": [
                      "En hotel",
                      "Vendida",
                      "Delivery",
                      "Taller",
                      "Exposición",
                      "Inactiva"
                    ],
                    "x-cityflow-reference": "opción de «OS_EstadoBici»",
                    "x-cityflow-bubble-field": "Estado",
                    "x-cityflow-type-label": "string (opción de «OS_EstadoBici»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «OS_EstadoBici»)",
                        "description": "Option from the «OS_EstadoBici» set («Estado»). Possible values: `En hotel`, `Vendida`, `Delivery`, `Taller`, `Exposición`, `Inactiva`."
                      }
                    }
                  },
                  "exposition_bike": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Exposition Bike».",
                    "x-cityflow-bubble-field": "Exposition Bike",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Exposition Bike»."
                      }
                    }
                  },
                  "fecha_comprobacion_cierre": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Fecha comprobación cierre». Control o estado del candado del vehículo.",
                    "x-cityflow-bubble-field": "Fecha comprobación cierre",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Fecha comprobación cierre» date (lock check). Vehicle lock control or status."
                      }
                    }
                  },
                  "fecha_incidencia": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Fecha Incidencia».",
                    "x-cityflow-bubble-field": "Fecha Incidencia",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Fecha Incidencia» date (incident date)."
                      }
                    }
                  },
                  "find_tag_longitude": {
                    "type": "number",
                    "description": "Valor numérico «Find Tag - Longitude». Ubicación / posicionamiento GPS.",
                    "x-cityflow-bubble-field": "Find Tag - Longitude",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Find Tag - Longitude». Location / GPS positioning."
                      }
                    }
                  },
                  "find_tag_latitude": {
                    "type": "number",
                    "description": "Valor numérico «find Tag Latitude». Ubicación / posicionamiento GPS.",
                    "x-cityflow-bubble-field": "find Tag Latitude",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «find Tag Latitude». Location / GPS positioning."
                      }
                    }
                  },
                  "findtag_id": {
                    "type": "string",
                    "description": "Campo «findtag ID».",
                    "x-cityflow-bubble-field": "findtag ID",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«findtag ID» field."
                      }
                    }
                  },
                  "foto_averia_url_1": {
                    "type": "string",
                    "description": "Campo «Foto avería url 1». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "Foto avería url 1",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Foto avería url 1» field. Maintenance / breakdown."
                      }
                    }
                  },
                  "foto_averia_url_2": {
                    "type": "string",
                    "description": "Campo «Foto avería url 2». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "Foto avería url 2",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Foto avería url 2» field. Maintenance / breakdown."
                      }
                    }
                  },
                  "foto_averia_url_3": {
                    "type": "string",
                    "description": "Campo «Foto avería url 3». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "Foto avería url 3",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Foto avería url 3» field. Maintenance / breakdown."
                      }
                    }
                  },
                  "hotel_anterior": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («Hotel Anterior»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "Hotel Anterior",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («Hotel Anterior»)."
                      }
                    }
                  },
                  "ingresos_db": {
                    "type": "number",
                    "description": "Valor numérico «Ingresos % [db]».",
                    "x-cityflow-bubble-field": "Ingresos % [db]",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Ingresos % [db]»."
                      }
                    }
                  },
                  "ingresos_totales": {
                    "type": "number",
                    "description": "Valor numérico «Ingresos totales».",
                    "x-cityflow-bubble-field": "Ingresos totales",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Ingresos totales»."
                      }
                    }
                  },
                  "inversion_inicial": {
                    "type": "number",
                    "description": "Valor numérico «Inversión inicial».",
                    "x-cityflow-bubble-field": "Inversión inicial",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Inversión inicial»."
                      }
                    }
                  },
                  "iot_address": {
                    "type": "string",
                    "description": "Campo «IoT Address».",
                    "x-cityflow-bubble-field": "IoT Address",
                    "x-cityflow-type-label": "string (dirección/coordenadas)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (dirección/coordenadas)",
                        "description": "«IoT Address» field."
                      }
                    }
                  },
                  "last_booking": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «Bookings» («Last booking»).",
                    "x-cityflow-reference": "unique id de Bookings",
                    "x-cityflow-bubble-field": "Last booking",
                    "x-cityflow-type-label": "string (unique id de Bookings)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of Bookings)",
                        "description": "Reference to the related «Bookings» record («Last booking»)."
                      }
                    }
                  },
                  "last_ekey": {
                    "type": "string",
                    "description": "Campo «Last ekey».",
                    "x-cityflow-bubble-field": "Last ekey",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Last ekey» field."
                      }
                    }
                  },
                  "last_otp": {
                    "type": "string",
                    "description": "Campo «Last OTP».",
                    "x-cityflow-bubble-field": "Last OTP",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Last OTP» field."
                      }
                    }
                  },
                  "latitude": {
                    "type": "number",
                    "description": "Valor numérico «Latitude». Ubicación / posicionamiento GPS.",
                    "x-cityflow-bubble-field": "Latitude",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Latitude». Location / GPS positioning."
                      }
                    }
                  },
                  "localizacion": {
                    "type": "string",
                    "description": "Campo «Localización».",
                    "x-cityflow-bubble-field": "Localización",
                    "x-cityflow-type-label": "string (dirección/coordenadas)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (dirección/coordenadas)",
                        "description": "«Localización» field."
                      }
                    }
                  },
                  "lock_company": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «🔐 Locks Type» («Lock - company»). Control o estado del candado del vehículo.",
                    "x-cityflow-reference": "unique id de 🔐 Locks Type",
                    "x-cityflow-bubble-field": "Lock - company",
                    "x-cityflow-type-label": "string (unique id de 🔐 Locks Type)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of 🔐 Locks Type)",
                        "description": "Reference to the related «🔐 Locks Type» record («Lock - company»). Vehicle lock control or status."
                      }
                    }
                  },
                  "lock_id": {
                    "type": "string",
                    "description": "Campo «Lock_id». Control o estado del candado del vehículo.",
                    "x-cityflow-bubble-field": "Lock_id",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Lock_id» field. Vehicle lock control or status."
                      }
                    }
                  },
                  "longitude": {
                    "type": "number",
                    "description": "Valor numérico «Longitude». Ubicación / posicionamiento GPS.",
                    "x-cityflow-bubble-field": "Longitude",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Longitude». Location / GPS positioning."
                      }
                    }
                  },
                  "mac_address_linka": {
                    "type": "string",
                    "description": "Campo «Mac address (Linka)». Dato del candado LINKA.",
                    "x-cityflow-bubble-field": "Mac address (Linka)",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Mac address (Linka)» field. LINKA lock data."
                      }
                    }
                  },
                  "mac_address_tag_gps": {
                    "type": "string",
                    "description": "Campo «MAC address - TAG GPS». Ubicación / posicionamiento GPS.",
                    "x-cityflow-bubble-field": "MAC address - TAG GPS",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«MAC address - TAG GPS» field. Location / GPS positioning."
                      }
                    }
                  },
                  "mantenimiento": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🛠️ Maintenances» («Mantenimiento»). Mantenimiento / avería.",
                    "x-cityflow-reference": "unique id de 🛠️ Maintenances",
                    "x-cityflow-bubble-field": "Mantenimiento",
                    "x-cityflow-type-label": "lista de string (unique id de 🛠️ Maintenances)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🛠️ Maintenances)",
                        "description": "List. Reference to the related «🛠️ Maintenances» record («Mantenimiento»). Maintenance / breakdown."
                      }
                    }
                  },
                  "modelo": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «Bike Models» («Modelo»).",
                    "x-cityflow-reference": "unique id de Bike Models",
                    "x-cityflow-bubble-field": "Modelo",
                    "x-cityflow-type-label": "string (unique id de Bike Models)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of Bike Models)",
                        "description": "Reference to the related «Bike Models» record («Modelo»)."
                      }
                    }
                  },
                  "o_speed_limit": {
                    "type": "number",
                    "description": "Valor numérico «O - Speed limit».",
                    "x-cityflow-bubble-field": "O - Speed limit",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «O - Speed limit»."
                      }
                    }
                  },
                  "o_speed_mode": {
                    "type": "string",
                    "description": "Opción del conjunto «Low/Medium/High» («O - Speed mode»). Valores posibles: `low`, `medium`, `high`.",
                    "enum": [
                      "low",
                      "medium",
                      "high"
                    ],
                    "x-cityflow-reference": "opción de «Low/Medium/High»",
                    "x-cityflow-bubble-field": "O - Speed mode",
                    "x-cityflow-type-label": "string (opción de «Low/Medium/High»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «Low/Medium/High»)",
                        "description": "Option from the «Low/Medium/High» set («O - Speed mode»). Possible values: `low`, `medium`, `high`."
                      }
                    }
                  },
                  "o_start_up_mode": {
                    "type": "string",
                    "description": "Opción del conjunto «zero/non-zero» («O - Start-up mode»). Valores posibles: `zero`, `non-zero`.",
                    "enum": [
                      "zero",
                      "non-zero"
                    ],
                    "x-cityflow-reference": "opción de «zero/non-zero»",
                    "x-cityflow-bubble-field": "O - Start-up mode",
                    "x-cityflow-type-label": "string (opción de «zero/non-zero»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «zero/non-zero»)",
                        "description": "Option from the «zero/non-zero» set («O - Start-up mode»). Possible values: `zero`, `non-zero`."
                      }
                    }
                  },
                  "o_throttle": {
                    "type": "string",
                    "description": "Opción del conjunto «on/off» («O - Throttle»). Valores posibles: `on`, `off`.",
                    "enum": [
                      "on",
                      "off"
                    ],
                    "x-cityflow-reference": "opción de «on/off»",
                    "x-cityflow-bubble-field": "O - Throttle",
                    "x-cityflow-type-label": "string (opción de «on/off»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «on/off»)",
                        "description": "Option from the «on/off» set («O - Throttle»). Possible values: `on`, `off`."
                      }
                    }
                  },
                  "o_accelerometer": {
                    "type": "string",
                    "description": "Opción del conjunto «Low/Medium/High» («O- Accelerometer»). Valores posibles: `low`, `medium`, `high`.",
                    "enum": [
                      "low",
                      "medium",
                      "high"
                    ],
                    "x-cityflow-reference": "opción de «Low/Medium/High»",
                    "x-cityflow-bubble-field": "O- Accelerometer",
                    "x-cityflow-type-label": "string (opción de «Low/Medium/High»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «Low/Medium/High»)",
                        "description": "Option from the «Low/Medium/High» set («O- Accelerometer»). Possible values: `low`, `medium`, `high`."
                      }
                    }
                  },
                  "o_luces": {
                    "type": "string",
                    "description": "Opción del conjunto «on/off» («O- Luces»). Valores posibles: `on`, `off`.",
                    "enum": [
                      "on",
                      "off"
                    ],
                    "x-cityflow-reference": "opción de «on/off»",
                    "x-cityflow-bubble-field": "O- Luces",
                    "x-cityflow-type-label": "string (opción de «on/off»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «on/off»)",
                        "description": "Option from the «on/off» set («O- Luces»). Possible values: `on`, `off`."
                      }
                    }
                  },
                  "omni_comprobado_el": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Omni - Comprobado el». Dato de integración con el candado inteligente Omni.",
                    "x-cityflow-bubble-field": "Omni - Comprobado el",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Omni - Comprobado el» date (last checked). Integration data for the Omni smart lock."
                      }
                    }
                  },
                  "omni_conectada": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Omni - Conectada». Dato de integración con el candado inteligente Omni.",
                    "x-cityflow-bubble-field": "Omni - Conectada",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Omni - Conectada». Integration data for the Omni smart lock."
                      }
                    }
                  },
                  "omni_last_seen": {
                    "type": "string",
                    "description": "Campo «Omni - Last seen». Dato de integración con el candado inteligente Omni.",
                    "x-cityflow-bubble-field": "Omni - Last seen",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Omni - Last seen» field. Integration data for the Omni smart lock."
                      }
                    }
                  },
                  "omni_id": {
                    "type": "string",
                    "description": "Campo «Omni ID». Dato de integración con el candado inteligente Omni.",
                    "x-cityflow-bubble-field": "Omni ID",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Omni ID» field. Integration data for the Omni smart lock."
                      }
                    }
                  },
                  "ortizma": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Ortizma».",
                    "x-cityflow-bubble-field": "Ortizma",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Ortizma»."
                      }
                    }
                  },
                  "period_averias_count": {
                    "type": "number",
                    "description": "Valor numérico «Period averías count». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "Period averías count",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Period averías count». Maintenance / breakdown."
                      }
                    }
                  },
                  "public_key_findtag_gps": {
                    "type": "string",
                    "description": "Campo «Public Key - FindTag GPS». Ubicación / posicionamiento GPS.",
                    "x-cityflow-bubble-field": "Public Key - FindTag GPS",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Public Key - FindTag GPS» field. Location / GPS positioning."
                      }
                    }
                  },
                  "push_battery": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Push Battery». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "Push Battery",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Push Battery». Vehicle battery level or status."
                      }
                    }
                  },
                  "rents_number": {
                    "type": "number",
                    "description": "Valor numérico «Rents number».",
                    "x-cityflow-bubble-field": "Rents number",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Rents number»."
                      }
                    }
                  },
                  "resultado_comprobacion_cierre": {
                    "type": "string",
                    "description": "Campo «Resultado comprobación cierre». Control o estado del candado del vehículo.",
                    "x-cityflow-bubble-field": "Resultado comprobación cierre",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Resultado comprobación cierre» field. Vehicle lock control or status."
                      }
                    }
                  },
                  "rides_until_charge": {
                    "type": "number",
                    "description": "Valor numérico «Rides until charge».",
                    "x-cityflow-bubble-field": "Rides until charge",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Rides until charge»."
                      }
                    }
                  },
                  "sim_id": {
                    "type": "string",
                    "description": "Campo «SIM ID».",
                    "x-cityflow-bubble-field": "SIM ID",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«SIM ID» field."
                      }
                    }
                  },
                  "texto_cargar_bici_visible": {
                    "type": "boolean",
                    "description": "Indicador sí/no «texto cargar bici visible».",
                    "x-cityflow-bubble-field": "texto cargar bici visible",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «texto cargar bici visible»."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "omni_lock_unlock_success": false,
                "a_bookings": [
                  "<unique_id>"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Bicicletas",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Bicicletas"
      }
    },
    "/update_hotel_chain": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateHotelChain",
        "summary": "Cadenas o grupos hoteleros que agrupan varias propiedades",
        "description": "Cadenas o grupos hoteleros que agrupan varias propiedades.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Hotel chains or groups spanning multiple properties",
            "description": "Hotel chains or groups spanning multiple properties.",
            "table": "Hotel chains"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "background_color": {
                    "type": "string",
                    "description": "Campo «Background color».",
                    "x-cityflow-bubble-field": "Background color",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Background color» field."
                      }
                    }
                  },
                  "boton_1_color": {
                    "type": "string",
                    "description": "Campo «Boton 1 color».",
                    "x-cityflow-bubble-field": "Boton 1 color",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Boton 1 color» field."
                      }
                    }
                  },
                  "color_logo_inicio": {
                    "type": "string",
                    "description": "Campo «color logo inicio».",
                    "x-cityflow-bubble-field": "color logo inicio",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«color logo inicio» field."
                      }
                    }
                  },
                  "logo_cadena": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «Logo cadena» (se envía como URL).",
                    "x-cityflow-bubble-field": "Logo cadena",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «Logo cadena» (sent as a URL)."
                      }
                    }
                  },
                  "name": {
                    "type": "string",
                    "description": "Campo «Name».",
                    "x-cityflow-bubble-field": "Name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Name» field."
                      }
                    }
                  },
                  "navbar_background_color": {
                    "type": "string",
                    "description": "Campo «Navbar background color».",
                    "x-cityflow-bubble-field": "Navbar background color",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Navbar background color» field."
                      }
                    }
                  },
                  "navbar_text_color": {
                    "type": "string",
                    "description": "Campo «Navbar Text Color».",
                    "x-cityflow-bubble-field": "Navbar Text Color",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Navbar Text Color» field."
                      }
                    }
                  },
                  "text_color": {
                    "type": "string",
                    "description": "Campo «Text color».",
                    "x-cityflow-bubble-field": "Text color",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Text color» field."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "background_color": "<valor>",
                "boton_1_color": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Cadenas hoteleras",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Cadenas hoteleras"
      }
    },
    "/update_city": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateCity",
        "summary": "Ciudades donde opera la plataforma",
        "description": "Ciudades donde opera la plataforma.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Cities where the platform operates",
            "description": "Cities where the platform operates.",
            "table": "Cities"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "alquileres_anuales_por_bici": {
                    "type": "number",
                    "description": "Valor numérico «alquileres anuales por bici».",
                    "x-cityflow-bubble-field": "alquileres anuales por bici",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «alquileres anuales por bici»."
                      }
                    }
                  },
                  "anos_de_uso": {
                    "type": "number",
                    "description": "Valor numérico «Años de uso».",
                    "x-cityflow-bubble-field": "Años de uso",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Años de uso»."
                      }
                    }
                  },
                  "name": {
                    "type": "string",
                    "description": "Campo «Name».",
                    "x-cityflow-bubble-field": "Name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Name» field."
                      }
                    }
                  },
                  "precio_medio": {
                    "type": "number",
                    "description": "Valor numérico «Precio medio». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Precio medio",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Precio medio». Price amount or configuration."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "alquileres_anuales_por_bici": 0,
                "anos_de_uso": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Ciudades",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Ciudades"
      }
    },
    "/update_autolock_config": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateAutolockConfig",
        "summary": "Parámetros del cierre automático de candados",
        "description": "Parámetros del cierre automático de candados.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Automatic lock closure parameters",
            "description": "Automatic lock closure parameters.",
            "table": "Auto-lock configuration"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "minutos_entre_chequeos": {
                    "type": "number",
                    "description": "Valor numérico «Minutos entre chequeos».",
                    "x-cityflow-bubble-field": "Minutos entre chequeos",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Minutos entre chequeos»."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "minutos_entre_chequeos": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Configuración de auto-bloqueo",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Configuración de auto-bloqueo"
      }
    },
    "/update_hotel_contact": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateHotelContact",
        "summary": "Personas de contacto de cada hotel",
        "description": "Personas de contacto de cada hotel.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Contact people for each hotel",
            "description": "Contact people for each hotel.",
            "table": "Hotel contacts"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "email": {
                    "type": "string",
                    "description": "Campo «email». Dirección de correo electrónico.",
                    "x-cityflow-bubble-field": "email",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«email» field. Email address."
                      }
                    }
                  },
                  "facturacion": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Facturación». Dato de facturación.",
                    "x-cityflow-bubble-field": "Facturación",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Facturación». Billing data."
                      }
                    }
                  },
                  "hotel": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («Hotel»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "Hotel",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («Hotel»)."
                      }
                    }
                  },
                  "nombre": {
                    "type": "string",
                    "description": "Campo «Nombre».",
                    "x-cityflow-bubble-field": "Nombre",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Nombre» field."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "email": "<valor>",
                "facturacion": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Contactos de hoteles",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Contactos de hoteles"
      }
    },
    "/update_promocode": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updatePromocode",
        "summary": "Cupones y descuentos aplicables a reservas",
        "description": "Cupones y descuentos aplicables a reservas.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Coupons and discounts applicable to bookings",
            "description": "Coupons and discounts applicable to bookings.",
            "table": "Promo codes"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "active": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Active».",
                    "x-cityflow-bubble-field": "Active",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Active»."
                      }
                    }
                  },
                  "bikes_to_use_left": {
                    "type": "number",
                    "description": "Valor numérico «Bikes to use left».",
                    "x-cityflow-bubble-field": "Bikes to use left",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Bikes to use left»."
                      }
                    }
                  },
                  "bikes_used": {
                    "type": "number",
                    "description": "Valor numérico «Bikes used».",
                    "x-cityflow-bubble-field": "Bikes used",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Bikes used»."
                      }
                    }
                  },
                  "cadena": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «🏨 Cadenas» («Cadena»).",
                    "x-cityflow-reference": "unique id de 🏨 Cadenas",
                    "x-cityflow-bubble-field": "Cadena",
                    "x-cityflow-type-label": "string (unique id de 🏨 Cadenas)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of 🏨 Cadenas)",
                        "description": "Reference to the related «🏨 Cadenas» record («Cadena»)."
                      }
                    }
                  },
                  "discount": {
                    "type": "number",
                    "description": "Valor numérico «Discount (%)». Promociones y descuentos.",
                    "x-cityflow-bubble-field": "Discount (%)",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Discount (%)». Promotions and discounts."
                      }
                    }
                  },
                  "hotel": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («Hotel»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "Hotel",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («Hotel»)."
                      }
                    }
                  },
                  "master": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Master».",
                    "x-cityflow-bubble-field": "Master",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Master»."
                      }
                    }
                  },
                  "name": {
                    "type": "string",
                    "description": "Campo «Name».",
                    "x-cityflow-bubble-field": "Name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Name» field."
                      }
                    }
                  },
                  "price_to_pay": {
                    "type": "number",
                    "description": "Valor numérico «Price to Pay (%)». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Price to Pay (%)",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Price to Pay (%)». Price amount or configuration."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "active": false,
                "bikes_to_use_left": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Códigos promocionales",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Códigos promocionales"
      }
    },
    "/update_working_hours": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateWorkingHours",
        "summary": "Horarios de disponibilidad del servicio por propiedad",
        "description": "Horarios de disponibilidad del servicio por propiedad.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Service availability schedules per property",
            "description": "Service availability schedules per property.",
            "table": "Working hours"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "end": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «End».",
                    "x-cityflow-bubble-field": "End",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«End» date."
                      }
                    }
                  },
                  "name": {
                    "type": "string",
                    "description": "Campo «Name».",
                    "x-cityflow-bubble-field": "Name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Name» field."
                      }
                    }
                  },
                  "start": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Start».",
                    "x-cityflow-bubble-field": "Start",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Start» date."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "end": "2026-01-31T10:00:00Z",
                "name": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Horarios de trabajo",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Horarios de trabajo"
      }
    },
    "/update_hotel": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateHotel",
        "summary": "Propiedades (hoteles) donde se ofrece el servicio: datos comerciales, precios, configuración operativa",
        "description": "Propiedades (hoteles) donde se ofrece el servicio: datos comerciales, precios, configuración operativa.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Properties (hotels) where the service is offered: commercial data, pricing, operational configuration",
            "description": "Properties (hotels) where the service is offered: commercial data, pricing, operational configuration.",
            "table": "Hotels"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "bw_pay_cabecera_sent": {
                    "type": "boolean",
                    "description": "Indicador sí/no «(bw) Pay Cabecera sent».",
                    "x-cityflow-bubble-field": "(bw) Pay Cabecera sent",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «(bw) Pay Cabecera sent»."
                      }
                    }
                  },
                  "bw_aviso_cargar_bicis_enviado": {
                    "type": "boolean",
                    "description": "Indicador sí/no «[bw] Aviso cargar bicis enviado».",
                    "x-cityflow-bubble-field": "[bw] Aviso cargar bicis enviado",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «[bw] Aviso cargar bicis enviado»."
                      }
                    }
                  },
                  "a_cadena": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «🏨 Cadenas» («A_Cadena»).",
                    "x-cityflow-reference": "unique id de 🏨 Cadenas",
                    "x-cityflow-bubble-field": "A_Cadena",
                    "x-cityflow-type-label": "string (unique id de 🏨 Cadenas)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of 🏨 Cadenas)",
                        "description": "Reference to the related «🏨 Cadenas» record («A_Cadena»)."
                      }
                    }
                  },
                  "a_free_for_clients": {
                    "type": "boolean",
                    "description": "Indicador sí/no «A_Free for clients».",
                    "x-cityflow-bubble-field": "A_Free for clients",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «A_Free for clients»."
                      }
                    }
                  },
                  "a_logo_on_blue_bg": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «A_Logo (on blue bg)» (se envía como URL).",
                    "x-cityflow-bubble-field": "A_Logo (on blue bg)",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «A_Logo (on blue bg)» (sent as a URL)."
                      }
                    }
                  },
                  "a_logo_color": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «A_Logo color» (se envía como URL).",
                    "x-cityflow-bubble-field": "A_Logo color",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «A_Logo color» (sent as a URL)."
                      }
                    }
                  },
                  "a_logo_square": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «A_Logo_square» (se envía como URL).",
                    "x-cityflow-bubble-field": "A_Logo_square",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «A_Logo_square» (sent as a URL)."
                      }
                    }
                  },
                  "a_total_bikes_rented": {
                    "type": "number",
                    "description": "Valor numérico «A_Total bikes rented».",
                    "x-cityflow-bubble-field": "A_Total bikes rented",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «A_Total bikes rented»."
                      }
                    }
                  },
                  "aa_bike_model": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «Bike Models» («AA_Bike Model»).",
                    "x-cityflow-reference": "unique id de Bike Models",
                    "x-cityflow-bubble-field": "AA_Bike Model",
                    "x-cityflow-type-label": "string (unique id de Bike Models)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of Bike Models)",
                        "description": "Reference to the related «Bike Models» record («AA_Bike Model»)."
                      }
                    }
                  },
                  "aa_bikes_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🚲 Bikes» («AA_Bikes list»).",
                    "x-cityflow-reference": "unique id de 🚲 Bikes",
                    "x-cityflow-bubble-field": "AA_Bikes list",
                    "x-cityflow-type-label": "lista de string (unique id de 🚲 Bikes)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🚲 Bikes)",
                        "description": "List. Reference to the related «🚲 Bikes» record («AA_Bikes list»)."
                      }
                    }
                  },
                  "aa_city": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «🌆 Cities» («AA_City»).",
                    "x-cityflow-reference": "unique id de 🌆 Cities",
                    "x-cityflow-bubble-field": "AA_City",
                    "x-cityflow-type-label": "string (unique id de 🌆 Cities)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of 🌆 Cities)",
                        "description": "Reference to the related «🌆 Cities» record («AA_City»)."
                      }
                    }
                  },
                  "aa_e_bikes_yes_no": {
                    "type": "boolean",
                    "description": "Indicador sí/no «AA_E-bikes yes/no».",
                    "x-cityflow-bubble-field": "AA_E-bikes yes/no",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «AA_E-bikes yes/no»."
                      }
                    }
                  },
                  "aa_open": {
                    "type": "boolean",
                    "description": "Indicador sí/no «AA_Open».",
                    "x-cityflow-bubble-field": "AA_Open",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «AA_Open»."
                      }
                    }
                  },
                  "abrir_cerrar_bateria": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Abrir / Cerrar batería». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "Abrir / Cerrar batería",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Abrir / Cerrar batería». Vehicle battery level or status."
                      }
                    }
                  },
                  "abrir_bateria": {
                    "type": "boolean",
                    "description": "Indicador sí/no «abrir bateria». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "abrir bateria",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «abrir bateria». Vehicle battery level or status."
                      }
                    }
                  },
                  "abrir_cerrar_bateria_2": {
                    "type": "boolean",
                    "description": "Indicador sí/no «abrir/cerrar batería». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "abrir/cerrar batería",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «abrir/cerrar batería». Vehicle battery level or status."
                      }
                    }
                  },
                  "abrir_cerrar_bateria_3": {
                    "type": "boolean",
                    "description": "Indicador sí/no «abrir/cerrar batería». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "abrir/cerrar batería",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «abrir/cerrar batería». Vehicle battery level or status."
                      }
                    }
                  },
                  "address": {
                    "type": "string",
                    "description": "Campo «Address».",
                    "x-cityflow-bubble-field": "Address",
                    "x-cityflow-type-label": "string (dirección/coordenadas)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (dirección/coordenadas)",
                        "description": "«Address» field."
                      }
                    }
                  },
                  "address_2": {
                    "type": "string",
                    "description": "Campo «Address 2».",
                    "x-cityflow-bubble-field": "Address 2",
                    "x-cityflow-type-label": "string (dirección/coordenadas)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (dirección/coordenadas)",
                        "description": "«Address 2» field."
                      }
                    }
                  },
                  "admin_emails_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Campo «Admin_emails list». Dirección de correo electrónico.",
                    "x-cityflow-bubble-field": "Admin_emails list",
                    "x-cityflow-type-label": "lista de string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string",
                        "description": "List. «Admin_emails list» field. Email address."
                      }
                    }
                  },
                  "alerta_mantenimiento": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Alerta mantenimiento». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "Alerta mantenimiento",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Alerta mantenimiento». Maintenance / breakdown."
                      }
                    }
                  },
                  "amazon_comissions": {
                    "type": "string",
                    "description": "Campo «amazon comissions».",
                    "x-cityflow-bubble-field": "amazon comissions",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«amazon comissions» field."
                      }
                    }
                  },
                  "amazon_dinero_transferido": {
                    "type": "number",
                    "description": "Valor numérico «Amazon Dinero Transferido».",
                    "x-cityflow-bubble-field": "Amazon Dinero Transferido",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Amazon Dinero Transferido»."
                      }
                    }
                  },
                  "apartamentos": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Apartamentos».",
                    "x-cityflow-bubble-field": "Apartamentos",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Apartamentos»."
                      }
                    }
                  },
                  "aprobacion_siempre_recepcion": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Aprobación siempre recepción».",
                    "x-cityflow-bubble-field": "Aprobación siempre recepción",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Aprobación siempre recepción»."
                      }
                    }
                  },
                  "audioguides": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Audioguides».",
                    "x-cityflow-bubble-field": "Audioguides",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Audioguides»."
                      }
                    }
                  },
                  "audioguides_2": {
                    "type": "string",
                    "description": "Campo «audioguides».",
                    "x-cityflow-bubble-field": "audioguides",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«audioguides» field."
                      }
                    }
                  },
                  "aviso_cable_cargador": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Aviso cable cargador».",
                    "x-cityflow-bubble-field": "Aviso cable cargador",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Aviso cable cargador»."
                      }
                    }
                  },
                  "aviso_carga_activado": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Aviso carga Activado».",
                    "x-cityflow-bubble-field": "Aviso carga Activado",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Aviso carga Activado»."
                      }
                    }
                  },
                  "aviso_cargar_bicis_al_finalizar": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Aviso cargar bicis al finalizar».",
                    "x-cityflow-bubble-field": "Aviso cargar bicis al finalizar",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Aviso cargar bicis al finalizar»."
                      }
                    }
                  },
                  "aviso_cobrar_huespedes_hotelatelier": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Aviso cobrar huéspedes (Hotelatelier)».",
                    "x-cityflow-bubble-field": "Aviso cobrar huéspedes (Hotelatelier)",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Aviso cobrar huéspedes (Hotelatelier)»."
                      }
                    }
                  },
                  "banca_cuenta": {
                    "type": "string",
                    "description": "Campo «Banca & Cuenta».",
                    "x-cityflow-bubble-field": "Banca & Cuenta",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Banca & Cuenta» field."
                      }
                    }
                  },
                  "bateria": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («bateria»). Nivel o estado de batería del vehículo.",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "bateria",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («bateria»). Vehicle battery level or status."
                      }
                    }
                  },
                  "bateria_pruebas": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Batería % pruebas». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "Batería % pruebas",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Batería % pruebas». Vehicle battery level or status."
                      }
                    }
                  },
                  "bicicletas_iniciales": {
                    "type": "number",
                    "description": "Valor numérico «Bicicletas Iniciales».",
                    "x-cityflow-bubble-field": "Bicicletas Iniciales",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Bicicletas Iniciales»."
                      }
                    }
                  },
                  "bicis_antes_comisiones": {
                    "type": "number",
                    "description": "Valor numérico «Bicis antes comisiones». Comisiones y liquidaciones.",
                    "x-cityflow-bubble-field": "Bicis antes comisiones",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Bicis antes comisiones». Commissions and settlements."
                      }
                    }
                  },
                  "bicis_en_uso": {
                    "type": "number",
                    "description": "Valor numérico «Bicis en uso ».",
                    "x-cityflow-bubble-field": "Bicis en uso",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Bicis en uso »."
                      }
                    }
                  },
                  "bicis_eskute_y_acton_juntas": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Bicis eskute y acton juntas».",
                    "x-cityflow-bubble-field": "Bicis eskute y acton juntas",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Bicis eskute y acton juntas»."
                      }
                    }
                  },
                  "bicis_totales": {
                    "type": "number",
                    "description": "Valor numérico «Bicis Totales».",
                    "x-cityflow-bubble-field": "Bicis Totales",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Bicis Totales»."
                      }
                    }
                  },
                  "bikes_available": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Bikes available».",
                    "x-cityflow-bubble-field": "Bikes available",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Bikes available»."
                      }
                    }
                  },
                  "bikes_currently_in_a_booking": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🚲 Bikes» («Bikes currently in a booking»).",
                    "x-cityflow-reference": "unique id de 🚲 Bikes",
                    "x-cityflow-bubble-field": "Bikes currently in a booking",
                    "x-cityflow-type-label": "lista de string (unique id de 🚲 Bikes)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🚲 Bikes)",
                        "description": "List. Reference to the related «🚲 Bikes» record («Bikes currently in a booking»)."
                      }
                    }
                  },
                  "bookings_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «Bookings» («Bookings list»).",
                    "x-cityflow-reference": "unique id de Bookings",
                    "x-cityflow-bubble-field": "Bookings list",
                    "x-cityflow-type-label": "lista de string (unique id de Bookings)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of Bookings)",
                        "description": "List. Reference to the related «Bookings» record («Bookings list»)."
                      }
                    }
                  },
                  "cambio_de_bateria": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Cambio de batería». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "Cambio de batería",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Cambio de batería». Vehicle battery level or status."
                      }
                    }
                  },
                  "charge_ebikes_whatsapp": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Charge Ebikes whatsapp». Teléfono / canal de mensajería.",
                    "x-cityflow-bubble-field": "Charge Ebikes whatsapp",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Charge Ebikes whatsapp». Phone / messaging channel."
                      }
                    }
                  },
                  "clients_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia a un Usuario de la plataforma («Clients list»).",
                    "x-cityflow-reference": "unique id de Usuario",
                    "x-cityflow-bubble-field": "Clients list",
                    "x-cityflow-type-label": "lista de string (unique id de Usuario)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of Usuario)",
                        "description": "List. Reference to a platform User («Clients list»)."
                      }
                    }
                  },
                  "cobrar_huespedes_canal_indirecto_hotelatelier": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Cobrar huéspedes Canal Indirecto (hotelatelier)».",
                    "x-cityflow-bubble-field": "Cobrar huéspedes Canal Indirecto (hotelatelier)",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Cobrar huéspedes Canal Indirecto (hotelatelier)»."
                      }
                    }
                  },
                  "cobro_al_finalizar": {
                    "type": "boolean",
                    "description": "Indicador sí/no «cobro al finalizar».",
                    "x-cityflow-bubble-field": "cobro al finalizar",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «cobro al finalizar»."
                      }
                    }
                  },
                  "cobro_segun_uso": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Cobro según uso».",
                    "x-cityflow-bubble-field": "Cobro según uso",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Cobro según uso»."
                      }
                    }
                  },
                  "comision": {
                    "type": "number",
                    "description": "Valor numérico «Comision %». Comisiones y liquidaciones.",
                    "x-cityflow-bubble-field": "Comision %",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Comision %». Commissions and settlements."
                      }
                    }
                  },
                  "comisiones_amazon": {
                    "type": "boolean",
                    "description": "Indicador sí/no «comisiones amazon». Comisiones y liquidaciones.",
                    "x-cityflow-bubble-field": "comisiones amazon",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «comisiones amazon». Commissions and settlements."
                      }
                    }
                  },
                  "commissions": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Commissions». Comisiones y liquidaciones.",
                    "x-cityflow-bubble-field": "Commissions",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Commissions». Commissions and settlements."
                      }
                    }
                  },
                  "count_of_averias": {
                    "type": "number",
                    "description": "Valor numérico «Count of averías». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "Count of averías",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Count of averías». Maintenance / breakdown."
                      }
                    }
                  },
                  "cuenta_dias_disponibilidad_horas": {
                    "type": "number",
                    "description": "Valor numérico «Cuenta días disponibilidad horas».",
                    "x-cityflow-bubble-field": "Cuenta días disponibilidad horas",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Cuenta días disponibilidad horas»."
                      }
                    }
                  },
                  "custom_itinerary_1": {
                    "type": "string",
                    "description": "Campo «Custom-itinerary-1».",
                    "x-cityflow-bubble-field": "Custom-itinerary-1",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Custom-itinerary-1» field."
                      }
                    }
                  },
                  "custom_itinerary_2": {
                    "type": "string",
                    "description": "Campo «Custom-itinerary-2».",
                    "x-cityflow-bubble-field": "Custom-itinerary-2",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Custom-itinerary-2» field."
                      }
                    }
                  },
                  "delivery_hotel": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Delivery hotel».",
                    "x-cityflow-bubble-field": "Delivery hotel",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Delivery hotel»."
                      }
                    }
                  },
                  "disponibilidad_por_horas": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Disponibilidad por horas».",
                    "x-cityflow-bubble-field": "Disponibilidad por horas",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Disponibilidad por horas»."
                      }
                    }
                  },
                  "duration_1_ebike_price": {
                    "type": "number",
                    "description": "Valor numérico «Duration-1 eBike Price». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Duration-1 eBike Price",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Duration-1 eBike Price». Price amount or configuration."
                      }
                    }
                  },
                  "duration_1_hours": {
                    "type": "number",
                    "description": "Valor numérico «Duration-1 Hours».",
                    "x-cityflow-bubble-field": "Duration-1 Hours",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Duration-1 Hours»."
                      }
                    }
                  },
                  "duration_1_mbike_price": {
                    "type": "number",
                    "description": "Valor numérico «Duration-1 mBike Price». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Duration-1 mBike Price",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Duration-1 mBike Price». Price amount or configuration."
                      }
                    }
                  },
                  "duration_2_ebike_price": {
                    "type": "number",
                    "description": "Valor numérico «Duration-2 eBike Price». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Duration-2 eBike Price",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Duration-2 eBike Price». Price amount or configuration."
                      }
                    }
                  },
                  "duration_2_hours": {
                    "type": "number",
                    "description": "Valor numérico «Duration-2 Hours».",
                    "x-cityflow-bubble-field": "Duration-2 Hours",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Duration-2 Hours»."
                      }
                    }
                  },
                  "duration_2_mbike_price": {
                    "type": "number",
                    "description": "Valor numérico «Duration-2 mBike Price». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Duration-2 mBike Price",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Duration-2 mBike Price». Price amount or configuration."
                      }
                    }
                  },
                  "duration_3_ebike_price": {
                    "type": "number",
                    "description": "Valor numérico «Duration-3 eBike Price». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Duration-3 eBike Price",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Duration-3 eBike Price». Price amount or configuration."
                      }
                    }
                  },
                  "duration_3_hours_difference_from_midnight": {
                    "type": "number",
                    "description": "Valor numérico «Duration-3 Hours (difference from midnight)».",
                    "x-cityflow-bubble-field": "Duration-3 Hours (difference from midnight)",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Duration-3 Hours (difference from midnight)»."
                      }
                    }
                  },
                  "duration_3_mbike_price": {
                    "type": "number",
                    "description": "Valor numérico «Duration-3 mBike Price». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Duration-3 mBike Price",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Duration-3 mBike Price». Price amount or configuration."
                      }
                    }
                  },
                  "e_bike_rides_before_charge": {
                    "type": "number",
                    "description": "Valor numérico «e-bike rides before charge».",
                    "x-cityflow-bubble-field": "e-bike rides before charge",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «e-bike rides before charge»."
                      }
                    }
                  },
                  "email_carga_bicis": {
                    "type": "string",
                    "description": "Campo «email carga bicis». Dirección de correo electrónico.",
                    "x-cityflow-bubble-field": "email carga bicis",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«email carga bicis» field. Email address."
                      }
                    }
                  },
                  "email_carga_bicis_2": {
                    "type": "string",
                    "description": "Campo «email carga bicis 2». Dirección de correo electrónico.",
                    "x-cityflow-bubble-field": "email carga bicis 2",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«email carga bicis 2» field. Email address."
                      }
                    }
                  },
                  "email_facturas": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Campo «email facturas». Dirección de correo electrónico.",
                    "x-cityflow-bubble-field": "email facturas",
                    "x-cityflow-type-label": "lista de string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string",
                        "description": "List. «email facturas» field. Email address."
                      }
                    }
                  },
                  "entregadas": {
                    "type": "number",
                    "description": "Valor numérico «Entregadas». Proceso de entrega/check-in.",
                    "x-cityflow-bubble-field": "Entregadas",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Entregadas». Handover/check-in process."
                      }
                    }
                  },
                  "estado_preparacion": {
                    "type": "string",
                    "description": "Opción del conjunto «OS_EstadoPreparación» («Estado Preparación»). Valores posibles: `1-En Preparación`, `4-En Envío`, `5-Entregado, Pendiente de Instalación`, `6-Instalación en Curso`, `7-Activo`, `2-Montaje y preparación`, `3-Proceso Activación`.",
                    "enum": [
                      "1-En Preparación",
                      "4-En Envío",
                      "5-Entregado, Pendiente de Instalación",
                      "6-Instalación en Curso",
                      "7-Activo",
                      "2-Montaje y preparación",
                      "3-Proceso Activación"
                    ],
                    "x-cityflow-reference": "opción de «OS_EstadoPreparación»",
                    "x-cityflow-bubble-field": "Estado Preparación",
                    "x-cityflow-type-label": "string (opción de «OS_EstadoPreparación»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «OS_EstadoPreparación»)",
                        "description": "Option from the «OS_EstadoPreparación» set («Estado Preparación»). Possible values: `1-En Preparación`, `4-En Envío`, `5-Entregado, Pendiente de Instalación`, `6-Instalación en Curso`, `7-Activo`, `2-Montaje y preparación`, `3-Proceso Activación`."
                      }
                    }
                  },
                  "fake_se_cobra_al_finalizar_el_viaje": {
                    "type": "boolean",
                    "description": "Indicador sí/no «fake Se cobra al finalizar el viaje».",
                    "x-cityflow-bubble-field": "fake Se cobra al finalizar el viaje",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «fake Se cobra al finalizar el viaje»."
                      }
                    }
                  },
                  "fecha_inicio_comisionar": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Fecha Inicio Comisionar». Comisiones y liquidaciones.",
                    "x-cityflow-bubble-field": "Fecha Inicio Comisionar",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Fecha Inicio Comisionar» date (commission start). Commissions and settlements."
                      }
                    }
                  },
                  "fecha_mantenimiento_prevista": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Fecha mantenimiento prevista». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "Fecha mantenimiento prevista",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Fecha mantenimiento prevista» date (scheduled maintenance). Maintenance / breakdown."
                      }
                    }
                  },
                  "finish_trip_when_lock_bike": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Finish trip when lock bike». Control o estado del candado del vehículo.",
                    "x-cityflow-bubble-field": "Finish trip when lock bike",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Finish trip when lock bike». Vehicle lock control or status."
                      }
                    }
                  },
                  "frontdesk_phone": {
                    "type": "number",
                    "description": "Valor numérico «Frontdesk_phone». Teléfono / canal de mensajería.",
                    "x-cityflow-bubble-field": "Frontdesk_phone",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Frontdesk_phone». Phone / messaging channel."
                      }
                    }
                  },
                  "group_tamano_flota": {
                    "type": "number",
                    "description": "Valor numérico «group tamaño flota».",
                    "x-cityflow-bubble-field": "group tamaño flota",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «group tamaño flota»."
                      }
                    }
                  },
                  "gs_alquileres_periodo": {
                    "type": "number",
                    "description": "Valor numérico «GS Alquileres Periodo».",
                    "x-cityflow-bubble-field": "GS Alquileres Periodo",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «GS Alquileres Periodo»."
                      }
                    }
                  },
                  "gs_usuarios_unicos": {
                    "type": "number",
                    "description": "Valor numérico «GS Usuarios Únicos».",
                    "x-cityflow-bubble-field": "GS Usuarios Únicos",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «GS Usuarios Únicos»."
                      }
                    }
                  },
                  "gs_usuarios_unicos_mensual": {
                    "type": "string",
                    "description": "Campo «GS Usuarios Únicos Mensual».",
                    "x-cityflow-bubble-field": "GS Usuarios Únicos Mensual",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«GS Usuarios Únicos Mensual» field."
                      }
                    }
                  },
                  "hora_mantenimiento": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Hora mantenimiento». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "Hora mantenimiento",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Hora mantenimiento» date (maintenance time). Maintenance / breakdown."
                      }
                    }
                  },
                  "ingresos_db": {
                    "type": "number",
                    "description": "Valor numérico «Ingresos (%) [DB]».",
                    "x-cityflow-bubble-field": "Ingresos (%) [DB]",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Ingresos (%) [DB]»."
                      }
                    }
                  },
                  "ingresos_este_mes": {
                    "type": "number",
                    "description": "Valor numérico «Ingresos_este_mes».",
                    "x-cityflow-bubble-field": "Ingresos_este_mes",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Ingresos_este_mes»."
                      }
                    }
                  },
                  "ingresos_totales": {
                    "type": "number",
                    "description": "Valor numérico «Ingresos_totales».",
                    "x-cityflow-bubble-field": "Ingresos_totales",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Ingresos_totales»."
                      }
                    }
                  },
                  "insurance_mandatory": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Insurance_mandatory».",
                    "x-cityflow-bubble-field": "Insurance_mandatory",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Insurance_mandatory»."
                      }
                    }
                  },
                  "last_maintenance": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «🛠️ Maintenances» («Last maintenance»). Mantenimiento / avería.",
                    "x-cityflow-reference": "unique id de 🛠️ Maintenances",
                    "x-cityflow-bubble-field": "Last maintenance",
                    "x-cityflow-type-label": "string (unique id de 🛠️ Maintenances)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of 🛠️ Maintenances)",
                        "description": "Reference to the related «🛠️ Maintenances» record («Last maintenance»). Maintenance / breakdown."
                      }
                    }
                  },
                  "last_maintenance_date": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Last Maintenance Date». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "Last Maintenance Date",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Last Maintenance Date» date. Maintenance / breakdown."
                      }
                    }
                  },
                  "listo_para_comisionar": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Listo para comisionar». Comisiones y liquidaciones.",
                    "x-cityflow-bubble-field": "Listo para comisionar",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Listo para comisionar». Commissions and settlements."
                      }
                    }
                  },
                  "maintenance_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🛠️ Maintenances» («Maintenance list»). Mantenimiento / avería.",
                    "x-cityflow-reference": "unique id de 🛠️ Maintenances",
                    "x-cityflow-bubble-field": "Maintenance list",
                    "x-cityflow-type-label": "lista de string (unique id de 🛠️ Maintenances)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🛠️ Maintenances)",
                        "description": "List. Reference to the related «🛠️ Maintenances» record («Maintenance list»). Maintenance / breakdown."
                      }
                    }
                  },
                  "months_in_activity": {
                    "type": "number",
                    "description": "Valor numérico «Months in Activity».",
                    "x-cityflow-bubble-field": "Months in Activity",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Months in Activity»."
                      }
                    }
                  },
                  "mostrar_bicis_con_bateria_baja_reserva": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Mostrar bicis con batería baja (reserva)». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "Mostrar bicis con batería baja (reserva)",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Mostrar bicis con batería baja (reserva)». Vehicle battery level or status."
                      }
                    }
                  },
                  "name": {
                    "type": "string",
                    "description": "Campo «name».",
                    "x-cityflow-bubble-field": "name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«name» field."
                      }
                    }
                  },
                  "no_cerrar_bici_con_menos_de_15": {
                    "type": "boolean",
                    "description": "Indicador sí/no «No cerrar bici con menos de 15%».",
                    "x-cityflow-bubble-field": "No cerrar bici con menos de 15%",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «No cerrar bici con menos de 15%»."
                      }
                    }
                  },
                  "no_usar_bicis_por_debajo_del_34": {
                    "type": "boolean",
                    "description": "Indicador sí/no «No usar bicis por debajo del 34%».",
                    "x-cityflow-bubble-field": "No usar bicis por debajo del 34%",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «No usar bicis por debajo del 34%»."
                      }
                    }
                  },
                  "nombre_email_facturas": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Campo «Nombre email facturas». Dirección de correo electrónico.",
                    "x-cityflow-bubble-field": "Nombre email facturas",
                    "x-cityflow-type-label": "lista de string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string",
                        "description": "List. «Nombre email facturas» field. Email address."
                      }
                    }
                  },
                  "open": {
                    "type": "boolean",
                    "description": "Indicador sí/no «open».",
                    "x-cityflow-bubble-field": "open",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «open»."
                      }
                    }
                  },
                  "open_2": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («open»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "open",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («open»)."
                      }
                    }
                  },
                  "openning_date": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Openning date».",
                    "x-cityflow-bubble-field": "Openning date",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Openning date» date."
                      }
                    }
                  },
                  "payments_on_free": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Payments On → Free?».",
                    "x-cityflow-bubble-field": "Payments On → Free?",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Payments On → Free?»."
                      }
                    }
                  },
                  "period_averias_count": {
                    "type": "number",
                    "description": "Valor numérico «Period averías count». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "Period averías count",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Period averías count». Maintenance / breakdown."
                      }
                    }
                  },
                  "permitir_poner_las_bicis_disponibles": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Permitir poner las bicis disponibles».",
                    "x-cityflow-bubble-field": "Permitir poner las bicis disponibles",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Permitir poner las bicis disponibles»."
                      }
                    }
                  },
                  "reservas_antes_comision": {
                    "type": "number",
                    "description": "Valor numérico «Reservas_antes_comision». Comisiones y liquidaciones.",
                    "x-cityflow-bubble-field": "Reservas_antes_comision",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Reservas_antes_comision». Commissions and settlements."
                      }
                    }
                  },
                  "restringir_acceso_hotel": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Restringir acceso hotel».",
                    "x-cityflow-bubble-field": "Restringir acceso hotel",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Restringir acceso hotel»."
                      }
                    }
                  },
                  "review_primer_uso": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Review primer uso».",
                    "x-cityflow-bubble-field": "Review primer uso",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Review primer uso»."
                      }
                    }
                  },
                  "room_number": {
                    "type": "string",
                    "description": "Campo «room number».",
                    "x-cityflow-bubble-field": "room number",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«room number» field."
                      }
                    }
                  },
                  "room_number_new": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Campo «Room Number New».",
                    "x-cityflow-bubble-field": "Room Number New",
                    "x-cityflow-type-label": "lista de string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string",
                        "description": "List. «Room Number New» field."
                      }
                    }
                  },
                  "se_cobra_al_finalizar_el_viaje": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Se cobra al finalizar el viaje».",
                    "x-cityflow-bubble-field": "Se cobra al finalizar el viaje",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Se cobra al finalizar el viaje»."
                      }
                    }
                  },
                  "today_s_booking_number": {
                    "type": "number",
                    "description": "Valor numérico «Today's Booking Number».",
                    "x-cityflow-bubble-field": "Today's Booking Number",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Today's Booking Number»."
                      }
                    }
                  },
                  "ver_bateria": {
                    "type": "boolean",
                    "description": "Indicador sí/no «ver batería ». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "ver batería",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «ver batería ». Vehicle battery level or status."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "bw_pay_cabecera_sent": false,
                "bw_aviso_cargar_bicis_enviado": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Hoteles",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Hoteles"
      }
    },
    "/update_incident": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateIncident",
        "summary": "Incidencias reportadas sobre vehículos o servicio",
        "description": "Incidencias reportadas sobre vehículos o servicio.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Incidents reported on vehicles or service",
            "description": "Incidents reported on vehicles or service.",
            "table": "Incidents"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "bike": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «🚲 Bikes» («Bike»).",
                    "x-cityflow-reference": "unique id de 🚲 Bikes",
                    "x-cityflow-bubble-field": "Bike",
                    "x-cityflow-type-label": "string (unique id de 🚲 Bikes)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of 🚲 Bikes)",
                        "description": "Reference to the related «🚲 Bikes» record («Bike»)."
                      }
                    }
                  },
                  "comments": {
                    "type": "string",
                    "description": "Campo «Comments».",
                    "x-cityflow-bubble-field": "Comments",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Comments» field."
                      }
                    }
                  },
                  "hotel": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («Hotel»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "Hotel",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («Hotel»)."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "bike": "<unique_id>",
                "comments": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Incidencias",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Incidencias"
      }
    },
    "/update_maintenance": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateMaintenance",
        "summary": "Partes de mantenimiento y asistencia técnica de la flota",
        "description": "Partes de mantenimiento y asistencia técnica de la flota.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Fleet maintenance and technical assistance reports",
            "description": "Fleet maintenance and technical assistance reports.",
            "table": "Maintenance"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "aa_client": {
                    "type": "string",
                    "description": "Referencia a un Usuario de la plataforma («AA_Client»).",
                    "x-cityflow-reference": "unique id de Usuario",
                    "x-cityflow-bubble-field": "AA_Client",
                    "x-cityflow-type-label": "string (unique id de Usuario)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of Usuario)",
                        "description": "Reference to a platform User («AA_Client»)."
                      }
                    }
                  },
                  "aa_hotel": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («AA_Hotel»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "AA_Hotel",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («AA_Hotel»)."
                      }
                    }
                  },
                  "bicicleta": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «🚲 Bikes» («Bicicleta»).",
                    "x-cityflow-reference": "unique id de 🚲 Bikes",
                    "x-cityflow-bubble-field": "Bicicleta",
                    "x-cityflow-type-label": "string (unique id de 🚲 Bikes)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of 🚲 Bikes)",
                        "description": "Reference to the related «🚲 Bikes» record («Bicicleta»)."
                      }
                    }
                  },
                  "date": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Date».",
                    "x-cityflow-bubble-field": "Date",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Date» date."
                      }
                    }
                  },
                  "image": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «Image» (se envía como URL).",
                    "x-cityflow-bubble-field": "Image",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «Image» (sent as a URL)."
                      }
                    }
                  },
                  "image_compressed": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Image compressed».",
                    "x-cityflow-bubble-field": "Image compressed",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Image compressed»."
                      }
                    }
                  },
                  "message": {
                    "type": "string",
                    "description": "Campo «Message».",
                    "x-cityflow-bubble-field": "Message",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Message» field."
                      }
                    }
                  },
                  "name": {
                    "type": "string",
                    "description": "Campo «Name».",
                    "x-cityflow-bubble-field": "Name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Name» field."
                      }
                    }
                  },
                  "signature": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «Signature» (se envía como URL).",
                    "x-cityflow-bubble-field": "Signature",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «Signature» (sent as a URL)."
                      }
                    }
                  },
                  "signed": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Signed».",
                    "x-cityflow-bubble-field": "Signed",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Signed»."
                      }
                    }
                  },
                  "time_end": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Time end».",
                    "x-cityflow-bubble-field": "Time end",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Time end» date."
                      }
                    }
                  },
                  "time_start": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Time start».",
                    "x-cityflow-bubble-field": "Time start",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Time start» date."
                      }
                    }
                  },
                  "todo_list": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "Frenos",
                        "Cadena",
                        "Luces",
                        "Manillar",
                        "Sillín",
                        "Ruedas",
                        "Pata de cabra",
                        "Tornillería"
                      ]
                    },
                    "description": "Lista. Opción del conjunto «os_Acton_Todo» («Todo list»). Valores posibles: `Frenos`, `Cadena`, `Luces`, `Manillar`, `Sillín`, `Ruedas`, `Pata de cabra`, `Tornillería`.",
                    "x-cityflow-reference": "opción de «os_Acton_Todo»",
                    "x-cityflow-bubble-field": "Todo list",
                    "x-cityflow-type-label": "lista de string (opción de «os_Acton_Todo»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (option of «os_Acton_Todo»)",
                        "description": "List. Option from the «os_Acton_Todo» set («Todo list»). Possible values: `Frenos`, `Cadena`, `Luces`, `Manillar`, `Sillín`, `Ruedas`, `Pata de cabra`, `Tornillería`."
                      }
                    }
                  },
                  "todo_list_completed": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Todo list - Completed».",
                    "x-cityflow-bubble-field": "Todo list - Completed",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Todo list - Completed»."
                      }
                    }
                  },
                  "todo_list_indigo": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "Frenos",
                        "Cadena",
                        "Luces",
                        "Manillar",
                        "Sillín",
                        "Marchas",
                        "Ruedas",
                        "Pata de cabra"
                      ]
                    },
                    "description": "Lista. Opción del conjunto «os_Indigo_Todo» («Todo List Indigo»). Valores posibles: `Frenos`, `Cadena`, `Luces`, `Manillar`, `Sillín`, `Marchas`, `Ruedas`, `Pata de cabra`.",
                    "x-cityflow-reference": "opción de «os_Indigo_Todo»",
                    "x-cityflow-bubble-field": "Todo List Indigo",
                    "x-cityflow-type-label": "lista de string (opción de «os_Indigo_Todo»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (option of «os_Indigo_Todo»)",
                        "description": "List. Option from the «os_Indigo_Todo» set («Todo List Indigo»). Possible values: `Frenos`, `Cadena`, `Luces`, `Manillar`, `Sillín`, `Marchas`, `Ruedas`, `Pata de cabra`."
                      }
                    }
                  },
                  "total_hours": {
                    "type": "number",
                    "description": "Valor numérico «Total hours».",
                    "x-cityflow-bubble-field": "Total hours",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Total hours»."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "aa_client": "<unique_id>",
                "aa_hotel": "<unique_id>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Mantenimientos",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Mantenimientos"
      }
    },
    "/update_bike_model": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateBikeModel",
        "summary": "Catálogo de modelos de vehículo disponibles",
        "description": "Catálogo de modelos de vehículo disponibles.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Catalog of available vehicle models",
            "description": "Catalog of available vehicle models.",
            "table": "Bike models"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "bike_without_background": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «Bike without background» (se envía como URL).",
                    "x-cityflow-bubble-field": "Bike without background",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «Bike without background» (sent as a URL)."
                      }
                    }
                  },
                  "homescreen_image_blue_circle": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «Homescreen Image (blue circle)» (se envía como URL).",
                    "x-cityflow-bubble-field": "Homescreen Image (blue circle)",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «Homescreen Image (blue circle)» (sent as a URL)."
                      }
                    }
                  },
                  "name": {
                    "type": "string",
                    "description": "Campo «Name».",
                    "x-cityflow-bubble-field": "Name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Name» field."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "bike_without_background": "https://ejemplo.cityflow.app/archivo.jpg",
                "homescreen_image_blue_circle": "https://ejemplo.cityflow.app/archivo.jpg"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Modelos de bicicleta",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Modelos de bicicleta"
      }
    },
    "/update_payment": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updatePayment",
        "summary": "Cobros y transacciones asociadas a reservas",
        "description": "Cobros y transacciones asociadas a reservas.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Payments and transactions linked to bookings",
            "description": "Payments and transactions linked to bookings.",
            "table": "Payments"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "amount": {
                    "type": "number",
                    "description": "Valor numérico «Amount». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Amount",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Amount». Price amount or configuration."
                      }
                    }
                  },
                  "bikes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🚲 Bikes» («Bikes»).",
                    "x-cityflow-reference": "unique id de 🚲 Bikes",
                    "x-cityflow-bubble-field": "Bikes",
                    "x-cityflow-type-label": "lista de string (unique id de 🚲 Bikes)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🚲 Bikes)",
                        "description": "List. Reference to the related «🚲 Bikes» record («Bikes»)."
                      }
                    }
                  },
                  "billing_reason": {
                    "type": "string",
                    "description": "Campo «Billing reason».",
                    "x-cityflow-bubble-field": "Billing reason",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Billing reason» field."
                      }
                    }
                  },
                  "booking": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «Bookings» («Booking»).",
                    "x-cityflow-reference": "unique id de Bookings",
                    "x-cityflow-bubble-field": "Booking",
                    "x-cityflow-type-label": "string (unique id de Bookings)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of Bookings)",
                        "description": "Reference to the related «Bookings» record («Booking»)."
                      }
                    }
                  },
                  "client": {
                    "type": "string",
                    "description": "Referencia a un Usuario de la plataforma («Client»).",
                    "x-cityflow-reference": "unique id de Usuario",
                    "x-cityflow-bubble-field": "Client",
                    "x-cityflow-type-label": "string (unique id de Usuario)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of Usuario)",
                        "description": "Reference to a platform User («Client»)."
                      }
                    }
                  },
                  "currency": {
                    "type": "string",
                    "description": "Campo «Currency».",
                    "x-cityflow-bubble-field": "Currency",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Currency» field."
                      }
                    }
                  },
                  "date": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Date».",
                    "x-cityflow-bubble-field": "Date",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Date» date."
                      }
                    }
                  },
                  "hosted_invoice_url": {
                    "type": "string",
                    "description": "Campo «hosted_invoice_url». Dato de facturación.",
                    "x-cityflow-bubble-field": "hosted_invoice_url",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«hosted_invoice_url» field. Billing data."
                      }
                    }
                  },
                  "hotel": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («Hotel»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "Hotel",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («Hotel»)."
                      }
                    }
                  },
                  "id_charge": {
                    "type": "string",
                    "description": "Campo «ID charge».",
                    "x-cityflow-bubble-field": "ID charge",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«ID charge» field."
                      }
                    }
                  },
                  "invoiceid": {
                    "type": "string",
                    "description": "Campo «InvoiceID». Dato de facturación.",
                    "x-cityflow-bubble-field": "InvoiceID",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«InvoiceID» field. Billing data."
                      }
                    }
                  },
                  "plan_url": {
                    "type": "string",
                    "description": "Campo «Plan_url».",
                    "x-cityflow-bubble-field": "Plan_url",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Plan_url» field."
                      }
                    }
                  },
                  "stripe_id_customer": {
                    "type": "string",
                    "description": "Campo «Stripe ID customer». Dato de la pasarela de pagos Stripe.",
                    "x-cityflow-bubble-field": "Stripe ID customer",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Stripe ID customer» field. Stripe payment gateway data."
                      }
                    }
                  },
                  "stripe_payment_status": {
                    "type": "string",
                    "description": "Campo «Stripe_payment_status». Dato de la pasarela de pagos Stripe.",
                    "x-cityflow-bubble-field": "Stripe_payment_status",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Stripe_payment_status» field. Stripe payment gateway data."
                      }
                    }
                  },
                  "stripe_user_email": {
                    "type": "string",
                    "description": "Campo «stripe_user_email». Dato de la pasarela de pagos Stripe.",
                    "x-cityflow-bubble-field": "stripe_user_email",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«stripe_user_email» field. Stripe payment gateway data."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "amount": 0,
                "bikes": [
                  "<unique_id>"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Pagos",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Pagos"
      }
    },
    "/update_delivery_plan": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateDeliveryPlan",
        "summary": "Planes de reparto/entrega de vehículos a propiedades",
        "description": "Planes de reparto/entrega de vehículos a propiedades.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Vehicle delivery plans to properties",
            "description": "Vehicle delivery plans to properties.",
            "table": "Delivery plans"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "delivery_plans": {
                    "type": "string",
                    "description": "Opción del conjunto «Delivery-Plans» («Delivery Plans»). Valores posibles: `Basic`, `Secure`.",
                    "enum": [
                      "Basic",
                      "Secure"
                    ],
                    "x-cityflow-reference": "opción de «Delivery-Plans»",
                    "x-cityflow-bubble-field": "Delivery Plans",
                    "x-cityflow-type-label": "string (opción de «Delivery-Plans»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «Delivery-Plans»)",
                        "description": "Option from the «Delivery-Plans» set («Delivery Plans»). Possible values: `Basic`, `Secure`."
                      }
                    }
                  },
                  "price": {
                    "type": "number",
                    "description": "Valor numérico «Price». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Price",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Price». Price amount or configuration."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "delivery_plans": "Basic",
                "price": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Planes de entrega",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Planes de entrega"
      }
    },
    "/update_price": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updatePrice",
        "summary": "Tarifas base de alquiler",
        "description": "Tarifas base de alquiler.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Base rental rates",
            "description": "Base rental rates.",
            "table": "Prices"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "id_price_test": {
                    "type": "string",
                    "description": "Campo «Id price test». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Id price test",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Id price test» field. Price amount or configuration."
                      }
                    }
                  },
                  "time": {
                    "type": "string",
                    "description": "Campo «Time».",
                    "x-cityflow-bubble-field": "Time",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Time» field."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "id_price_test": "<valor>",
                "time": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Precios",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Precios"
      }
    },
    "/update_order_preparation": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateOrderPreparation",
        "summary": "Preparación logística de pedidos de material o vehículos",
        "description": "Preparación logística de pedidos de material o vehículos.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Logistics preparation of material or vehicle orders",
            "description": "Logistics preparation of material or vehicle orders.",
            "table": "Order preparation"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "bicicletas_iniciales": {
                    "type": "number",
                    "description": "Valor numérico «Bicicletas Iniciales».",
                    "x-cityflow-bubble-field": "Bicicletas Iniciales",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Bicicletas Iniciales»."
                      }
                    }
                  },
                  "cadena": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «🏨 Cadenas» («Cadena»).",
                    "x-cityflow-reference": "unique id de 🏨 Cadenas",
                    "x-cityflow-bubble-field": "Cadena",
                    "x-cityflow-type-label": "string (unique id de 🏨 Cadenas)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of 🏨 Cadenas)",
                        "description": "Reference to the related «🏨 Cadenas» record («Cadena»)."
                      }
                    }
                  },
                  "entregadas": {
                    "type": "number",
                    "description": "Valor numérico «Entregadas». Proceso de entrega/check-in.",
                    "x-cityflow-bubble-field": "Entregadas",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Entregadas». Handover/check-in process."
                      }
                    }
                  },
                  "estado": {
                    "type": "string",
                    "description": "Opción del conjunto «OS_EstadoPreparación» («Estado»). Valores posibles: `1-En Preparación`, `4-En Envío`, `5-Entregado, Pendiente de Instalación`, `6-Instalación en Curso`, `7-Activo`, `2-Montaje y preparación`, `3-Proceso Activación`.",
                    "enum": [
                      "1-En Preparación",
                      "4-En Envío",
                      "5-Entregado, Pendiente de Instalación",
                      "6-Instalación en Curso",
                      "7-Activo",
                      "2-Montaje y preparación",
                      "3-Proceso Activación"
                    ],
                    "x-cityflow-reference": "opción de «OS_EstadoPreparación»",
                    "x-cityflow-bubble-field": "Estado",
                    "x-cityflow-type-label": "string (opción de «OS_EstadoPreparación»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «OS_EstadoPreparación»)",
                        "description": "Option from the «OS_EstadoPreparación» set («Estado»). Possible values: `1-En Preparación`, `4-En Envío`, `5-Entregado, Pendiente de Instalación`, `6-Instalación en Curso`, `7-Activo`, `2-Montaje y preparación`, `3-Proceso Activación`."
                      }
                    }
                  },
                  "hotel": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («Hotel»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "Hotel",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («Hotel»)."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "bicicletas_iniciales": 0,
                "cadena": "<unique_id>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Preparación de pedidos",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Preparación de pedidos"
      }
    },
    "/update_proforma": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateProforma",
        "summary": "Documentos proforma para facturación",
        "description": "Documentos proforma para facturación.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Proforma documents for billing",
            "description": "Proforma documents for billing.",
            "table": "Proformas"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "bikes_number": {
                    "type": "number",
                    "description": "Valor numérico «Bikes number».",
                    "x-cityflow-bubble-field": "Bikes number",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Bikes number»."
                      }
                    }
                  },
                  "cantidad_1": {
                    "type": "number",
                    "description": "Valor numérico «Cantidad 1».",
                    "x-cityflow-bubble-field": "Cantidad 1",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Cantidad 1»."
                      }
                    }
                  },
                  "cantidad_2": {
                    "type": "number",
                    "description": "Valor numérico «Cantidad 2».",
                    "x-cityflow-bubble-field": "Cantidad 2",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Cantidad 2»."
                      }
                    }
                  },
                  "cantidad_3": {
                    "type": "number",
                    "description": "Valor numérico «Cantidad 3».",
                    "x-cityflow-bubble-field": "Cantidad 3",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Cantidad 3»."
                      }
                    }
                  },
                  "locations_number": {
                    "type": "number",
                    "description": "Valor numérico «Locations number». Ubicación / posicionamiento GPS.",
                    "x-cityflow-bubble-field": "Locations number",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Locations number». Location / GPS positioning."
                      }
                    }
                  },
                  "price_1": {
                    "type": "number",
                    "description": "Valor numérico «Price 1». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Price 1",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Price 1». Price amount or configuration."
                      }
                    }
                  },
                  "price_2": {
                    "type": "number",
                    "description": "Valor numérico «Price 2». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Price 2",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Price 2». Price amount or configuration."
                      }
                    }
                  },
                  "price_3": {
                    "type": "number",
                    "description": "Valor numérico «Price 3». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Price 3",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Price 3». Price amount or configuration."
                      }
                    }
                  },
                  "price_4": {
                    "type": "number",
                    "description": "Valor numérico «Price 4». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Price 4",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Price 4». Price amount or configuration."
                      }
                    }
                  },
                  "total_bikes": {
                    "type": "number",
                    "description": "Valor numérico «Total bikes».",
                    "x-cityflow-bubble-field": "Total bikes",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Total bikes»."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "bikes_number": 0,
                "cantidad_1": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Proformas",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Proformas"
      }
    },
    "/update_city_proposal": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateCityProposal",
        "summary": "Candidaturas y estudios de expansión a nuevas ciudades",
        "description": "Candidaturas y estudios de expansión a nuevas ciudades.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Applications and expansion studies for new cities",
            "description": "Applications and expansion studies for new cities.",
            "table": "City proposals"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "upselling": {
                    "type": "number",
                    "description": "Valor numérico «% upselling».",
                    "x-cityflow-bubble-field": "% upselling",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «% upselling»."
                      }
                    }
                  },
                  "mantenimiento": {
                    "type": "number",
                    "description": "Valor numérico «%mantenimiento». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "%mantenimiento",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «%mantenimiento». Maintenance / breakdown."
                      }
                    }
                  },
                  "amortizacion_anual_flota": {
                    "type": "number",
                    "description": "Valor numérico «amortización anual flota».",
                    "x-cityflow-bubble-field": "amortización anual flota",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «amortización anual flota»."
                      }
                    }
                  },
                  "beneficio_neto_anual_estimado": {
                    "type": "number",
                    "description": "Valor numérico «Beneficio neto anual estimado».",
                    "x-cityflow-bubble-field": "Beneficio neto anual estimado",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Beneficio neto anual estimado»."
                      }
                    }
                  },
                  "cantidad_bicis": {
                    "type": "number",
                    "description": "Valor numérico «Cantidad bicis».",
                    "x-cityflow-bubble-field": "Cantidad bicis",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Cantidad bicis»."
                      }
                    }
                  },
                  "ciudad": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «🌆 Cities» («Ciudad»).",
                    "x-cityflow-reference": "unique id de 🌆 Cities",
                    "x-cityflow-bubble-field": "Ciudad",
                    "x-cityflow-type-label": "string (unique id de 🌆 Cities)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of 🌆 Cities)",
                        "description": "Reference to the related «🌆 Cities» record («Ciudad»)."
                      }
                    }
                  },
                  "costes_local": {
                    "type": "number",
                    "description": "Valor numérico «costes local».",
                    "x-cityflow-bubble-field": "costes local",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «costes local»."
                      }
                    }
                  },
                  "cuota_mensual_por_bici": {
                    "type": "number",
                    "description": "Valor numérico «Cuota mensual por bici».",
                    "x-cityflow-bubble-field": "Cuota mensual por bici",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Cuota mensual por bici»."
                      }
                    }
                  },
                  "direccion_ip": {
                    "type": "string",
                    "description": "Campo «Dirección IP».",
                    "x-cityflow-bubble-field": "Dirección IP",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Dirección IP» field."
                      }
                    }
                  },
                  "gastos_all": {
                    "type": "number",
                    "description": "Valor numérico «Gastos all».",
                    "x-cityflow-bubble-field": "Gastos all",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Gastos all»."
                      }
                    }
                  },
                  "mantenimiento_y_operativa_por_bici": {
                    "type": "number",
                    "description": "Valor numérico «mantenimiento y operativa por bici». Mantenimiento / avería.",
                    "x-cityflow-bubble-field": "mantenimiento y operativa por bici",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «mantenimiento y operativa por bici». Maintenance / breakdown."
                      }
                    }
                  },
                  "neumatico_macizo_por_bici": {
                    "type": "number",
                    "description": "Valor numérico «Neumático macizo por bici».",
                    "x-cityflow-bubble-field": "Neumático macizo por bici",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Neumático macizo por bici»."
                      }
                    }
                  },
                  "payback": {
                    "type": "number",
                    "description": "Valor numérico «Payback».",
                    "x-cityflow-bubble-field": "Payback",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Payback»."
                      }
                    }
                  },
                  "precio_bici_unitario": {
                    "type": "number",
                    "description": "Valor numérico «precio bici (unitario)». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "precio bici (unitario)",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «precio bici (unitario)». Price amount or configuration."
                      }
                    }
                  },
                  "precio_compra_e_bike": {
                    "type": "number",
                    "description": "Valor numérico «Precio compra e-bike». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Precio compra e-bike",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Precio compra e-bike». Price amount or configuration."
                      }
                    }
                  },
                  "precio_repuestos": {
                    "type": "number",
                    "description": "Valor numérico «Precio repuestos». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Precio repuestos",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Precio repuestos». Price amount or configuration."
                      }
                    }
                  },
                  "renting_por_bici": {
                    "type": "number",
                    "description": "Valor numérico «Renting por bici».",
                    "x-cityflow-bubble-field": "Renting por bici",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Renting por bici»."
                      }
                    }
                  },
                  "roi_a_5_anos": {
                    "type": "number",
                    "description": "Valor numérico «ROI a 5 años».",
                    "x-cityflow-bubble-field": "ROI a 5 años",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «ROI a 5 años»."
                      }
                    }
                  },
                  "servicio_cityflow_por_bici": {
                    "type": "number",
                    "description": "Valor numérico «servicio cityflow por bici».",
                    "x-cityflow-bubble-field": "servicio cityflow por bici",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «servicio cityflow por bici»."
                      }
                    }
                  },
                  "suministros": {
                    "type": "number",
                    "description": "Valor numérico «suministros».",
                    "x-cityflow-bubble-field": "suministros",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «suministros»."
                      }
                    }
                  },
                  "total_inversion": {
                    "type": "number",
                    "description": "Valor numérico «Total inversión».",
                    "x-cityflow-bubble-field": "Total inversión",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Total inversión»."
                      }
                    }
                  },
                  "transporte_total": {
                    "type": "number",
                    "description": "Valor numérico «transporte total».",
                    "x-cityflow-bubble-field": "transporte total",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «transporte total»."
                      }
                    }
                  },
                  "vinilos_por_bici": {
                    "type": "number",
                    "description": "Valor numérico «vinilos por bici».",
                    "x-cityflow-bubble-field": "vinilos por bici",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «vinilos por bici»."
                      }
                    }
                  },
                  "vinilos_total": {
                    "type": "number",
                    "description": "Valor numérico «vinilos total».",
                    "x-cityflow-bubble-field": "vinilos total",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «vinilos total»."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "upselling": 0,
                "mantenimiento": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Propuestas de ciudades",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Propuestas de ciudades"
      }
    },
    "/update_booking": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateBooking",
        "summary": "Reservas y alquileres: fechas, cliente, vehículos, pagos y ciclo de vida completo",
        "description": "Reservas y alquileres: fechas, cliente, vehículos, pagos y ciclo de vida completo.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Bookings and rentals: dates, customer, vehicles, payments and the full lifecycle",
            "description": "Bookings and rentals: dates, customer, vehicles, payments and the full lifecycle.",
            "table": "Bookings"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "1h_warning_whatsapp": {
                    "type": "boolean",
                    "description": "Indicador sí/no «1h warning whatsapp». Teléfono / canal de mensajería.",
                    "x-cityflow-bubble-field": "1h warning whatsapp",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «1h warning whatsapp». Phone / messaging channel."
                      }
                    }
                  },
                  "2h_warning_whatsapp": {
                    "type": "boolean",
                    "description": "Indicador sí/no «2h warning whatsapp». Teléfono / canal de mensajería.",
                    "x-cityflow-bubble-field": "2h warning whatsapp",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «2h warning whatsapp». Phone / messaging channel."
                      }
                    }
                  },
                  "30_min_warning_whatsapp": {
                    "type": "boolean",
                    "description": "Indicador sí/no «30 min warning whatsapp». Teléfono / canal de mensajería.",
                    "x-cityflow-bubble-field": "30 min warning whatsapp",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «30 min warning whatsapp». Phone / messaging channel."
                      }
                    }
                  },
                  "a_in_advance": {
                    "type": "boolean",
                    "description": "Indicador sí/no «A_in-advance».",
                    "x-cityflow-bubble-field": "A_in-advance",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «A_in-advance»."
                      }
                    }
                  },
                  "a_os": {
                    "type": "string",
                    "description": "Campo «A_OS».",
                    "x-cityflow-bubble-field": "A_OS",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«A_OS» field."
                      }
                    }
                  },
                  "aa_blocked_bikes_in_advance": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🚲 Bikes» («AA_Blocked Bikes (in-advance)»). Control o estado del candado del vehículo.",
                    "x-cityflow-reference": "unique id de 🚲 Bikes",
                    "x-cityflow-bubble-field": "AA_Blocked Bikes (in-advance)",
                    "x-cityflow-type-label": "lista de string (unique id de 🚲 Bikes)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🚲 Bikes)",
                        "description": "List. Reference to the related «🚲 Bikes» record («AA_Blocked Bikes (in-advance)»). Vehicle lock control or status."
                      }
                    }
                  },
                  "aa_closed": {
                    "type": "boolean",
                    "description": "Indicador sí/no «AA_Closed».",
                    "x-cityflow-bubble-field": "AA_Closed",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «AA_Closed»."
                      }
                    }
                  },
                  "aa_current_step": {
                    "type": "string",
                    "description": "Opción del conjunto «os_Paso» («AA_Current_step»). Valores posibles: `2-lenght`, `4.1-checkout`, `1-bikes`, `scan-home`, `scan-ended`, `scan-extra-time`, `3-email`, `4.2-free-checkout`.",
                    "enum": [
                      "2-lenght"
                    ],
                    "x-cityflow-reference": "opción de «os_Paso»",
                    "x-cityflow-bubble-field": "AA_Current_step",
                    "x-cityflow-type-label": "string (opción de «os_Paso»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «os_Paso»)",
                        "description": "Option from the «os_Paso» set («AA_Current_step»). Possible values: `2-lenght`, `4. 1-checkout`, `1-bikes`, `scan-home`, `scan-ended`, `scan-extra-time`, `3-email`, `4.2-free-checkout`."
                      }
                    }
                  },
                  "aa_hotel": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («AA_Hotel»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "AA_Hotel",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («AA_Hotel»)."
                      }
                    }
                  },
                  "aa_precio_total": {
                    "type": "number",
                    "description": "Valor numérico «AA_Precio_total». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "AA_Precio_total",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «AA_Precio_total». Price amount or configuration."
                      }
                    }
                  },
                  "aa_reached_scans": {
                    "type": "boolean",
                    "description": "Indicador sí/no «AA_reached_scans».",
                    "x-cityflow-bubble-field": "AA_reached_scans",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «AA_reached_scans»."
                      }
                    }
                  },
                  "aa_rented_bikes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🚲 Bikes» («AA_Rented Bikes»).",
                    "x-cityflow-reference": "unique id de 🚲 Bikes",
                    "x-cityflow-bubble-field": "AA_Rented Bikes",
                    "x-cityflow-type-label": "lista de string (unique id de 🚲 Bikes)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🚲 Bikes)",
                        "description": "List. Reference to the related «🚲 Bikes» record («AA_Rented Bikes»)."
                      }
                    }
                  },
                  "aa_status": {
                    "type": "string",
                    "description": "Opción del conjunto «os_Status» («AA_Status»). Valores posibles: `1.Being created`, `2.1.Charged`, `6.Ended`, `3.Started`, `5.Extended`, `2.2.Refunded`, `4.Unlocked`.",
                    "x-cityflow-reference": "opción de «os_Status»",
                    "x-cityflow-bubble-field": "AA_Status",
                    "x-cityflow-type-label": "string (opción de «os_Status»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «os_Status»)",
                        "description": "Option from the «os_Status» set («AA_Status»). Possible values: `1. Being created`, `2.1.Charged`, `6.Ended`, `3.Started`, `5.Extended`, `2.2.Refunded`, `4.Unlocked`."
                      }
                    }
                  },
                  "aa_user": {
                    "type": "string",
                    "description": "Referencia a un Usuario de la plataforma («AA_User»).",
                    "x-cityflow-reference": "unique id de Usuario",
                    "x-cityflow-bubble-field": "AA_User",
                    "x-cityflow-type-label": "string (unique id de Usuario)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of Usuario)",
                        "description": "Reference to a platform User («AA_User»)."
                      }
                    }
                  },
                  "additional_accessories": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Campo «Additional Accessories».",
                    "x-cityflow-bubble-field": "Additional Accessories",
                    "x-cityflow-type-label": "lista de string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string",
                        "description": "List. «Additional Accessories» field."
                      }
                    }
                  },
                  "api_id_10_min_before_ending": {
                    "type": "string",
                    "description": "Campo «API ID - 10 Min before ending».",
                    "x-cityflow-bubble-field": "API ID - 10 Min before ending",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«API ID - 10 Min before ending» field."
                      }
                    }
                  },
                  "api_id_booking_end": {
                    "type": "string",
                    "description": "Campo «API ID - Booking End».",
                    "x-cityflow-bubble-field": "API ID - Booking End",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«API ID - Booking End» field."
                      }
                    }
                  },
                  "api_id_day_after": {
                    "type": "string",
                    "description": "Campo «API ID - Day After».",
                    "x-cityflow-bubble-field": "API ID - Day After",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«API ID - Day After» field."
                      }
                    }
                  },
                  "arrival": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Arrival».",
                    "x-cityflow-bubble-field": "Arrival",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Arrival» date."
                      }
                    }
                  },
                  "bicicletas_reemplazadas": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🚲 Bikes» («Bicicletas reemplazadas»).",
                    "x-cityflow-reference": "unique id de 🚲 Bikes",
                    "x-cityflow-bubble-field": "Bicicletas reemplazadas",
                    "x-cityflow-type-label": "lista de string (unique id de 🚲 Bikes)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🚲 Bikes)",
                        "description": "List. Reference to the related «🚲 Bikes» record («Bicicletas reemplazadas»)."
                      }
                    }
                  },
                  "bicis_alquiladas_aprobacion_de_bateria_baja": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🚲 Bikes» («Bicis alquiladas aprobación de batería baja»). Nivel o estado de batería del vehículo.",
                    "x-cityflow-reference": "unique id de 🚲 Bikes",
                    "x-cityflow-bubble-field": "Bicis alquiladas aprobación de batería baja",
                    "x-cityflow-type-label": "lista de string (unique id de 🚲 Bikes)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🚲 Bikes)",
                        "description": "List. Reference to the related «🚲 Bikes» record («Bicis alquiladas aprobación de batería baja»). Vehicle battery level or status."
                      }
                    }
                  },
                  "bicis_disponibles": {
                    "type": "number",
                    "description": "Valor numérico «Bicis Disponibles».",
                    "x-cityflow-bubble-field": "Bicis Disponibles",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Bicis Disponibles»."
                      }
                    }
                  },
                  "bicis_retiradas_del_alquiler": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🚲 Bikes» («Bicis retiradas del alquiler»).",
                    "x-cityflow-reference": "unique id de 🚲 Bikes",
                    "x-cityflow-bubble-field": "Bicis retiradas del alquiler",
                    "x-cityflow-type-label": "lista de string (unique id de 🚲 Bikes)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🚲 Bikes)",
                        "description": "List. Reference to the related «🚲 Bikes» record («Bicis retiradas del alquiler»)."
                      }
                    }
                  },
                  "bikes_available_at_the_hotel": {
                    "type": "number",
                    "description": "Valor numérico «Bikes Available at the Hotel».",
                    "x-cityflow-bubble-field": "Bikes Available at the Hotel",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Bikes Available at the Hotel»."
                      }
                    }
                  },
                  "bikes_quantity": {
                    "type": "number",
                    "description": "Valor numérico «Bikes Quantity».",
                    "x-cityflow-bubble-field": "Bikes Quantity",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Bikes Quantity»."
                      }
                    }
                  },
                  "booking_end_sent": {
                    "type": "boolean",
                    "description": "Indicador sí/no «booking_end sent».",
                    "x-cityflow-bubble-field": "booking_end sent",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «booking_end sent»."
                      }
                    }
                  },
                  "browser": {
                    "type": "string",
                    "description": "Campo «Browser».",
                    "x-cityflow-bubble-field": "Browser",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Browser» field."
                      }
                    }
                  },
                  "cadena": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «🏨 Cadenas» («cadena»).",
                    "x-cityflow-reference": "unique id de 🏨 Cadenas",
                    "x-cityflow-bubble-field": "cadena",
                    "x-cityflow-type-label": "string (unique id de 🏨 Cadenas)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of 🏨 Cadenas)",
                        "description": "Reference to the related «🏨 Cadenas» record («cadena»)."
                      }
                    }
                  },
                  "charged_amount": {
                    "type": "number",
                    "description": "Valor numérico «Charged Amount». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Charged Amount",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Charged Amount». Price amount or configuration."
                      }
                    }
                  },
                  "checkout_session_id": {
                    "type": "string",
                    "description": "Campo «Checkout Session ID». Proceso de devolución/check-out.",
                    "x-cityflow-bubble-field": "Checkout Session ID",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Checkout Session ID» field. Return/check-out process."
                      }
                    }
                  },
                  "closed_time_charged": {
                    "type": "boolean",
                    "description": "Indicador sí/no «closed time charged».",
                    "x-cityflow-bubble-field": "closed time charged",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «closed time charged»."
                      }
                    }
                  },
                  "departure": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Departure».",
                    "x-cityflow-bubble-field": "Departure",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Departure» date."
                      }
                    }
                  },
                  "departure_day": {
                    "type": "number",
                    "description": "Valor numérico «Departure day ».",
                    "x-cityflow-bubble-field": "Departure day",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Departure day »."
                      }
                    }
                  },
                  "departure_hour": {
                    "type": "number",
                    "description": "Valor numérico «Departure hour».",
                    "x-cityflow-bubble-field": "Departure hour",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Departure hour»."
                      }
                    }
                  },
                  "departure_month": {
                    "type": "number",
                    "description": "Valor numérico «Departure month».",
                    "x-cityflow-bubble-field": "Departure month",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Departure month»."
                      }
                    }
                  },
                  "departure_year": {
                    "type": "number",
                    "description": "Valor numérico «Departure year ».",
                    "x-cityflow-bubble-field": "Departure year",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Departure year »."
                      }
                    }
                  },
                  "diferencia_impago": {
                    "type": "number",
                    "description": "Valor numérico «Diferencia impago €».",
                    "x-cityflow-bubble-field": "Diferencia impago €",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Diferencia impago €»."
                      }
                    }
                  },
                  "diferencial_importes_unitarios_electrica": {
                    "type": "number",
                    "description": "Valor numérico «Diferencial Importes unitarios eléctrica ». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Diferencial Importes unitarios eléctrica",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Diferencial Importes unitarios eléctrica ». Price amount or configuration."
                      }
                    }
                  },
                  "diferencial_importes_unitarios_manual": {
                    "type": "number",
                    "description": "Valor numérico «Diferencial Importes unitarios manual ». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Diferencial Importes unitarios manual",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Diferencial Importes unitarios manual ». Price amount or configuration."
                      }
                    }
                  },
                  "distance_from_the_location": {
                    "type": "number",
                    "description": "Valor numérico «Distance from the location». Ubicación / posicionamiento GPS.",
                    "x-cityflow-bubble-field": "Distance from the location",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Distance from the location». Location / GPS positioning."
                      }
                    }
                  },
                  "distancia_ortizma": {
                    "type": "number",
                    "description": "Valor numérico «Distancia Ortizma».",
                    "x-cityflow-bubble-field": "Distancia Ortizma",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Distancia Ortizma»."
                      }
                    }
                  },
                  "duration": {
                    "type": "number",
                    "description": "Valor numérico «Duration».",
                    "x-cityflow-bubble-field": "Duration",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Duration»."
                      }
                    }
                  },
                  "electric_bike_price": {
                    "type": "number",
                    "description": "Valor numérico «Electric Bike Price». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Electric Bike Price",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Electric Bike Price». Price amount or configuration."
                      }
                    }
                  },
                  "electric_bike_quantity": {
                    "type": "number",
                    "description": "Valor numérico «Electric Bike Quantity».",
                    "x-cityflow-bubble-field": "Electric Bike Quantity",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Electric Bike Quantity»."
                      }
                    }
                  },
                  "emailtext": {
                    "type": "string",
                    "description": "Campo «emailText». Dirección de correo electrónico.",
                    "x-cityflow-bubble-field": "emailText",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«emailText» field. Email address."
                      }
                    }
                  },
                  "ending_location_link": {
                    "type": "string",
                    "description": "Campo «ending location link». Ubicación / posicionamiento GPS.",
                    "x-cityflow-bubble-field": "ending location link",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«ending location link» field. Location / GPS positioning."
                      }
                    }
                  },
                  "extra_pending_arrival": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Extra - Pending Arrival».",
                    "x-cityflow-bubble-field": "Extra - Pending Arrival",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Extra - Pending Arrival» date."
                      }
                    }
                  },
                  "extra_pending_price": {
                    "type": "number",
                    "description": "Valor numérico «Extra - Pending Price». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Extra - Pending Price",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Extra - Pending Price». Price amount or configuration."
                      }
                    }
                  },
                  "extra_session_processed": {
                    "type": "string",
                    "description": "Campo «Extra - Session Processed».",
                    "x-cityflow-bubble-field": "Extra - Session Processed",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Extra - Session Processed» field."
                      }
                    }
                  },
                  "extra_bikes": {
                    "type": "boolean",
                    "description": "Indicador sí/no «extra bikes».",
                    "x-cityflow-bubble-field": "extra bikes",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «extra bikes»."
                      }
                    }
                  },
                  "extra_bikes_added": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🚲 Bikes» («extra bikes added»).",
                    "x-cityflow-reference": "unique id de 🚲 Bikes",
                    "x-cityflow-bubble-field": "extra bikes added",
                    "x-cityflow-type-label": "lista de string (unique id de 🚲 Bikes)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🚲 Bikes)",
                        "description": "List. Reference to the related «🚲 Bikes» record («extra bikes added»)."
                      }
                    }
                  },
                  "extra_bikes_amount": {
                    "type": "number",
                    "description": "Valor numérico «extra bikes amount». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "extra bikes amount",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «extra bikes amount». Price amount or configuration."
                      }
                    }
                  },
                  "extra_qty_amount": {
                    "type": "number",
                    "description": "Valor numérico «Extra Qty - Amount». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Extra Qty - Amount",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Extra Qty - Amount». Price amount or configuration."
                      }
                    }
                  },
                  "extra_qty_e_bikes": {
                    "type": "number",
                    "description": "Valor numérico «Extra Qty - e-Bikes».",
                    "x-cityflow-bubble-field": "Extra Qty - e-Bikes",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Extra Qty - e-Bikes»."
                      }
                    }
                  },
                  "extra_qty_manual_bikes": {
                    "type": "number",
                    "description": "Valor numérico «Extra Qty - Manual Bikes».",
                    "x-cityflow-bubble-field": "Extra Qty - Manual Bikes",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Extra Qty - Manual Bikes»."
                      }
                    }
                  },
                  "extra_qty_pending": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Extra Qty - Pending».",
                    "x-cityflow-bubble-field": "Extra Qty - Pending",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Extra Qty - Pending»."
                      }
                    }
                  },
                  "feedback_send": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Feedback Send». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Feedback Send",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Feedback Send». Price amount or configuration."
                      }
                    }
                  },
                  "follow_up_compra_hecho": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Follow up compra hecho».",
                    "x-cityflow-bubble-field": "Follow up compra hecho",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Follow up compra hecho»."
                      }
                    }
                  },
                  "full_url": {
                    "type": "string",
                    "description": "Campo «full-URL».",
                    "x-cityflow-bubble-field": "full-URL",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«full-URL» field."
                      }
                    }
                  },
                  "got_address": {
                    "type": "string",
                    "description": "Campo «got address».",
                    "x-cityflow-bubble-field": "got address",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«got address» field."
                      }
                    }
                  },
                  "helmet": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Helmet».",
                    "x-cityflow-bubble-field": "Helmet",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Helmet»."
                      }
                    }
                  },
                  "image_compressed": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Image compressed».",
                    "x-cityflow-bubble-field": "Image compressed",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Image compressed»."
                      }
                    }
                  },
                  "impago_cobrado": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Impago cobrado».",
                    "x-cityflow-bubble-field": "Impago cobrado",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Impago cobrado»."
                      }
                    }
                  },
                  "impago_cobro_error": {
                    "type": "string",
                    "description": "Campo «Impago cobro error».",
                    "x-cityflow-bubble-field": "Impago cobro error",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Impago cobro error» field."
                      }
                    }
                  },
                  "impago_cobro_parcial": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Impago cobro parcial».",
                    "x-cityflow-bubble-field": "Impago cobro parcial",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Impago cobro parcial»."
                      }
                    }
                  },
                  "impago_no_cobrable": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Impago no cobrable».",
                    "x-cityflow-bubble-field": "Impago no cobrable",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Impago no cobrable»."
                      }
                    }
                  },
                  "insurance": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Insurance».",
                    "x-cityflow-bubble-field": "Insurance",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Insurance»."
                      }
                    }
                  },
                  "last_charge_date_for_scheduled_workflow": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Last charge date for scheduled workflow».",
                    "x-cityflow-bubble-field": "Last charge date for scheduled workflow",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Last charge date for scheduled workflow» date."
                      }
                    }
                  },
                  "location_allowed_before_asking": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Location allowed before asking». Ubicación / posicionamiento GPS.",
                    "x-cityflow-bubble-field": "Location allowed before asking",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Location allowed before asking». Location / GPS positioning."
                      }
                    }
                  },
                  "location_type": {
                    "type": "string",
                    "description": "Campo «Location type». Ubicación / posicionamiento GPS.",
                    "x-cityflow-bubble-field": "Location type",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Location type» field. Location / GPS positioning."
                      }
                    }
                  },
                  "location_reload_times": {
                    "type": "number",
                    "description": "Valor numérico «location, reload times». Ubicación / posicionamiento GPS.",
                    "x-cityflow-bubble-field": "location, reload times",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «location, reload times». Location / GPS positioning."
                      }
                    }
                  },
                  "manual_bike_price": {
                    "type": "number",
                    "description": "Valor numérico «Manual Bike Price». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Manual Bike Price",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Manual Bike Price». Price amount or configuration."
                      }
                    }
                  },
                  "manual_bike_quantity": {
                    "type": "number",
                    "description": "Valor numérico «Manual Bike Quantity».",
                    "x-cityflow-bubble-field": "Manual Bike Quantity",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Manual Bike Quantity»."
                      }
                    }
                  },
                  "master_booking": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Master Booking».",
                    "x-cityflow-bubble-field": "Master Booking",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Master Booking»."
                      }
                    }
                  },
                  "pago_gestionado": {
                    "type": "boolean",
                    "description": "Indicador sí/no «pago_gestionado».",
                    "x-cityflow-bubble-field": "pago_gestionado",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «pago_gestionado»."
                      }
                    }
                  },
                  "payment_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «Payment» («Payment list»).",
                    "x-cityflow-reference": "unique id de Payment",
                    "x-cityflow-bubble-field": "Payment list",
                    "x-cityflow-type-label": "lista de string (unique id de Payment)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of Payment)",
                        "description": "List. Reference to the related «Payment» record («Payment list»)."
                      }
                    }
                  },
                  "phone_gps": {
                    "type": "string",
                    "description": "Campo «Phone GPS». Ubicación / posicionamiento GPS.",
                    "x-cityflow-bubble-field": "Phone GPS",
                    "x-cityflow-type-label": "string (dirección/coordenadas)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (dirección/coordenadas)",
                        "description": "«Phone GPS» field. Location / GPS positioning."
                      }
                    }
                  },
                  "photo_arrival": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «Photo_Arrival» (se envía como URL).",
                    "x-cityflow-bubble-field": "Photo_Arrival",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «Photo_Arrival» (sent as a URL)."
                      }
                    }
                  },
                  "plan_url": {
                    "type": "string",
                    "description": "Campo «Plan URL».",
                    "x-cityflow-bubble-field": "Plan URL",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Plan URL» field."
                      }
                    }
                  },
                  "popups_start_shown": {
                    "type": "boolean",
                    "description": "Indicador sí/no «popups-start-shown».",
                    "x-cityflow-bubble-field": "popups-start-shown",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «popups-start-shown»."
                      }
                    }
                  },
                  "promocode": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «Promocodes» («Promocode»). Promociones y descuentos.",
                    "x-cityflow-reference": "unique id de Promocodes",
                    "x-cityflow-bubble-field": "Promocode",
                    "x-cityflow-type-label": "string (unique id de Promocodes)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of Promocodes)",
                        "description": "Reference to the related «Promocodes» record («Promocode»). Promotions and discounts."
                      }
                    }
                  },
                  "remaining_time": {
                    "type": "number",
                    "description": "Valor numérico «Remaining Time».",
                    "x-cityflow-bubble-field": "Remaining Time",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Remaining Time»."
                      }
                    }
                  },
                  "rental_hours_gs_report": {
                    "type": "number",
                    "description": "Valor numérico «Rental hours (gs report)».",
                    "x-cityflow-bubble-field": "Rental hours (gs report)",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Rental hours (gs report)»."
                      }
                    }
                  },
                  "return_time_date": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Return Time (date)».",
                    "x-cityflow-bubble-field": "Return Time (date)",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Return Time (date)» date."
                      }
                    }
                  },
                  "return_time_for_backend_workflow": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Return time for backend workflow».",
                    "x-cityflow-bubble-field": "Return time for backend workflow",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Return time for backend workflow» date."
                      }
                    }
                  },
                  "revision_impago": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Revisión impago».",
                    "x-cityflow-bubble-field": "Revisión impago",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Revisión impago»."
                      }
                    }
                  },
                  "stripe_extra_bikes_payment_url": {
                    "type": "string",
                    "description": "Campo «stripe-extra-bikes-payment-url». Dato de la pasarela de pagos Stripe.",
                    "x-cityflow-bubble-field": "stripe-extra-bikes-payment-url",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«stripe-extra-bikes-payment-url» field. Stripe payment gateway data."
                      }
                    }
                  },
                  "stripe_payment_success": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Stripe_Payment_success». Dato de la pasarela de pagos Stripe.",
                    "x-cityflow-bubble-field": "Stripe_Payment_success",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Stripe_Payment_success». Stripe payment gateway data."
                      }
                    }
                  },
                  "terminado_por_otra_persona": {
                    "type": "boolean",
                    "description": "Indicador sí/no «terminado por otra persona».",
                    "x-cityflow-bubble-field": "terminado por otra persona",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «terminado por otra persona»."
                      }
                    }
                  },
                  "terminado_por_recepcion": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Terminado por recepción».",
                    "x-cityflow-bubble-field": "Terminado por recepción",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Terminado por recepción»."
                      }
                    }
                  },
                  "terminar_al_cerrar_la_bici": {
                    "type": "boolean",
                    "description": "Indicador sí/no «terminar al cerrar la bici».",
                    "x-cityflow-bubble-field": "terminar al cerrar la bici",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «terminar al cerrar la bici»."
                      }
                    }
                  },
                  "tiempo_de_uso": {
                    "type": "string",
                    "description": "Opción del conjunto «Tramos Booking» («Tiempo de uso»). Valores posibles: `1`, `2`, `3`.",
                    "enum": [
                      "1",
                      "2",
                      "3"
                    ],
                    "x-cityflow-reference": "opción de «Tramos Booking»",
                    "x-cityflow-bubble-field": "Tiempo de uso",
                    "x-cityflow-type-label": "string (opción de «Tramos Booking»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «Tramos Booking»)",
                        "description": "Option from the «Tramos Booking» set («Tiempo de uso»). Possible values: `1`, `2`, `3`."
                      }
                    }
                  },
                  "understand_bluetoth_problems": {
                    "type": "number",
                    "description": "Valor numérico «Understand bluetoth problems».",
                    "x-cityflow-bubble-field": "Understand bluetoth problems",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Understand bluetoth problems»."
                      }
                    }
                  },
                  "unlock_popup_shown": {
                    "type": "boolean",
                    "description": "Indicador sí/no «unlock-popup-shown». Control o estado del candado del vehículo.",
                    "x-cityflow-bubble-field": "unlock-popup-shown",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «unlock-popup-shown». Vehicle lock control or status."
                      }
                    }
                  },
                  "unlocked_bikes_nb": {
                    "type": "number",
                    "description": "Valor numérico «Unlocked Bikes Nb». Control o estado del candado del vehículo.",
                    "x-cityflow-bubble-field": "Unlocked Bikes Nb",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Unlocked Bikes Nb». Vehicle lock control or status."
                      }
                    }
                  },
                  "user_agent": {
                    "type": "string",
                    "description": "Campo «User Agent».",
                    "x-cityflow-bubble-field": "User Agent",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«User Agent» field."
                      }
                    }
                  },
                  "video_first_bike_shown": {
                    "type": "boolean",
                    "description": "Indicador sí/no «video-first-bike-shown».",
                    "x-cityflow-bubble-field": "video-first-bike-shown",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «video-first-bike-shown»."
                      }
                    }
                  },
                  "whatsapp_is_send": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Whatsapp is send». Teléfono / canal de mensajería.",
                    "x-cityflow-bubble-field": "Whatsapp is send",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Whatsapp is send». Phone / messaging channel."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "1h_warning_whatsapp": false,
                "2h_warning_whatsapp": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Reservas",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Reservas"
      }
    },
    "/update_review": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateReview",
        "summary": "Valoraciones de los clientes tras el alquiler",
        "description": "Valoraciones de los clientes tras el alquiler.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Customer reviews after the rental",
            "description": "Customer reviews after the rental.",
            "table": "Reviews"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "aa_message": {
                    "type": "string",
                    "description": "Campo «AA_Message».",
                    "x-cityflow-bubble-field": "AA_Message",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«AA_Message» field."
                      }
                    }
                  },
                  "aa_title": {
                    "type": "string",
                    "description": "Campo «AA_Title».",
                    "x-cityflow-bubble-field": "AA_Title",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«AA_Title» field."
                      }
                    }
                  },
                  "aa_user": {
                    "type": "string",
                    "description": "Referencia a un Usuario de la plataforma («AA_User»).",
                    "x-cityflow-reference": "unique id de Usuario",
                    "x-cityflow-bubble-field": "AA_User",
                    "x-cityflow-type-label": "string (unique id de Usuario)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of Usuario)",
                        "description": "Reference to a platform User («AA_User»)."
                      }
                    }
                  },
                  "external_link_not_used_yet": {
                    "type": "string",
                    "description": "Campo «External link (not used yet)».",
                    "x-cityflow-bubble-field": "External link (not used yet)",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«External link (not used yet)» field."
                      }
                    }
                  },
                  "hotels_empty_all": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «hotels» («Hotels (empty = All)»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "Hotels (empty = All)",
                    "x-cityflow-type-label": "lista de string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of hotels)",
                        "description": "List. Reference to the related «hotels» record («Hotels (empty = All)»)."
                      }
                    }
                  },
                  "show_on_dashboard": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Show on Dashboard».",
                    "x-cityflow-bubble-field": "Show on Dashboard",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Show on Dashboard»."
                      }
                    }
                  },
                  "tripadvisor": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Tripadvisor?».",
                    "x-cityflow-bubble-field": "Tripadvisor?",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Tripadvisor?»."
                      }
                    }
                  },
                  "user_s_display_name": {
                    "type": "string",
                    "description": "Campo «User's display name».",
                    "x-cityflow-bubble-field": "User's display name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«User's display name» field."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "aa_message": "<valor>",
                "aa_title": "<valor>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Reseñas",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Reseñas"
      }
    },
    "/update_rider": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateRider",
        "summary": "Usuarios finales del servicio de sharing (app de riders)",
        "description": "Usuarios finales del servicio de sharing (app de riders).\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "End users of the sharing service (riders app)",
            "description": "End users of the sharing service (riders app).",
            "table": "Riders"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "a_preferred_language": {
                    "type": "string",
                    "description": "Referencia a un Usuario de la plataforma («a_preferred language»). Idioma / localización.",
                    "x-cityflow-reference": "unique id de Usuario",
                    "x-cityflow-bubble-field": "a_preferred language",
                    "x-cityflow-type-label": "string (unique id de Usuario)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of Usuario)",
                        "description": "Reference to a platform User («a_preferred language»). Language / localization."
                      }
                    }
                  },
                  "active": {
                    "type": "boolean",
                    "description": "Indicador sí/no «active».",
                    "x-cityflow-bubble-field": "active",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «active»."
                      }
                    }
                  },
                  "bateria_con_llave": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Batería con llave». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "Batería con llave",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Batería con llave». Vehicle battery level or status."
                      }
                    }
                  },
                  "battery_request_in_process": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Battery Request in Process». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "Battery Request in Process",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Battery Request in Process». Vehicle battery level or status."
                      }
                    }
                  },
                  "bikes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🚲 Bikes» («Bikes»).",
                    "x-cityflow-reference": "unique id de 🚲 Bikes",
                    "x-cityflow-bubble-field": "Bikes",
                    "x-cityflow-type-label": "lista de string (unique id de 🚲 Bikes)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🚲 Bikes)",
                        "description": "List. Reference to the related «🚲 Bikes» record («Bikes»)."
                      }
                    }
                  },
                  "come_to_pay_in_cash": {
                    "type": "boolean",
                    "description": "Indicador sí/no «come to pay in cash».",
                    "x-cityflow-bubble-field": "come to pay in cash",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «come to pay in cash»."
                      }
                    }
                  },
                  "delivery_plan": {
                    "type": "string",
                    "description": "Opción del conjunto «Delivery-Plans» («Delivery Plan»). Valores posibles: `Basic`, `Secure`.",
                    "enum": [
                      "Basic",
                      "Secure"
                    ],
                    "x-cityflow-reference": "opción de «Delivery-Plans»",
                    "x-cityflow-bubble-field": "Delivery Plan",
                    "x-cityflow-type-label": "string (opción de «Delivery-Plans»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «Delivery-Plans»)",
                        "description": "Option from the «Delivery-Plans» set («Delivery Plan»). Possible values: `Basic`, `Secure`."
                      }
                    }
                  },
                  "holded_baja_date": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha «Holded Baja Date». Dato de facturación.",
                    "x-cityflow-bubble-field": "Holded Baja Date",
                    "x-cityflow-type-label": "date (ISO 8601)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "date (ISO 8601)",
                        "description": "«Holded Baja Date» date. Billing data."
                      }
                    }
                  },
                  "holded_contact_id": {
                    "type": "string",
                    "description": "Campo «Holded Contact ID». Dato de facturación.",
                    "x-cityflow-bubble-field": "Holded Contact ID",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Holded Contact ID» field. Billing data."
                      }
                    }
                  },
                  "holded_recurring_invoice_id": {
                    "type": "string",
                    "description": "Campo «Holded Recurring Invoice ID». Dato de facturación.",
                    "x-cityflow-bubble-field": "Holded Recurring Invoice ID",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Holded Recurring Invoice ID» field. Billing data."
                      }
                    }
                  },
                  "id_delantero": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «ID Delantero» (se envía como URL).",
                    "x-cityflow-bubble-field": "ID Delantero",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «ID Delantero» (sent as a URL)."
                      }
                    }
                  },
                  "id_trasero": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «ID trasero» (se envía como URL).",
                    "x-cityflow-bubble-field": "ID trasero",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «ID trasero» (sent as a URL)."
                      }
                    }
                  },
                  "impagos": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Impagos».",
                    "x-cityflow-bubble-field": "Impagos",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Impagos»."
                      }
                    }
                  },
                  "importe_pendiente_pago": {
                    "type": "number",
                    "description": "Valor numérico «Importe pendiente pago». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Importe pendiente pago",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Importe pendiente pago». Price amount or configuration."
                      }
                    }
                  },
                  "initial_charged_amount": {
                    "type": "number",
                    "description": "Valor numérico «Initial charged amount». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Initial charged amount",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Initial charged amount». Price amount or configuration."
                      }
                    }
                  },
                  "paso": {
                    "type": "string",
                    "description": "Campo «paso».",
                    "x-cityflow-bubble-field": "paso",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«paso» field."
                      }
                    }
                  },
                  "preferred_language": {
                    "type": "string",
                    "description": "Opción del conjunto «os_Language» («preferred language»). Valores posibles: `ES`, `EN`, `FR`, `AR`, `UR`. Idioma / localización.",
                    "enum": [
                      "ES",
                      "EN",
                      "FR",
                      "AR",
                      "UR"
                    ],
                    "x-cityflow-reference": "opción de «os_Language»",
                    "x-cityflow-bubble-field": "preferred language",
                    "x-cityflow-type-label": "string (opción de «os_Language»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «os_Language»)",
                        "description": "Option from the «os_Language» set («preferred language»). Possible values: `ES`, `EN`, `FR`, `AR`, `UR`. Language / localization."
                      }
                    }
                  },
                  "push_battery": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Push Battery». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "Push Battery",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Push Battery». Vehicle battery level or status."
                      }
                    }
                  },
                  "stripe_subscription_id": {
                    "type": "string",
                    "description": "Campo «Stripe - Subscription ID». Dato de la pasarela de pagos Stripe.",
                    "x-cityflow-bubble-field": "Stripe - Subscription ID",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Stripe - Subscription ID» field. Stripe payment gateway data."
                      }
                    }
                  },
                  "stripe_subscription_item_id_current": {
                    "type": "string",
                    "description": "Campo «Stripe - Subscription Item ID (current)». Dato de la pasarela de pagos Stripe.",
                    "x-cityflow-bubble-field": "Stripe - Subscription Item ID (current)",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Stripe - Subscription Item ID (current)» field. Stripe payment gateway data."
                      }
                    }
                  },
                  "stripe_payment_confirmed": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Stripe Payment Confirmed». Dato de la pasarela de pagos Stripe.",
                    "x-cityflow-bubble-field": "Stripe Payment Confirmed",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Stripe Payment Confirmed». Stripe payment gateway data."
                      }
                    }
                  },
                  "stripe_price_id_add_on": {
                    "type": "string",
                    "description": "Campo «Stripe Price ID (add-on)». Dato de la pasarela de pagos Stripe.",
                    "x-cityflow-bubble-field": "Stripe Price ID (add-on)",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Stripe Price ID (add-on)» field. Stripe payment gateway data."
                      }
                    }
                  },
                  "user": {
                    "type": "string",
                    "description": "Referencia a un Usuario de la plataforma («user»).",
                    "x-cityflow-reference": "unique id de Usuario",
                    "x-cityflow-bubble-field": "user",
                    "x-cityflow-type-label": "string (unique id de Usuario)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of Usuario)",
                        "description": "Reference to a platform User («user»)."
                      }
                    }
                  },
                  "ver_bateria": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Ver Batería». Nivel o estado de batería del vehículo.",
                    "x-cityflow-bubble-field": "Ver Batería",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Ver Batería». Vehicle battery level or status."
                      }
                    }
                  },
                  "weekly_monthly": {
                    "type": "string",
                    "description": "Opción del conjunto «Frecuencia Facturacion» («Weekly/ Monthly»). Valores posibles: `Monthly`, `Weekly`.",
                    "enum": [
                      "Monthly",
                      "Weekly"
                    ],
                    "x-cityflow-reference": "opción de «Frecuencia Facturacion»",
                    "x-cityflow-bubble-field": "Weekly/ Monthly",
                    "x-cityflow-type-label": "string (opción de «Frecuencia Facturacion»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «Frecuencia Facturacion»)",
                        "description": "Option from the «Frecuencia Facturacion» set («Weekly/ Monthly»). Possible values: `Monthly`, `Weekly`."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "a_preferred_language": "<unique_id>",
                "active": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Riders",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Riders"
      }
    },
    "/update_review_request": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateReviewRequest",
        "summary": "Peticiones automáticas de reseña enviadas a clientes",
        "description": "Peticiones automáticas de reseña enviadas a clientes.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Automatic review requests sent to customers",
            "description": "Automatic review requests sent to customers.",
            "table": "Review requests"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "aprobado": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Aprobado».",
                    "x-cityflow-bubble-field": "Aprobado",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Aprobado»."
                      }
                    }
                  },
                  "fingerprint": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «fingerprint» («fingerprint»).",
                    "x-cityflow-reference": "unique id de fingerprint",
                    "x-cityflow-bubble-field": "fingerprint",
                    "x-cityflow-type-label": "string (unique id de fingerprint)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of fingerprint)",
                        "description": "Reference to the related «fingerprint» record («fingerprint»)."
                      }
                    }
                  },
                  "hotel": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («hotel»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "hotel",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («hotel»)."
                      }
                    }
                  },
                  "name": {
                    "type": "string",
                    "description": "Campo «Name».",
                    "x-cityflow-bubble-field": "Name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Name» field."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "aprobado": false,
                "fingerprint": "<unique_id>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Solicitudes de reseña",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Solicitudes de reseña"
      }
    },
    "/update_rider_pricing": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateRiderPricing",
        "summary": "Tarifas específicas del servicio de riders",
        "description": "Tarifas específicas del servicio de riders.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Rider-service-specific rates",
            "description": "Rider-service-specific rates.",
            "table": "Rider pricing"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "monthly_price": {
                    "type": "number",
                    "description": "Valor numérico «Monthly Price». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Monthly Price",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Monthly Price». Price amount or configuration."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "monthly_price": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Tarifas de riders",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Tarifas de riders"
      }
    },
    "/update_lock_type": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateLockType",
        "summary": "Catálogo de candados inteligentes soportados",
        "description": "Catálogo de candados inteligentes soportados.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Catalog of supported smart locks",
            "description": "Catalog of supported smart locks.",
            "table": "Lock types"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "axa_omni": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Axa + Omni». Dato de integración con el candado inteligente Omni.",
                    "x-cityflow-bubble-field": "Axa + Omni",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Axa + Omni». Integration data for the Omni smart lock."
                      }
                    }
                  },
                  "desbloquear_axa": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Desbloquear AXA». Dato del candado AXA.",
                    "x-cityflow-bubble-field": "Desbloquear AXA",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Desbloquear AXA». AXA lock data."
                      }
                    }
                  },
                  "mostrar_todos_los_comandos_omni": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Mostrar todos los comandos Omni». Dato de integración con el candado inteligente Omni.",
                    "x-cityflow-bubble-field": "Mostrar todos los comandos Omni",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Mostrar todos los comandos Omni». Integration data for the Omni smart lock."
                      }
                    }
                  },
                  "todo_en_browser": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Todo en Browser».",
                    "x-cityflow-bubble-field": "Todo en Browser",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Todo en Browser»."
                      }
                    }
                  },
                  "type": {
                    "type": "string",
                    "description": "Campo «Type».",
                    "x-cityflow-bubble-field": "Type",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Type» field."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "axa_omni": false,
                "desbloquear_axa": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Tipos de candado",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Tipos de candado"
      }
    },
    "/update_commission_tracking": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateCommissionTracking",
        "summary": "Seguimiento de comisiones por hotel o canal",
        "description": "Seguimiento de comisiones por hotel o canal.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Commission tracking per hotel or channel",
            "description": "Commission tracking per hotel or channel.",
            "table": "Commission tracking"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "hotel": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («hotel»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "hotel",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («hotel»)."
                      }
                    }
                  },
                  "importe": {
                    "type": "number",
                    "description": "Valor numérico «Importe». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "Importe",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «Importe». Price amount or configuration."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "hotel": "<unique_id>",
                "importe": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Trackeo de comisiones",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Trackeo de comisiones"
      }
    },
    "/update_tutorial": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateTutorial",
        "summary": "Vídeos y materiales de ayuda que se muestran a los usuarios de la app",
        "description": "Vídeos y materiales de ayuda que se muestran a los usuarios de la app.\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Help videos and materials shown to app users",
            "description": "Help videos and materials shown to app users.",
            "table": "Tutorials"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "language": {
                    "type": "string",
                    "description": "Opción del conjunto «os_Language» («Language»). Valores posibles: `ES`, `EN`, `FR`, `AR`, `UR`. Idioma / localización.",
                    "enum": [
                      "ES",
                      "EN",
                      "FR",
                      "AR",
                      "UR"
                    ],
                    "x-cityflow-reference": "opción de «os_Language»",
                    "x-cityflow-bubble-field": "Language",
                    "x-cityflow-type-label": "string (opción de «os_Language»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «os_Language»)",
                        "description": "Option from the «os_Language» set («Language»). Possible values: `ES`, `EN`, `FR`, `AR`, `UR`. Language / localization."
                      }
                    }
                  },
                  "miniature": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «miniature» (se envía como URL).",
                    "x-cityflow-bubble-field": "miniature",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «miniature» (sent as a URL)."
                      }
                    }
                  },
                  "name": {
                    "type": "string",
                    "description": "Campo «name».",
                    "x-cityflow-bubble-field": "name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«name» field."
                      }
                    }
                  },
                  "order": {
                    "type": "number",
                    "description": "Valor numérico «order».",
                    "x-cityflow-bubble-field": "order",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «order»."
                      }
                    }
                  },
                  "video_file": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «video-file» (se envía como URL).",
                    "x-cityflow-bubble-field": "video-file",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «video-file» (sent as a URL)."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "language": "ES",
                "miniature": "https://ejemplo.cityflow.app/archivo.jpg"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Tutoriales",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Tutoriales"
      }
    },
    "/update_user": {
      "post": {
        "tags": [
          "API de tablas — modificación campo a campo"
        ],
        "operationId": "updateUser",
        "summary": "Cuentas de acceso a la plataforma (hoteles, administradores, personal)",
        "description": "Cuentas de acceso a la plataforma (hoteles, administradores, personal).\n\nSemántica PATCH: se identifica el registro con `record_id` y sólo se modifican los campos incluidos en la petición.",
        "x-i18n": {
          "en": {
            "summary": "Platform access accounts (hotels, administrators, staff)",
            "description": "Platform access accounts (hotels, administrators, staff).",
            "table": "Users"
          }
        },
        "x-cityflow-implementation": "mock",
        "x-cityflow-scope": "tables",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "record_id": {
                    "type": "string",
                    "description": "Unique ID del registro que se quiere modificar. **Obligatorio.**",
                    "x-cityflow-bubble-field": "—",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "Unique ID of the record to modify. **Required.**"
                      }
                    }
                  },
                  "a_bookings_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «Bookings» («A_Bookings list»).",
                    "x-cityflow-reference": "unique id de Bookings",
                    "x-cityflow-bubble-field": "A_Bookings list",
                    "x-cityflow-type-label": "lista de string (unique id de Bookings)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of Bookings)",
                        "description": "List. Reference to the related «Bookings» record («A_Bookings list»)."
                      }
                    }
                  },
                  "a_preferredlanguage": {
                    "type": "string",
                    "description": "Opción del conjunto «os_Language» («A_PreferredLanguage»). Valores posibles: `ES`, `EN`, `FR`, `AR`, `UR`. Idioma / localización.",
                    "enum": [
                      "ES",
                      "EN",
                      "FR",
                      "AR",
                      "UR"
                    ],
                    "x-cityflow-reference": "opción de «os_Language»",
                    "x-cityflow-bubble-field": "A_PreferredLanguage",
                    "x-cityflow-type-label": "string (opción de «os_Language»)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (option of «os_Language»)",
                        "description": "Option from the «os_Language» set («A_PreferredLanguage»). Possible values: `ES`, `EN`, `FR`, `AR`, `UR`. Language / localization."
                      }
                    }
                  },
                  "aa_has_active_rental": {
                    "type": "boolean",
                    "description": "Indicador sí/no «AA_Has active rental».",
                    "x-cityflow-bubble-field": "AA_Has active rental",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «AA_Has active rental»."
                      }
                    }
                  },
                  "aa_hotel": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «hotels» («AA_Hotel»).",
                    "x-cityflow-reference": "unique id de hotels",
                    "x-cityflow-bubble-field": "AA_Hotel",
                    "x-cityflow-type-label": "string (unique id de hotels)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of hotels)",
                        "description": "Reference to the related «hotels» record («AA_Hotel»)."
                      }
                    }
                  },
                  "aa_last_booking": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «Bookings» («AA_Last Booking»).",
                    "x-cityflow-reference": "unique id de Bookings",
                    "x-cityflow-bubble-field": "AA_Last Booking",
                    "x-cityflow-type-label": "string (unique id de Bookings)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of Bookings)",
                        "description": "Reference to the related «Bookings» record («AA_Last Booking»)."
                      }
                    }
                  },
                  "accept_conditions": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Accept conditions».",
                    "x-cityflow-bubble-field": "Accept conditions",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Accept conditions»."
                      }
                    }
                  },
                  "assistances_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🛠️ Maintenances» («Assistances list»).",
                    "x-cityflow-reference": "unique id de 🛠️ Maintenances",
                    "x-cityflow-bubble-field": "Assistances list",
                    "x-cityflow-type-label": "lista de string (unique id de 🛠️ Maintenances)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🛠️ Maintenances)",
                        "description": "List. Reference to the related «🛠️ Maintenances» record («Assistances list»)."
                      }
                    }
                  },
                  "banned": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Banned ».",
                    "x-cityflow-bubble-field": "Banned",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Banned »."
                      }
                    }
                  },
                  "cadena": {
                    "type": "string",
                    "description": "Referencia al registro relacionado de «🏨 Cadenas» («Cadena»).",
                    "x-cityflow-reference": "unique id de 🏨 Cadenas",
                    "x-cityflow-bubble-field": "Cadena",
                    "x-cityflow-type-label": "string (unique id de 🏨 Cadenas)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (unique id of 🏨 Cadenas)",
                        "description": "Reference to the related «🏨 Cadenas» record («Cadena»)."
                      }
                    }
                  },
                  "cityflow_admin": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Cityflow Admin».",
                    "x-cityflow-bubble-field": "Cityflow Admin",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Cityflow Admin»."
                      }
                    }
                  },
                  "ciudades_visibles": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «🌆 Cities» («Ciudades Visibles»).",
                    "x-cityflow-reference": "unique id de 🌆 Cities",
                    "x-cityflow-bubble-field": "Ciudades Visibles",
                    "x-cityflow-type-label": "lista de string (unique id de 🌆 Cities)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 🌆 Cities)",
                        "description": "List. Reference to the related «🌆 Cities» record («Ciudades Visibles»)."
                      }
                    }
                  },
                  "connected_with_google": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Connected with Google».",
                    "x-cityflow-bubble-field": "Connected with Google",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Connected with Google»."
                      }
                    }
                  },
                  "cookie_consent": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Cookie-consent».",
                    "x-cityflow-bubble-field": "Cookie-consent",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Cookie-consent»."
                      }
                    }
                  },
                  "cookie_shown": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Cookie-shown».",
                    "x-cityflow-bubble-field": "Cookie-shown",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Cookie-shown»."
                      }
                    }
                  },
                  "delivery_rider": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Delivery rider».",
                    "x-cityflow-bubble-field": "Delivery rider",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Delivery rider»."
                      }
                    }
                  },
                  "first_name": {
                    "type": "string",
                    "description": "Campo «First Name».",
                    "x-cityflow-bubble-field": "First Name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«First Name» field."
                      }
                    }
                  },
                  "hotel_admin": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Hotel Admin».",
                    "x-cityflow-bubble-field": "Hotel Admin",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Hotel Admin»."
                      }
                    }
                  },
                  "id_foto_atras": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «ID foto atrás» (se envía como URL).",
                    "x-cityflow-bubble-field": "ID foto atrás",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «ID foto atrás» (sent as a URL)."
                      }
                    }
                  },
                  "id_foto_delante": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «ID foto delante» (se envía como URL).",
                    "x-cityflow-bubble-field": "ID foto delante",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «ID foto delante» (sent as a URL)."
                      }
                    }
                  },
                  "last_name": {
                    "type": "string",
                    "description": "Campo «Last Name».",
                    "x-cityflow-bubble-field": "Last Name",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Last Name» field."
                      }
                    }
                  },
                  "outstanding_amount": {
                    "type": "number",
                    "description": "Valor numérico «outstanding amount». Importe o configuración de precio.",
                    "x-cityflow-bubble-field": "outstanding amount",
                    "x-cityflow-type-label": "number",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "number",
                        "description": "Numeric value «outstanding amount». Price amount or configuration."
                      }
                    }
                  },
                  "payment_methods_id": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Campo «Payment Methods ID».",
                    "x-cityflow-bubble-field": "Payment Methods ID",
                    "x-cityflow-type-label": "lista de string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string",
                        "description": "List. «Payment Methods ID» field."
                      }
                    }
                  },
                  "payments_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «Payment» («Payments list»).",
                    "x-cityflow-reference": "unique id de Payment",
                    "x-cityflow-bubble-field": "Payments list",
                    "x-cityflow-type-label": "lista de string (unique id de Payment)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of Payment)",
                        "description": "List. Reference to the related «Payment» record («Payments list»)."
                      }
                    }
                  },
                  "permite_eliminar_bicis": {
                    "type": "boolean",
                    "description": "Indicador sí/no «permite eliminar bicis».",
                    "x-cityflow-bubble-field": "permite eliminar bicis",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «permite eliminar bicis»."
                      }
                    }
                  },
                  "phone": {
                    "type": "string",
                    "description": "Campo «Phone». Teléfono / canal de mensajería.",
                    "x-cityflow-bubble-field": "Phone",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Phone» field. Phone / messaging channel."
                      }
                    }
                  },
                  "profile_photo": {
                    "type": "string",
                    "format": "uri",
                    "description": "Archivo/imagen «Profile photo» (se envía como URL).",
                    "x-cityflow-bubble-field": "Profile photo",
                    "x-cityflow-type-label": "string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string (file URL)",
                        "description": "File/image «Profile photo» (sent as a URL)."
                      }
                    }
                  },
                  "reports_list": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «💬 Reviews» («Reports list»).",
                    "x-cityflow-reference": "unique id de 💬 Reviews",
                    "x-cityflow-bubble-field": "Reports list",
                    "x-cityflow-type-label": "lista de string (unique id de 💬 Reviews)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of 💬 Reviews)",
                        "description": "List. Reference to the related «💬 Reviews» record («Reports list»)."
                      }
                    }
                  },
                  "rider_orders": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista. Referencia al registro relacionado de «Riders» («Rider Orders»).",
                    "x-cityflow-reference": "unique id de Riders",
                    "x-cityflow-bubble-field": "Rider Orders",
                    "x-cityflow-type-label": "lista de string (unique id de Riders)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (unique id of Riders)",
                        "description": "List. Reference to the related «Riders» record («Rider Orders»)."
                      }
                    }
                  },
                  "room_number_new": {
                    "type": "string",
                    "description": "Campo «Room Number New».",
                    "x-cityflow-bubble-field": "Room Number New",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Room Number New» field."
                      }
                    }
                  },
                  "saved_images_list": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uri"
                    },
                    "description": "Lista. Archivo/imagen «Saved Images list» (se envía como URL).",
                    "x-cityflow-bubble-field": "Saved Images list",
                    "x-cityflow-type-label": "lista de string (URL de archivo)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "list of string (file URL)",
                        "description": "List. File/image «Saved Images list» (sent as a URL)."
                      }
                    }
                  },
                  "stripe_customer_id": {
                    "type": "string",
                    "description": "Campo «Stripe Customer ID». Dato de la pasarela de pagos Stripe.",
                    "x-cityflow-bubble-field": "Stripe Customer ID",
                    "x-cityflow-type-label": "string",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "string",
                        "description": "«Stripe Customer ID» field. Stripe payment gateway data."
                      }
                    }
                  },
                  "super_admin": {
                    "type": "boolean",
                    "description": "Indicador sí/no «Super Admin».",
                    "x-cityflow-bubble-field": "Super Admin",
                    "x-cityflow-type-label": "boolean (true/false)",
                    "x-i18n": {
                      "en": {
                        "typeLabel": "boolean (true/false)",
                        "description": "Yes/no flag «Super Admin»."
                      }
                    }
                  }
                },
                "required": [
                  "record_id"
                ]
              },
              "example": {
                "record_id": "<unique_id_del_registro>",
                "a_bookings_list": [
                  "<unique_id>"
                ],
                "a_preferredlanguage": "ES"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operación correcta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessEnvelope"
                },
                "example": {
                  "status": "success",
                  "code": 200,
                  "data": {
                    "table": "Usuarios",
                    "record_id": "REC-DEMO-0001",
                    "operation": "update",
                    "updated_fields": [
                      "<campos incluidos en la petición>"
                    ],
                    "updated_at": "2026-07-24T11:00:00Z"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro obligatorio ausente o inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "status": "error",
                  "code": 400,
                  "error": {
                    "type": "missing_parameter",
                    "message": "El parámetro 'record_id' es obligatorio.",
                    "parameter": "record_id"
                  },
                  "meta": {
                    "api_version": "v1",
                    "environment": "sandbox",
                    "mock_data": true
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-cityflow-table": "Usuarios"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "API key entregada al contratar el software. Cada clave lleva la lista de ámbitos que abre (`x-cityflow-scope` de cada operación); una clave que no tiene el ámbito de la operación recibe `403`. Las claves de prueba (`cf_test_…`) sólo responden datos simulados."
      }
    },
    "responses": {
      "Forbidden": {
        "description": "La clave es válida pero no tiene el ámbito de esta operación.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorEnvelope"
            },
            "example": {
              "status": "error",
              "code": 403,
              "error": {
                "type": "forbidden_scope",
                "message": "Esta API key no tiene acceso a esta operación."
              },
              "meta": {
                "api_version": "v1",
                "environment": "sandbox",
                "mock_data": true
              }
            }
          }
        }
      },
      "Unauthorized": {
        "description": "Falta la API key o no es válida.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/UnauthorizedError"
            },
            "example": {
              "error_class": "Unauthorized",
              "translation": "You must authenticate to call this method"
            }
          }
        }
      }
    },
    "schemas": {
      "Meta": {
        "type": "object",
        "properties": {
          "api_version": {
            "type": "string",
            "examples": [
              "v1"
            ]
          },
          "environment": {
            "type": "string",
            "enum": [
              "sandbox",
              "production"
            ]
          },
          "mock_data": {
            "type": "boolean"
          }
        },
        "required": [
          "api_version",
          "environment"
        ]
      },
      "SuccessEnvelope": {
        "type": "object",
        "properties": {
          "status": {
            "const": "success"
          },
          "code": {
            "type": "integer",
            "examples": [
              200
            ]
          },
          "data": {
            "type": "object",
            "additionalProperties": true
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "status",
          "code",
          "data"
        ]
      },
      "ErrorEnvelope": {
        "type": "object",
        "properties": {
          "status": {
            "const": "error"
          },
          "code": {
            "type": "integer",
            "examples": [
              400
            ]
          },
          "error": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "examples": [
                  "missing_parameter"
                ]
              },
              "message": {
                "type": "string"
              },
              "parameter": {
                "type": "string"
              }
            },
            "required": [
              "type",
              "message"
            ]
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "status",
          "code",
          "error"
        ]
      },
      "UnauthorizedError": {
        "type": "object",
        "properties": {
          "error_class": {
            "type": "string"
          },
          "translation": {
            "type": "string"
          }
        }
      }
    }
  }
}