# API OTA
# 1. Introducción
Bienvenido a la API de agencias online de Mybooking. Este API permite conectar la conexión de agencias online para poder consultar disponibilidad, realizar reservas online y poder cancelarlas.
# 1.1 Credenciales
Consulta el funcionamiento de las credenciales con API Key y Secret Key para ver cómo funciona la autenticación en el acceso a las APIs.
# 1.2 URL base
Cada una de las cuentas de Mybooking son accesible a través de un subdominio único id de cliente. Si el id de cliente es rentpepe la URL base para realizar las peticiones será:
https://rentpepe.mybooking.es
# 2. API
# 2.1 Consulta lugares de entrega y devolución
GET /api/booking/ota/location-list
Obtiene los lugares de entrega y devolución
# Petición
Parámetro | Descripción | Detalle | |
---|---|---|---|
customer-language | Idioma de la respuesta | Usar el código ISO-639-1 | Opcional |
pickup-place-id | Lugar de entrega | Obtiene los lugares de devolución válidos para el lugar de entrega | Opcional |
# Script para obtener la firma en Ruby
require 'openssl'
SECRET_KEY='MI-SECRET-KEY'
url='/api/booking/ota/location-list?customer-language=es'
signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), SECRET_KEY, url)
# Comando CURL usando el API y la firma para realizar la petición
curl -H "Authorization: {API-KEY}:{signature}" -H "Content-Type: application/json" -X GET 'https://micuenta.com/api/booking/ota/location-list?customer-language=es'
# Respuesta de la petición
Devuelve un JSON con los siguientes atributos
Atributo | Descripción | Detalle |
---|---|---|
success | Resultado de la operación | true si la operación se ha podido realizar false en el caso de que se hayan producido errores |
errors | Detalle del error | Si se produce un error, se detallan los errores que se hayan podido producir |
response | Respuesta | array[Object] |
id | Identificador del lugar de entrega/devolución | |
name | Nombre del lugar de entrega/devolución | |
price | Suplemento por el lugar de entrega |
{
"success": true,
"response": [
{
"id": 2,
"name": "Aeropuerto de Mahón",
"price": "10.0"
},
{
"id": 6,
"name": "Ciutadella",
"price": "0.0"
},
{
"id": 1,
"name": "Mahón",
"price": "0.0"
},
{
"id": 3,
"name": "Puerto de Mahón",
"price": "0.0"
}
]
}
# 2.2 Consulta la disponibilidad
GET /api/booking/ota/availability
Obtiene los productos, el precio y la disponibilidad para el período deseado.
# Petición:
Parámetro | Descripción | Detalle | |
---|---|---|---|
date-from | Fecha de inicio | Formato yyyy-mm-dd | Obligatorio |
time-from | Hora de inicio | Formato hh:mm | Obligatorio |
pickup-place | Lugar de entrega | ID del lugar | Obligatorio |
date-to | Fecha de fin | Formato yyyy-mm-dd | Obligatorio |
time-to | Fecha de fin | Formato hh:mm | Obligatorio |
return-place | Lugar de devolución | ID del lugar | Obligatorio |
customer-language | Idioma de la respuesta | Usar el código ISO-639-1 | Opcional |
sales-chanel-code | Canal de venta | Sólo si el sistema está configurado para múltiples canales de venta | Opcional |
driver-age | Edad del conductor | Edad del conductor | Opcional |
# Script para obtener la firma en Ruby
require 'openssl'
SECRET_KEY='MI-SECRET-KEY'
url='/api/booking/ota/availability?date-from=2022-05-03&time-from=10:30&pickup-place=1&date-to=2022-05-06&time-to=10:30&return-place=1&customer-language=es'
signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), SECRET_KEY, url)
# Comando CURL usando el API y la firma para realizar la petición
curl -H "Authorization: {API-KEY}:{signature}" -H "Content-Type: application/json" -X GET 'https://micuenta.com/api/booking/ota/availability?date-from=2022-05-03&time-from=10:30&pickup-place=1&date-to=2022-05-06&time-to=10:30&return-place=1&customer-language=es'
# Respuesta de la petición
Devuelve un JSON con los siguientes atributos
Atributo | Descripción | Detalle |
---|---|---|
success | Resultado de la operación | true si la operación se ha podido realizar false en el caso de que se hayan producido errores |
errors | Detalle del error | Si se produce un error, se detallan los errores que se hayan podido producir |
response | Respuesta | Si la operación se ha llevado a cabo, retorna el resultado |
response | Respuesta | [Object] |
date_from | Fecha entrega | |
time_from | Hora de entrega | |
date_to | Fecha devolución | |
time_to | Hora de devolución | |
pickup_place_id | Identificador lugar de entrega | |
pickup_place | Nombre del lugar de entrega | |
pickup_place_customer_translation | Nombre del lugar de entrega traducido al idioma de la petición | |
return_place_id | Identificador lugar de devolución | |
return_place | Nombre del lugar de devolución | |
return_place_customer_translation | Nombre del lugar de devolución traducido al idioma de la petición | |
days | Número de días de alquiler | |
time_from_cost | Suplemento hora de entrega | |
time_to_cost | Suplemento hora de devolución | |
pickup_place_cost | Suplemento lugar de entrega | |
return_place_cost | Suplemento lugar de devolución | |
driver_age_cost | Suplemento edad conductor | |
products | array[Object] Productos | |
- code | Código del producto | |
- name | Nombre del producto | |
- vat_type | Tipo de impuestos | |
- days | Días facturación | |
- price | Precio total con impuestos | |
- price_without_taxes | Precio total sin impuestos | |
- available | Disponible (true) | |
extras | array[Object] Extras | |
- code | Código del extra | |
- name | Nombre del extra | |
- days | Días facturación | |
- unit_price | Precio una unidad (todos los días) | |
- price_without_taxes | Precio total sin impuestos | |
- max_quantity | Cantidad máxima que puede seleccionarse | |
- available | Disponible (true) |
Respuesta de ejemplo
{
"success": true,
"response": {
"date_from": "2022-05-03",
"time_from": "10:30",
"date_to": "2022-05-06",
"time_to": "10:30",
"pickup_place_id": 2,
"pickup_place": "Aeropuerto de Mahón",
"pickup_place_customer_translation": "Aeropuerto de Mahón",
"return_place_id": 2,
"return_place": "Aeropuerto de Mahón",
"return_place_customer_translation": "Aeropuerto de Mahón",
"customer_language": "es",
"days": 3,
"time_from_cost": "0.0",
"time_to_cost": "0.0",
"pickup_place_cost": "10.0",
"return_place_cost": "10.0",
"driver_age_cost": "0.0",
"driver_age_deposit": "0.0",
"products": [
{
"code": "A",
"name": "Grupo A",
"photos": [
{
"photo_path": "https://micuenta.com/uploads/3/13/130/medium/clase-A.png",
"full_photo_path": "https://micuenta.com/uploads/3/13/130/clase-A.png"
}
],
"vat_type": "21.0",
"days": 3,
"price": "42.0",
"price_without_taxes": "34.71",
"available": true,
"key_characteristics": {
"doors": 3,
"seats": 4,
"suitcases": 1,
"transmission": "Manual",
"fuel": "G/D",
"air_conditioner": ""
}
}
],
"extras": [
{
"code": "ELEVADOR",
"name": "Elevador",
"photo_path": "https://micuenta.com/uploads/3/45/58/medium/elevador.jpg",
"photo_full_path": "https://micuenta.com/uploads/3/45/58/elevador.jpg",
"days": 3,
"unit_price": "27.0",
"available": true,
"max_quantity": 3
}
]
}
}
# 2.3 Crea una reserva
POST /api/booking/ota/booking
Crea una reserva
# Petición:
Se enviará un objeto JSON con los siguientes atributos
Parámetro | Descripción | Detalle | |
---|---|---|---|
reservation | [Object] | Detalle de la reserva | Obligatorio |
date_from | Fecha entrega | Obligatorio | |
time_from | Hora de entrega | Obligatorio | |
date_to | Fecha devolución | Obligatorio | |
time_to | Hora de devolución | Obligatorio | |
pickup_place | Identificador lugar de entrega | Obligatorio | |
return_place | Identificador del lugar de devolución | Obligatorio | |
customer_name | Nombre del cliente | Obligatorio | |
customer_surname | Apellidos del cliente | Obligatorio | |
agency_reservation_id | Referencia de la reserva para la agencia | Obligatorio | |
sales_channel_code | Canal de venta | Opcional | |
products | array[Object] Productos | Obligatorio | |
- code | Código del producto | Obligatorio | |
- quantity | Cantidad del producto | Opcional | |
extras | array[Object] Extras | Obligatorio | |
- code | Código del extra | Obligatorio | |
- quantity | Cantidad del extra | Opcional |
{
"reservation": {
"date_from": "2022-05-03",
"time_from": "10:00",
"date_to": "2022-05-07",
"time_to": "10:00",
"pickup_place": 1,
"return_place": 1,
"customer_language": "es",
"customer_name": "Tyrion",
"customer_surname": "Lannister",
"customer_document_id": "55555555R",
"customer_phone_number": "935551010",
"customer_email": "info@games.com",
"products": [
{
"code": "A"
}
],
"extras": [
{
"code": "ELEVADOR",
"quantity": 1
}
],
"agency_reservation_id": "1000"
}
}
# Script para obtener la firma en Ruby
require 'openssl'
SECRET_KEY='MI-SECRET-KEY'
url='/api/booking/ota/booking'
body='{"reservation":{"date_from":"2022-05-03","time_from":"10:00","date_to":"2022-05-07","time_to":"10:00","pickup_place":1,"return_place":1,"customer_language": "es","customer_name": "Tyrion","customer_surname": "Lannister","customer_document_id": "55555555R","customer_phone_number": "935551010","customer_email":"info@games.com","products": [{"code":"A"}],"extras":[{"code":"ELEVADOR","quantity":1}],"agency_reservation_id":"1000"}}'
data = url + body
signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), SECRET_KEY, data)
# Comando CURL usando el API y la firma para realizar la petición
curl -H "Authorization: {API-KEY}:{signature}" -H "Content-Type: application/json" -d '{"reservation":{"date_from":"2022-05-03","time_from":"10:00","date_to":"2022-05-07","time_to":"10:00","pickup_place":1,"return_place":1,"customer_language": "es","customer_name": "Tyrion","customer_surname": "Lannister","customer_document_id": "55555555R","customer_phone_number": "935551010","customer_email":"info@games.com","products": [{"code":"A"}],"extras":[{"code":"ELEVADOR","quantity":1}],"agency_reservation_id":"1000"}}' -X POST 'https://micuenta.com/api/booking/ota/booking'
# Respuesta de la petición
Devuelve un JSON con los siguientes atributos
Atributo | Descripción | Detalle |
---|---|---|
success | Resultado de la operación | true si la operación se ha podido realizar false en el caso de que se hayan producido errores |
errors | Detalle del error | Si se produce un error, se detallan los errores que se hayan podido producir |
response | Respuesta | [Object] Si la operación se ha llevado a cabo, retorna el resultado |
status | "reserved" si la reserva se llevó a cabo | |
reservation | [Object] La reserva | |
- id | Identificador reserva | |
- agency_reservation_id | Identificador reserva agencia | |
- date_from | Fecha entrega | |
- time_from | Hora de entrega | |
- date_to | Fecha devolución | |
- time_to | Hora de devolución | |
- pickup_place_id | Identificador lugar de entrega | |
- pickup_place | Nombre del lugar de entrega | |
- pickup_place_customer_translation | Nombre del lugar de entrega traducido al idioma de la petición | |
- return_place_id | Identificador lugar de devolución | |
- return_place | Nombre del lugar de devolución | |
- return_place_customer_translation | Nombre del lugar de devolución traducido al idioma de la petición | |
- customer_language | Código ISO idioma reserva | |
- days | Número de días de alquiler | |
- item_cost | Coste del producto | |
- extras_cost | Coste de los extras | |
- time_from_cost | Suplemento hora de entrega | |
- time_to_cost | Suplemento hora de devolución | |
- pickup_place_cost | Suplemento lugar de entrega | |
- return_place_cost | Suplemento lugar de devolución | |
- driver_age_cost | Suplemento edad conductor | |
- category_supplement_1_cost | Coste combustible | |
- total_cost | Coste total | |
- product_deposit_cost | Fianza producto | |
- product_guarantee_cost | Garantía producto | |
- driver_age_deposit | Fianza edad del conductor | |
- total_deposit | Fianza total | |
products | array[Object] Productos | |
- item_id | Código del producto | |
- item_description | Nombre del producto | |
- item_description_customer_translation | Nombre del producto idioma cliente | |
- item_unit_cost | Coste producto (1 unidad) | |
- item_cost | Coste producto (todas las unidades) | |
- quantity | Cantidad | |
- category_supplement_1_unit_cost | Suplemento combustible (1 unidad) | |
- category_supplement_1_cost | Suplemento combustible (todas las unidades) | |
- product_deposit_unit_cost | Franquicia (1 unidad) | |
- product_deposit_cost | Franquicia (todas las unidades) | |
- product_guarantee_unit_cost | Garantía (1 unidad) | |
- product_guarantee_cost | Garantía (todas las unidades) | |
extras | array[Object] Productos | |
- extra_id | Código del extra | |
- extra_description | Nombre del extra | |
- item_description_customer_translation | Nombre del extra idioma cliente | |
- extra_unit_cost | Coste extra (1 unidad) | |
- quantity | Cantidad | |
- extra_cost | Coste extra (todas las unidades) |
Respuesta de ejemplo
{
"success": true,
"response": {
"status": "reserved",
"reservation": {
"id": 1,
"agency_reservation_id": "9303",
"date_from": "2022-05-03",
"time_from": "10:00",
"date_to": "2022-05-07",
"time_to": "10:00",
"pickup_place": 1,
"pickup_place": "Mahón",
"pickup_place_customer_translation": "Mahón",
"return_place_id": 1,
"return_place": "Mahón",
"return_place_customer_translation": "Mahón",
"rental_location_code": "MAHON",
"customer_language": "es",
"days": 4,
"item_cost": "52.0",
"extras_cost": "36.0",
"time_from_cost": "0.0",
"time_to_cost": "0.0",
"pickup_place_cost": "0.0",
"return_place_cost": "0.0",
"driver_age_cost": "0.0",
"category_supplement_1_cost": "0.0",
"category_supplement_2_cost": "0.0",
"category_supplement_3_cost": "0.0",
"total_cost": "88.0",
"product_deposit_cost": "1400.0",
"product_guarantee_cost": "100.0",
"driver_age_deposit": "0.0",
"total_deposit": "1500.0",
"products": [
{
"item_id": "A",
"item_description": "Grupo A",
"item_description_customer_translation": "Grupo A",
"item_unit_cost": "52.0",
"item_cost": "52.0",
"quantity": 1,
"category_supplement_1_unit_cost": "0.0",
"category_supplement_1_cost": "0.0",
"category_supplement_2_unit_cost": "0.0",
"category_supplement_2_cost": "0.0",
"category_supplement_3_unit_cost": "0.0",
"category_supplement_3_cost": "0.0",
"product_deposit_unit_cost": "1400.0",
"product_deposit_cost": "1400.0",
"product_guarantee_unit_cost": "100.0",
"product_guarantee_cost": "100.0",
}
],
"extras": [
{
"extra_id": "ELEVADOR",
"extra_description": "Elevador",
"extra_description_customer_translation": "Elevador",
"extra_unit_cost": "36.0",
"quantity": 1,
"extra_cost": "36.0"
}
]
}
}
}
# 2.4 Consulta reserva
GET /api/booking/ota/booking
Consulta reserva
# Petición
Parámetro | Descripción | Detalle | |
---|---|---|---|
agency-reservation-id | Identificador reserva | Identificador de la reserva con el identificador de la agencia | Obligatorio |
# Script para obtener la firma en Ruby
require 'openssl'
SECRET_KEY='MI-SECRET-KEY'
url='/api/booking/ota/booking?agency-reservation-id=9303'
signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), SECRET_KEY, url)
# Comando CURL usando el API y la firma para realizar la petición
curl -H "Authorization: {API-KEY}:{signature}" -H "Content-Type: application/json" -X GET 'https://micuenta.com/api/booking/ota/booking?agency-reservation-id=9303'
# Respuesta de la petición
Devuelve un JSON con los mismos atributos que el end-point de creación de reserva
Ver el ejemplo del end-point de creación de reserva
# Respuesta reserva no existe
{
"success": false,
"errors": {
"message": "La reserva no existe"
}
}
# 2.5 Cancelar reserva
POST /api/booking/ota/cancel-booking
Cancela una reserva
# Petición
Parámetro | Descripción | Detalle | |
---|---|---|---|
reservation | [Object] | Detalle de la reserva | Obligatorio |
agency-reservation-id | Identificador de la reserva para la agencia | Obligatorio |
{
"reservation": {
"agency_reservation_id": "9303"
}
}
# Script para obtener la firma en Ruby
require 'openssl'
SECRET_KEY='MI-SECRET-KEY'
url='/api/booking/ota/cancel-booking'
body='{"reservation":{"agency_reservation_id":"9303"}}'
data = url + body
signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), SECRET_KEY, data)
# Comando CURL usando el API y la firma para realizar la petición
curl -H "Authorization: {API-KEY}:{signature}" -H "Content-Type: application/json" -d '{"reservation":{"agency_reservation_id":"9303"}}' -X POST 'https://micuenta.com/api/booking/ota/cancel-booking'
# Respuesta de la petición
Devuelve un JSON con los siguientes atributos
Atributo | Descripción | Detalle |
---|---|---|
success | Resultado de la operación | true si la operación se ha podido realizar false en el caso de que se hayan producido errores |
errors | Detalle del error | Si se produce un error, se detallan los errores que se hayan podido producir |
response | Respuesta | [Object] Si la operación se ha llevado a cabo, retorna el resultado |
status | "canceled" si la reserva se canceló |
{
"success": true,
"response": {
"status": "canceled"
}
}
``