API RESTful de Cityflow Fleet OS · Documentación para desarrolladores
Volver a Fleet OS

REFERENCIA API · V1

API RESTful Cityflow

46 endpoints de negocio y tablas, 20 integraciones externas y 70 llamadas a servicios. Todo lo que necesitas para conectar Cityflow Fleet OS con tu PMS, ERP o aplicación propia.

REST · JSON Bearer auth Sandbox · Mock Data

Información general

URL base (test)https://pruebas.cityflow.app/api/v1/
URL base (producción)https://{tu-instalacion}/api/v1/
MétodoPOST (body JSON)
AutenticaciónAuthorization: Bearer [API_KEY] — obligatoria en todos los endpoints
Content-Typeapplication/json

Acceso restringido

Los 46 endpoints requieren una API key que se entrega al contratar el software Cityflow. Sin ella, la plataforma responde 401 Unauthorized y no se expone ningún dato.

Mock Data (sandbox)

En esta fase, las respuestas son simuladas (payloads estáticos con HTTP 200 OK) para validar la estructura del contrato JSON. Todos los identificadores, emails y cifras de los ejemplos son ficticios.

Especificación OpenAPI 3.1

Esta referencia se genera a partir del contrato OpenAPI de la plataforma. Descárgalo e impórtalo en Postman, genera el cliente en tu lenguaje o levanta un servidor de pruebas con él.

Descargar YAML Descargar JSON

Formato de respuesta estándar

{
  "status": "success",
  "code": 200,
  "data": { ... },
  "meta": {
    "api_version": "v1",
    "environment": "sandbox",
    "mock_data": true
  }
}
1

Public Sharing — Micromovilidad urbana

Operación pública de flotas compartidas: zonas operativas, geofencing, tarifas por minuto y telemetría de vehículos.

POST/calculate_trip_fare

Calcula la tarifa de un trayecto según tipo de vehículo y duración en minutos.

Parámetros (body JSON)

ParámetroTipoObligatorio
vehicle_type*string
duration_minutes*number
city_idstringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/calculate_trip_fare' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"vehicle_type": "<valor>", "duration_minutes": 0}'
POST/get_operating_zones

Devuelve las zonas operativas y reglas de geofencing de una ciudad.

Parámetros (body JSON)

ParámetroTipoObligatorio
city_id*string
zone_typestringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/get_operating_zones' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"city_id": "<valor>"}'
POST/get_vehicles_status

Estado en tiempo real de la flota: disponibilidad, batería y ubicación GPS.

Parámetros (body JSON)

ParámetroTipoObligatorio
city_id*string
status_filterstringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/get_vehicles_status' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"city_id": "<valor>"}'
2

Corporate Sharing — Flotas privadas corporativas

Flotas privadas para empresas: registro con validación de dominio corporativo, reservas en campus y permisos por departamento.

POST/create_campus_reservation

Crea una reserva de vehículo dentro de un campus corporativo.

Parámetros (body JSON)

ParámetroTipoObligatorio
employee_id*string
campus_id*string
vehicle_typestringNo
start_timestringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/create_campus_reservation' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"employee_id": "<valor>", "campus_id": "<valor>"}'
POST/register_corporate_user

Registra un usuario corporativo validando que el email pertenezca al dominio de la empresa (@empresa.com).

Parámetros (body JSON)

ParámetroTipoObligatorio
email*string
company_id*string
full_namestringNo
departmentstringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/register_corporate_user' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"email": "<valor>", "company_id": "<valor>"}'
POST/set_employee_permissions

Asigna permisos de uso de flota por departamento o perfil del empleado.

Parámetros (body JSON)

ParámetroTipoObligatorio
employee_id*string
departmentstringNo
profilestringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/set_employee_permissions' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"employee_id": "<valor>"}'
3

Rental & Tourist — Alquileres y turismo

Reservas anticipadas, pases turísticos por día/semana y ciclo completo de check-in / check-out.

POST/cancel_booking

Cancela una reserva anticipada.

Parámetros (body JSON)

ParámetroTipoObligatorio
booking_id*string
reasonstringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/cancel_booking' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"booking_id": "<valor>"}'
POST/create_advance_booking

Crea una reserva anticipada de alquiler (corta o larga duración).

Parámetros (body JSON)

