Para transferencias mundiales Haz clic aquí
REST API

API de Flota

Integra las operaciones de tu flota — gestiona reservas, asigna conductores y sincroniza actualizaciones de estado programáticamente.

URL base https://walatour.com/api/driver
Autenticación Bearer token

Comenzando

Incluye estos encabezados en cada solicitud después de iniciar sesión:

Cabeceras
Accept: application/json
Content-Type: application/json
Authorization: Bearer 3757|Zj1EVDhKnrLAx0V1rsSmlzU2loolWKpS35A2qtRtc9e3d716

Authentication — Bearer token

Your 7Transfers contact issues a long-lived Bearer token for your fleet. Store it securely on your server and send it on every request as Authorization: Bearer {token}. There is no login step and no password for API access. If a token is lost or rotated, ask us for a new one.

Fleet API integrations must not call /api/driver/login and must not send email or password. Use only the Bearer token.

Example request

curl
curl -H 'Accept: application/json' \
     -H 'Authorization: Bearer 3757|Zj1EVDhKnrLAx0V1rsSmlzU2loolWKpS35A2qtRtc9e3d716' \
     'https://walatour.com/api/driver/bookings?status=assigned'

Sandbox — try the API

Use this public sandbox Bearer token to explore the Fleet API. It always has 20 demo bookings in status assigned (ref numbers FAPISB-01 and up). Accepting or cancelling them is fine — they are reset automatically every hour.

Sandbox data belongs to the Fleet API Sandbox fleet only. Production partners receive their own private Bearer token; bookings for a partner are always assigned to that partner fleet.

Sandbox Bearer token

Bearer
3757|Zj1EVDhKnrLAx0V1rsSmlzU2loolWKpS35A2qtRtc9e3d716

Example request

curl
curl -H 'Accept: application/json' \
     -H 'Authorization: Bearer 3757|Zj1EVDhKnrLAx0V1rsSmlzU2loolWKpS35A2qtRtc9e3d716' \
     'https://walatour.com/api/driver/bookings?status=assigned'
POST /api/driver/login

Iniciar sesión — obtener token

Autenticar con credenciales de la flota para recibir un token Bearer para solicitudes posteriores.

Fleet API integrations must not call /api/driver/login and must not send email or password. Use only the Bearer token.
GET /api/driver/bookings

Listar reservas asignadas a la flota

Parámetros de consulta opcional

statusall o assigned, accepted, onroute, arrived, onboard, completed, canceled, noshow, rejected, market
from_dateYYYY-MM-DD
to_dateYYYY-MM-DD
per_page1–100 (predeterminado 20)

Ejemplo

GET
https://walatour.com/api/driver/bookings?status=assigned&from_date=2026-04-11&per_page=50

Respuesta 200

JSON
{
  "success": true,
  "data": [
    {
      "id": 9876,
      "ref_number": "T2S-12345",
      "status": "assigned",
      "status_label": "Assigned",
      "date": "2026-04-15 10:30:00",
      "from_address": "Malaga Airport (AGP)",
      "to_address": "Hotel Marbella Club",
      "passengers": 3,
      "vehicle_list": "Business Van",
      "luggage": 4,
      "hand_luggage": 3,
      "assigned_driver": null,
      "commission": 0,
      "flight_number": "FR1234",
      "meet_and_greet": true,
      "coordinate_start_lat": 36.6749,
      "coordinate_start_lon": -4.4991,
      "coordinate_end_lat": 36.5098,
      "coordinate_end_lon": -4.8826
    }
  ],
  "meta": {
    "current_page": 1,
    "last_page": 3,
    "per_page": 20,
    "total": 47
  }
}
Las cancelaciones no se envían a tu sistema. Incluye status=canceled (o usa status=all) en tu sondeo para detectar reservas canceladas por la oficina y elimínalas en tu lado.
GET /api/driver/bookings/{id}

Detalles de la reserva

Devuelve la reserva completa: pasajero, contacto, direcciones, coordenadas, historial de estado, botones de acción, extras (asientos para niños, silla de ruedas, tiempo de espera, etc.) y archivos adjuntos.

Los teléfonos del pasajero (contact_mobile, lead_passenger_mobile) solo se devuelven en este endpoint — nunca en el listado de reservas — y únicamente mientras la reserva está en un estado activo (accepted, onroute, arrived, onboard). Mientras la reserva sigue en assigned, o después de completada o cancelada, los campos de teléfono se devuelven como null. Acepta la reserva primero y luego consulta el detalle para obtener el teléfono.
PATCH /api/driver/bookings/{id}/status

Actualizar estado de la reserva

Solicitud

Cuerpo JSON
{
  "status": "accepted",
  "status_notes": "Nota opcional"
}
Valores de estado válidos: accepted, rejected, onroute, arrived, onboard, noshow, completed, canceled
  • status_notes es obligatorio cuando el estado es rejected.
  • Los estados onroute, arrived, onboard, noshow y completed requieren una ubicación GPS reciente del conductor (en los últimos 5 minutos). Envía lat y lng en esta misma petición, o comparte la ubicación desde la app del conductor. Para integraciones desde oficina sin GPS, usa accepted, rejected o canceled.