ParámetroTipoObligatorio
customer_email*string
property_id*string
start_date*string
end_datestringNo
bike_quantitynumberNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/create_advance_booking' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"customer_email": "<valor>", "property_id": "<valor>", "start_date": "<valor>"}'
POST/get_booking

Consulta el detalle de una reserva existente.

Parámetros (body JSON)

ParámetroTipoObligatorio
booking_id*string
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/get_booking' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"booking_id": "<valor>"}'
POST/purchase_tourist_pass

Vende un pase turístico por día o por semana.

Parámetros (body JSON)

ParámetroTipoObligatorio
pass_type*string
customer_email*string
start_datestringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/purchase_tourist_pass' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"pass_type": "<valor>", "customer_email": "<valor>"}'
POST/rental_checkin

Check-in de un alquiler: entrega del vehículo y código de desbloqueo.

Parámetros (body JSON)

ParámetroTipoObligatorio
booking_id*string
bike_idstringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/rental_checkin' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"booking_id": "<valor>"}'
POST/rental_checkout

Check-out de un alquiler: devolución del vehículo y liquidación.

Parámetros (body JSON)

ParámetroTipoObligatorio
booking_id*string
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/rental_checkout' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"booking_id": "<valor>"}'
POST/validate_tourist_pass

Valida un pase turístico y devuelve su vigencia restante.

Parámetros (body JSON)

ParámetroTipoObligatorio
pass_code*string
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/validate_tourist_pass' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"pass_code": "<valor>"}'
5

Franchises & Multi-property — Multiciudad y franquicias

Panel Master de supervisión centralizada y métricas segregadas por franquicia o propiedad.

POST/get_franchise_metrics

Métricas segregadas por franquicia o propiedad, con filtros de periodo y tipo de métrica.

Parámetros (body JSON)

ParámetroTipoObligatorio
franchise_id*string
metric_typestringNo
periodstringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/get_franchise_metrics' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"franchise_id": "<valor>"}'
POST/get_master_overview

Panel Master: supervisión centralizada de todas las flotas, ciudades y franquicias.

Parámetros (body JSON)

ParámetroTipoObligatorio
periodstringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/get_master_overview' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"period": "<valor>"}'
6

Gestión interna

Operaciones de administración de la plataforma: alta de bicicletas y hoteles, precios por hotel y estados de flota.

POST/create_bike

Alta de una bicicleta en el sistema (equivalente a la gestión interna de la página de administración).

Parámetros (body JSON)

ParámetroTipoObligatorio
bike_name*string
bike_modelstringNo
hotel_idstringNo
lock_typestringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/create_bike' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"bike_name": "<valor>"}'
POST/create_hotel

Alta de un hotel/propiedad en la plataforma.

Parámetros (body JSON)

ParámetroTipoObligatorio
hotel_name*string
city*string
contact_emailstringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/create_hotel' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"hotel_name": "<valor>", "city": "<valor>"}'
POST/set_hotel_prices

Define los precios de alquiler específicos de un hotel.

Parámetros (body JSON)

ParámetroTipoObligatorio
hotel_id*string
price_per_hournumberNo
price_per_daynumberNo
currencystringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/set_hotel_prices' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"hotel_id": "<valor>"}'
POST/update_bike_status

Cambia el estado operativo de una bicicleta (available, rented, maintenance).

Parámetros (body JSON)

ParámetroTipoObligatorio
bike_id*string
status*string
notesstringNo
curl -X POST \
  'https://pruebas.cityflow.app/api/v1/update_bike_status' \
  -H 'Authorization: Bearer [API_KEY]' \
  -H 'Content-Type: application/json' \
  -d '{"bike_id": "<valor>", "status": "<valor>"}'
7

API de tablas — modificación campo a campo

Cada tabla de la plataforma tiene su endpoint update_*. Todos funcionan igual:

  • Se identifica el registro con record_id (obligatorio).
  • El resto de parámetros son opcionales: solo se modifican los campos incluidos en la petición.
  • Las referencias a otras tablas se envían como su unique id; las fechas en ISO 8601; los archivos como URL.
  • Las tablas puramente internas del sistema se gestionan automáticamente y no se exponen en la API.
8

Integraciones externas — API Connector

La plataforma se conecta con estos servicios externos a través del API Connector. Todas las llamadas se ejecutan desde el servidor: las credenciales (API keys, tokens, cuentas) están configuradas como parámetros privados y nunca se exponen al navegador ni en esta documentación. Se listan el método, el recurso y los parámetros públicos de cada llamada, junto con la explicación de qué hace.

Backend

1 llamadas

Llamadas auxiliares al propio backend de la plataforma (cálculos de business case, p. ej. número de alquileres).

LlamadaMétodo y recursoQué hace
Business Case - número alquileres
POST[host]/version-test/api/1.1/wf/calcular_alquileres
Calcula el número de alquileres estimado para el business case.

Brevo

5 llamadas

Proveedor de email transaccional. Envía los correos operativos de la plataforma: confirmaciones, alertas internas y correos de la app (con o sin copia).

LlamadaMétodo y recursoQué hace
API Call
GET
Llamada genérica del grupo (configuración auxiliar).
Send Alert Email
POSTapi.brevo.com/v3/smtp/email
Envía un email de alerta interna al equipo de operaciones.
Send App Email
POSTapi.brevo.com/v3/smtp/email
Envía un correo de la aplicación al cliente.
Send App Email (with CC)
POSTapi.brevo.com/v3/smtp/email
Envía un correo de la aplicación con destinatarios en copia.
Send Email
POSTapi.brevo.com/v3/smtp/email
Envía un email transaccional a través de Brevo.

Buildprint API

1 llamadas

Integración con Buildprint para lanzar agentes automatizados (p. ej. el agente de novedades).

LlamadaMétodo y recursoQué hace
Trigger Novedades Agent
POSTapi.buildprint.ai/api/public/v1/agents
Lanza el agente automatizado de novedades.

Clone

2 llamadas

Utilidades internas de clonado/migración de datos entre entornos (obtener un hotel y crear registros).

LlamadaMétodo y recursoQué hace
Create thing
POST[host]/version-test/api/1.1/obj/[Type]
Crea un registro vía Data API (utilidad de clonado).
Get Hotel
GET[host]/version-test/api/1.1/obj/[Type]/[id]
Recupera los datos de un hotel (utilidad de clonado).

Gemini AI

1 llamadas

IA generativa de Google. Se usa para generar automáticamente causas probables de averías a partir de la descripción de la incidencia.

LlamadaMétodo y recursoQué hace
Generate Causes
POSTgenerativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent
Genera con IA las causas probables de una avería.

GPS

3 llamadas

Plataforma externa de rastreo GPS: autenticación, listado de dispositivos y lectura de datos de posición de cada rastreador.

LlamadaMétodo y recursoQué hace
Device Data
GET[host]/fit/deviceData
Obtiene los datos de posición y telemetría de un rastreador concreto.
List Devices
GET[host]/fit/share/deviceandShareDeviceList
Lista los rastreadores GPS registrados en la cuenta.
Login
POST[host]/fit/registerOrlogin
Autentica contra la plataforma GPS y obtiene el token de sesión.

Holded

7 llamadas

ERP de facturación. Gestiona contactos, facturas, recibos de venta, cobros y envío de documentos.

LlamadaMétodo y recursoQué hace
Create Contact
POSTapi.holded.com/api/invoicing/v1/contacts
Crea un contacto (cliente) en Holded.
Create Invoice
POSTapi.holded.com/api/invoicing/v1/documents/invoice
Crea una factura en Holded.
Create Sales Receipt
POSTapi.holded.com/api/invoicing/v1/documents/salesreceipt
Crea un recibo de venta en Holded.
Delete Recurring Invoice
DELETEapi.holded.com/api/invoicing/v1/documents/invoicerecurring/[documentId]
Elimina una factura recurrente en Holded.
Pay Document
POSTapi.holded.com/api/invoicing/v1/documents/[docType]/[documentId]/pay
Marca un documento de Holded como pagado.
Pay Invoice
POSTapi.holded.com/api/invoicing/v1/documents/invoice/[documentId]/pay
Marca una factura de Holded como pagada.
Send Invoice
POSTapi.holded.com/api/invoicing/v1/documents/invoice/[documentId]/send
Envía una factura de Holded por email al cliente.

Holded v2

1 llamadas

Segunda versión de la integración con Holded, dedicada a facturas recurrentes.

LlamadaMétodo y recursoQué hace
Create Recurring Invoice
POSTapi.holded.com/api/v2/recurring-invoices
Crea una factura recurrente en Holded.

KeySafe-Cloud API

2 llamadas