Una vez que la oficina ha cancelado una reserva, ya no puede reactivarse: cualquier intento de cambiar su estado (p. ej. a accepted) devuelve un error 422. Vuelve a comprobar el estado actual antes de aceptar reservas encoladas de un sondeo anterior.

Ubicación del conductor opcional

Envía la posición GPS actual del conductor junto con el estado, en la misma petición. La guardamos en el conductor asignado a esta reserva y el pasajero la ve en el seguimiento en directo. Envíala con cada estado que requiere GPS. Las peticiones sin lat ni lng siguen funcionando como hasta ahora.
Cuerpo JSON
{
  "status": "arrived",
  "lat": -34.8150,
  "lng": -58.5348,
  "accuracy": 12,
  "heading": 270,
  "speed": 0
}
  • lat, lng — Latitud y longitud en grados decimales. Envía las dos o ninguna.
  • accuracy — Precisión del GPS en metros (opcional)
  • heading — Dirección de la marcha en grados, de 0 a 360 (opcional)
  • speed — Velocidad en metros por segundo (opcional)

Respuesta 200

JSON
{
  "success": true,
  "data": { "id": 9876, "status": "accepted" }
}
GET /api/driver/fleet/drivers

Listar conductores propios de la flota

Respuesta

JSON
{
  "success": true,
  "data": [
    { "id": 55, "name": "Juan Perez", "email": "juan@example.com" }
  ]
}
PATCH /api/driver/fleet/bookings/{id}/assign-driver

Asignar un conductor a una reserva

Solicitud

Envía driver_id, o un objeto driver si tus conductores están en tu propio sistema. commission y fleet_commission son opcionales.

Cuerpo JSON
{
  "driver_id": 55,
  "commission": 10.00,
  "fleet_commission": 5.00,
  "driver_name": "Juan Perez",
  "driver_phone": "+905551112233",
  "vehicle_make": "Mercedes-Benz",
  "vehicle_model": "Vito",
  "vehicle_license_plate": "34 ABC 123"
}

Conductor y vehículo opcional

Estos campos son opcionales. Envíalos al asignar un conductor y los guardamos en esa reserva, para poder compartir después el conductor y el vehículo con el pasajero. Si no los envías, la asignación sigue funcionando. Las integraciones actuales no tienen que cambiar.
  • driver_name — Nombre completo del conductor
  • driver_phone — Teléfono del conductor
  • vehicle_make — Marca del vehículo
  • vehicle_model — Modelo del vehículo
  • vehicle_license_plate — Matrícula del vehículo

Conductores de tu propio sistema

Si gestionas tus conductores en tu propio sistema, envía un objeto driver en lugar de driver_id. Lleva los mismos datos que al crear un conductor, sin email ni contraseña. Lo identificamos por el teléfono entre los conductores que ya nos enviaste, o creamos uno nuevo. Estos conductores no tienen acceso ni reciben emails: los emails de la reserva van a tu flota. La respuesta devuelve nuestro driver_id. Si envías los dos, se usa driver_id.
Cuerpo JSON
{
  "commission": 10.00,
  "fleet_commission": 5.00,
  "driver": {
    "first_name": "Juan",
    "last_name": "Perez",
    "mobile_no": "+5491155551234",
    "vehicle_make": "Mercedes-Benz",
    "vehicle_model": "Vito",
    "vehicle_year": 2022,
    "vehicle_color": "black",
    "vehicle_license_plate": "AB 123 CD",
    "country": "AR",
    "city": "Buenos Aires"
  }
}

Campos obligatorios:

  • driver.first_name — Nombre del conductor
  • driver.last_name — Apellidos del conductor
  • driver.mobile_no — Móvil del conductor, con prefijo de país. Lo usamos para reconocer al mismo conductor en otras reservas.
  • driver.vehicle_make — Marca del vehículo
  • driver.vehicle_model — Modelo del vehículo
  • driver.vehicle_year — Año del vehículo (4 dígitos)
  • driver.vehicle_color — Color del vehículo, uno de: white, black, silver, gray, blue, red, green, beige, brown, gold, orange, yellow, navy, burgundy
  • driver.vehicle_license_plate — Matrícula del vehículo

Campos opcionales:

  • driver.telephone_no, driver.address, driver.city, driver.postcode, driver.country

Respuesta

JSON
{
  "success": true,
  "message": "Conductor asignado.",
  "data": {
    "id": 9876,
    "driver_id": 55,
    "driver_name": "Juan Perez",
    "driver_phone": "+905551112233",
    "vehicle_make": "Mercedes-Benz",
    "vehicle_model": "Vito",
    "vehicle_license_plate": "34 ABC 123",
    "commission": 10.00,
    "fleet_commission": 5.00
  }
}
POST /api/driver/logout

Cerrar sesión

Revoca el token Bearer actual.

Formato de error

Todos los errores devuelven JSON con un mensaje legible para humanos.

JSON
{ "success": false, "message": "Mensaje legible" }
401 Credenciales o token no válidos
403 No es usuario de flota / la reserva no pertenece a la flota
404 Reserva no encontrada
422 Error de validación o transición de estado no válida