Candados de llave inteligente KeySafe: reclamar la propiedad de un candado y gestionar los slots de llaves electrónicas (eKeys).

LlamadaMétodo y recursoQué hace
API Call
PUTkeysafe-cloud.appspot.com/api/v1/locks/[lock_id]/slots/[slot_number]
Llamada genérica del grupo (configuración auxiliar).
Claim a Lock
POSTkeysafe-cloud.appspot.com/api/v1/locks
Reclama la propiedad de un candado KeySafe en la nube.

LINKA API

1 llamadas

Candados inteligentes LINKA: consulta de la información y estado del candado.

LlamadaMétodo y recursoQué hace
Fetch Lock Info
POSTapp.linkalock.com/api/merchant_api/fetch_lock
Consulta la información y estado de un candado LINKA.

New Collection

1 llamadas

Grupo de llamadas genérico sin configurar (placeholder del API Connector).

LlamadaMétodo y recursoQué hace
API Call
GET[host]/status/[device_id]
Llamada genérica del grupo (configuración auxiliar).

New Collection

1 llamadas

Grupo de llamadas genérico sin configurar (placeholder del API Connector).

LlamadaMétodo y recursoQué hace
API Call
GET
Llamada genérica del grupo (configuración auxiliar).

Omni API

15 llamadas

Pasarela propia de Cityflow para los candados inteligentes Omni. Es el núcleo del control remoto de la flota: apertura/cierre, batería, alarma, luces, velocidad y GPS.

LlamadaMétodo y recursoQué hace
Accelerometer
POST[host]/accelerometer/[lock_id]/[low/medium/high]
Ajusta la sensibilidad del acelerómetro (low/medium/high) para detección de movimiento.
All bikes status
GET[host]/status
Consulta el estado de todos los candados de la flota en una sola llamada.
GPS API
POST[host]/gps/[id]
Solicita la posición GPS actual del dispositivo.
Kick
POST[host]/kick/[lock_id]
Fuerza un reinicio/reconexión del dispositivo del candado.
Lock
POST[host]/lock/[lock_id]
Bloquea el candado del vehículo de forma remota.
Lock Battery
POST[host]/lock-battery/[lock_id]
Bloquea el compartimento de la batería.
Luces
POST[host]/headlight/[lock_id]/[on/off]
Enciende o apaga las luces del vehículo (on/off).
Sound Alarm
POST[host]/beep/[lock_id]/find
Hace sonar la alarma del candado para localizar el vehículo.
Status
GET[host]/status/[lock_id]
Consulta el estado en tiempo real de un candado (cierre, batería, conexión).
Unlock
POST[host]/unlock/[lock_id]
Desbloquea el candado del vehículo de forma remota.
Unlock Battery
POST[host]/unlock-battery/[lock_id]
Desbloquea el compartimento de la batería.
speed mode
POST[host]/speed-mode/[lock_id]/[low/medium/high]
Cambia el modo de velocidad del vehículo (low/medium/high).
speed-limit
POST[host]/speed-limit/[lock_id]/medium/[speed-limit]
Establece el límite de velocidad del vehículo.
startup-mode
POST[host]/startup-mode/[lock_id]/[zero/non-zero]
Configura el modo de arranque del vehículo (zero start / non-zero start).
throttle
POST[host]/throttle/[lock_id]/[on/off]
Activa o desactiva el acelerador del vehículo.

Ortizma

3 llamadas

Candados Ortizma gestionados a través de la pasarela de candados de Cityflow: estado del dispositivo, auto-bloqueo y resolución de ubicación.

LlamadaMétodo y recursoQué hace
Get Device Status
GET[host]/v2/devices/[id]/status
Consulta el estado del dispositivo Ortizma.
Resolve Location
POST[host]/v2/devices/[id]/location/resolve
Solicita la resolución de la ubicación actual del dispositivo.
Set Autolock
POST[host]/v2/devices/[id]/autolock
Configura el auto-bloqueo del candado tras un periodo de inactividad.

Rapiwha

1 llamadas

Proveedor antiguo de mensajería WhatsApp (obsoleto, sustituido por WasenderAPI).

LlamadaMétodo y recursoQué hace
(old) Enviar whatsapp
POSTpanel.rapiwha.com/send_message.php
Versión antigua del envío de WhatsApp (obsoleta).

ShortPixel

1 llamadas

Servicio de optimización de imágenes: comprime y reduce el peso de las fotos subidas.

LlamadaMétodo y recursoQué hace
Reduce
POSTapi.shortpixel.com/v2/reducer.php
Comprime una imagen para reducir su peso.

Stripe API

21 llamadas

Pasarela de pagos. Gestiona todo el ciclo de cobro: sesiones de checkout, clientes, métodos de pago guardados, cargos off-session, suscripciones y facturas.

LlamadaMétodo y recursoQué hace
API Call
GET
Llamada genérica del grupo (configuración auxiliar).
Charge a saved card (off‑session)
POSTapi.stripe.com/v1/payment_intents
Cobra una tarjeta guardada sin presencia del cliente (off-session).
Charge customer saved payment method
POSTapi.stripe.com/v1/payment_intents
Cobra al cliente usando su método de pago guardado.
Checkout Session for Alipay and WeChatPay
POSTapi.stripe.com/v1/checkout/sessions
Crea una sesión de checkout con métodos de pago asiáticos (Alipay/WeChat Pay).
Checkout hora extra
POSTapi.stripe.com/v1/checkout/sessions
Cobra una hora extra de alquiler mediante checkout.
Checkout session
POSTapi.stripe.com/v1/checkout/sessions
Crea una sesión de pago de Stripe Checkout.
Checkout session - Subscription
POSTapi.stripe.com/v1/checkout/sessions
Crea una sesión de checkout para una suscripción.
Checkout session status
GETapi.stripe.com/v1/checkout/sessions/[session_id]
Consulta el estado de una sesión de checkout.
Create Stripe Customer (Step 1 store payment information)
POSTapi.stripe.com/v1/customers
Crea el cliente en Stripe como primer paso para guardar su método de pago.
Create invoice (charge automatically)
POSTapi.stripe.com/v1/invoices
Crea una factura de cobro automático.
Create invoice item (impago difference)
POSTapi.stripe.com/v1/invoiceitems
Añade una línea de factura para regularizar diferencias por impago.
Finalize invoice
POSTapi.stripe.com/v1/invoices/[invoice_id]/finalize
Finaliza una factura en borrador para emitirla.
Find the Customer by email
GETapi.stripe.com/v1/customers
Busca un cliente de Stripe por su email.
List PaymentMethods for that Customer
GETapi.stripe.com/v1/payment_methods
Lista los métodos de pago guardados de un cliente.
Pay invoice (off session)
POSTapi.stripe.com/v1/invoices/[invoice_id]/pay
Cobra una factura sin presencia del cliente.
Retrieve invoice
GETapi.stripe.com/v1/invoices/[id]
Recupera una factura de Stripe.
Retrieve subscription
GETapi.stripe.com/v1/subscriptions/[subscription_id]
Recupera los datos de una suscripción de Stripe.
Set default payment method (customer)
POSTapi.stripe.com/v1/customers/[Customer_ID]
Define el método de pago por defecto del cliente.
Stripe – Retrieve PI
GETapi.stripe.com/v1/payment_intents/[PI_ID]
Recupera un PaymentIntent para comprobar el estado de un cobro.
Update customer (not being used)
POSTapi.stripe.com/v1/customers/[id]
Actualiza los datos de un cliente (llamada en desuso).
Update rider subscription
POSTapi.stripe.com/v1/subscriptions/[subscription_id]
Actualiza la suscripción de un rider.

WasenderAPI

1 llamadas

Proveedor actual de mensajería WhatsApp para notificaciones a clientes.

LlamadaMétodo y recursoQué hace
Enviar whatsapp
POSTwww.wasenderapi.com/api/send-message
Envía un mensaje de WhatsApp al cliente.

Whatsapp

1 llamadas

Llamada genérica de WhatsApp (configuración auxiliar).

LlamadaMétodo y recursoQué hace
API Call
POSTgraph.facebook.com/v20.0/[device_id]/messages
Llamada genérica del grupo (configuración auxiliar).

WhatsApp Meta

1 llamadas

API oficial de WhatsApp Business (Meta): envío de mensajes de plantilla, como el aviso de inicio de reserva.

LlamadaMétodo y recursoQué hace
Send Reservation Start Message
POSTgraph.facebook.com/v19.0/YOUR_PHONE_NUMBER_ID/messages
Envía por WhatsApp (Meta) el mensaje de plantilla de inicio de reserva.