Meet & Greet B2B API

Quote airport parking, create bookings, amend, and cancel — all over a simple JSON REST API. Credentials go in the request body on every call. No Bearer token required.

BASE https://api.magrgroup.com/api/

Authentication

Send on every request:

  • user_email
  • password
  • agent_code

Header: Content-Type: application/json only.

This host is DEV

Only agents with status = Test in the database can call this API. Live agents must use api.magrgroup.com.

Get access

Need credentials? Email alismartin@meetandgreetreservations.co.uk

Typical flow (agent website)

  1. 1
    QuotePOST /products — show parking price (no fees in this response)
  2. 2
    Product selectedPOST /payments/create-intent — amount = parking + any fees your UI collected
  3. 3
    Customer detailsOn your site: name, email, phone, vehicle, flights (keep in your form state)
  4. 4
    Card paymentStripe.js on your site — money goes to M&G Stripe (test card 4242…)
  5. 5
    BookPOST /bookings — send optional fees; response echoes booking_amount + those fees
  6. 6
    Amend / CancelPOST /amend or /cancel when allowed

POST Get parking quotes

https://api.magrgroup.com/api/products

# Get parking quotes
curl -X POST https://api.magrgroup.com/api/products \
  -H 'Content-Type: application/json' \
  -d '{
    "user_email": "registered@emailaddress.com",
    "agent_code": "your-agent-code",
    "password": "your-password",
    "quote": {
      "airport_code": "LHR",
      "dropoff_date": "2026-09-01",
      "dropoff_time": "10:00",
      "pickup_date": "2026-09-10",
      "pickup_time": "20:00"
    }
  }'
                

Return parking products for an airport and date range. Authenticate with body credentials on every call.

Fees

/products returns parking prices only (no fees). Optional booking_fee, cancellation_fee, and sms_notification_fee are sent by your app on /bookings (top-level or nested under fees); the booking response echoes whatever you submitted.


Result example :

 "request": {
        "status": "success",
        "airport": "LHR",
        "arrival_date": "2025-04-29",
        "arrival_time": "09:00",
        "depart_date": "2025-04-23",
        "depart_time": "12:00"
    },
    "products": [
      
        {
            "companyID": 675,
            "product_code": "HAPS-001",
            "opening_time": "00:00",
            "closing_time": "00:00",
            "name": "Heathrow Airport Parking Service - Meet & Greet",
            "processtime": "1",
            "special_features": "CCTV,DISABILITY FRIENDLY,FENCING,PATROLLED,SECURITY LIGHTING",
            "bookingemail": "apibookings@api.magrgroup.com",
            "terms": null,
            "extra_charges": "0",
            "parking_type": "Meet and Greet",
            "logo": "https://dashboard.magrgroup.com/storage/app/companies/S3XatB3IRZgjP9Xi3VgoVNY9zmooGOU0stjIXoyl.png",
            "cancelable": "Yes",
            "editable": "Yes",
            "price": "55.99",
            "new_price": "55.99",
            "agent_amount": "8.40",
            "mg_amount": "12.00",
            "agent_month_end_return": "8.40",
            "mg_retained": "12.00",
            "park_api": "b2b",
            "overview": "Essentials\n\nEstimated journey time to the airport: Drop at the terminal\nYour
keys will stay in the car park whilst you are away.\nDisability Friendly\n\n
Overview:\nOpt for Heathrow Airport Parking Service Meet and Greet Super Saver for an efficient and discover the seamless parking experience with our Meet and Greet service – the hassle-free solution for business travellers and families. No more waiting at the airport, no terminal transfer worries, and no more shuttle buses, making it the perfect choice to save up to 35 minutes on your journey time. ", "return_proc": "Terminal 1\nPostcode: (TW6 1AP)\nClosed for renovation.\nTerminal 2\nPostcode: (TW6 1EW)\nDeparture:\nFrom the M4 exit follow the signs for Terminals 1, 2 & 3 all the way round following onto the Western Perimeter Road. Go through the main tunnel to the Central Terminal Area for Terminals 1, 2 & 3. Exiting the tunnel keep right passing the Central Bus Station joining the final approaches to Terminal 2 on Cosmopolitan Way. .\nArrival:\nOnce you have collected your luggage and are about to clear customs, call the number given when your car was collected. Make your way to the same place where you dropped the vehicle off Level 4 short stay car park, row R or S.", "arrival": "Note: Please ensure you contact this number, 0208 050 3364, at least 30 minutes prior to arrival.\nTerminal 1\nPostcode: (TW6 1AP)\nClosed for renovation.\nTerminal 2\nPostcode: (TW6 1EW)\nDeparture:\nFrom the M4 exit follow the signs for Terminals 1, 2 & 3 all the way round following onto the Western Perimeter Road. Go through the main tunnel to the Central Terminal Area for Terminals 1, 2 & 3. Exiting the tunnel keep right passing the Central Bus Station joining the final approaches to Terminal 2 on Cosmopolitan Way. Again keep right as the road to Terminal 2 will move away from building, before turning back as the road ramps up to Terminal 2 Departures & the Short Stay 2 car park on Constellation Way. On the rising ramp continue to keep right as the ramp will lead directly into the Short stay car park entry barriers. Take the barrier ticket and enter the car park. " "id": 1150, "admin_id": 101, "facilities": "Pick up at the Airport, Fully Insured Mature Driver's, 6 Miles from airport, Hassle free & convenient, Serving all terminals of Heathrow", "park_api": "b2b" },

QUERY PARAMETERS

Field Type Description
user_email String Registered email address.
password String Your login password.
agent_code String Your Secret Agent Code key.
airport String IATA Airport codes. e.g LGW, LHR:
depdate String Departure Date in YYYY-MM-DD format 1999-01-21.
deptime String Departure Time in H:i format 10:00.
returndate String Return Date in YYYY-MM-DD format 1999-01-27.
returntime String Return Time in H:i format 20:00.

RESPONSE PARAMETERS

Field Type Description
status String Indicates the status of the API response. In this case, 'success' denotes a successful response.
airport String IATA Airport codes. e.g LGW, LHR
products String This is an array where each object represents a different parking product. The objects within this array contain the following field.
companyID String The Stock Keeping Unit or ID for the parking product. This is a unique identifier for each product.
product_code String The Stock Keeping Unit or Product code for the parking product. This is a unique identifier for each product.
name String Name of the parking product.
bookingemail String email for confirmation. (apibookings@api.magrgroup.com)
price String The quoted parking price for the product (e.g. "75.00").
agent_amount / agent_month_end_return String Your parking share. M&G collects the full customer total; this amount is returned to you at month end. Fees are not included.
mg_amount / mg_retained String M&G parking share (fees are not included on /products).
Fees (booking_fee, cancellation_fee, sms_notification_fee) are not returned on products. Your app sends them on /bookings when the customer opts in; the booking response echoes what you sent.
facilities String parking product facilities given by company.
park_api String its define its B2B product.
logo String HTML string containing an image tag for the product's logo.
parking_type String Indicates the type of service offered. Meet & Greet Or Park & Ride
cancelable String Yes Indicates if the booking is flexible, No is non-flexiable
editable String Yes Indicates if the booking is editable, No is non-editable
overview String A detailed overview of the product, including benefits and features
arival String A detailed departure procedures including HTML for formatting.
return_proc String Detailed arrival procedures including HTML for formatting.
special_features String unique services from airport.
processtime String Minimum number of hours required for booking.
opening_time String time of company opening time.
closing_time String time of company closing time.

POST Create booking

https://api.magrgroup.com/api/bookings

Card payment (M&G Stripe) — agent website order

After the customer picks a product from /products: (1) create PaymentIntent for parking price + any fees your UI collected, (2) collect booking details on your form, (3) take card payment with Stripe.js, (4) call POST /bookings with those details + payment_token = pi_... and the same fee amounts (top-level or under fees). Money always settles on M&G Stripe. Backend re-quotes and checks the paid amount (discount only from your share). On /bookings the PaymentIntent must match this booking: same agent, product, dates/times, airport, unused pi_, status succeeded, and amount covering the protected share. A wrong or old PaymentIntent is rejected.


# Step 2 — customer clicked a product → create PaymentIntent
# Example: parking 55.99 + your UI fees (e.g. 1.99 + 1.99 + 1.25) = 61.22
curl -X POST https://api.magrgroup.com/api/payments/create-intent \
  -H 'Content-Type: application/json' \
  -d '{
    "user_email": "registered@emailaddress.com",
    "password": "your-password",
    "agent_code": "your-agent-code",
    "amount": 61.22,
    "currency": "gbp",
    "company_code": "HAPS-001",
    "park_api": "b2b",
    "airport_code": "LHR",
    "dropoff_date": "2026-09-10",
    "dropoff_time": "10:00",
    "pickup_date": "2026-09-15",
    "pickup_time": "10:00",
    "bookreference": "YOUR-CLIENT-REF-OPTIONAL"
}'
# Save: payment_intent_id, client_secret, publishable_key
# M&G booking reference (MG-A-{id}) is created later on /bookings — not here.
                    

Step 3 — on your website: show a form for name, email, phone, vehicle, flights. Keep values in page state (do not send /bookings yet).

Step 4 — card pay (Stripe.js) — use publishable_key + client_secret. Test card: 4242 4242 4242 4242, any future expiry, any CVC.


<!-- Include Stripe.js -->
<script src="https://js.stripe.com/v3/"></script>

<!-- Step 3: your booking details form (example fields) -->
<form id="details-form">
  <input name="first_name" placeholder="First name" required>
  <input name="last_name" placeholder="Last name" required>
  <input name="customer_email" type="email" placeholder="Email" required>
  <input name="phone_number" placeholder="Phone" required>
  <input name="car_registration_number" placeholder="Vehicle reg" required>
  <!-- …make, model, color, flights, terminals… -->
</form>

<!-- Step 4: card -->
<form id="payment-form">
  <div id="card-element"></div>
  <button id="submit">Pay & book</button>
  <div id="error"></div>
</form>

<script>
  // From create-intent (step 2):
  const publishableKey = 'pk_test_...';
  const clientSecret = 'pi_..._secret_...';

  const stripe = Stripe(publishableKey);
  const elements = stripe.elements();
  const card = elements.create('card');
  card.mount('#card-element');

  document.getElementById('payment-form').addEventListener('submit', async (e) => {
    e.preventDefault();
    document.getElementById('submit').disabled = true;

    // Read step-3 form values first
    const details = Object.fromEntries(new FormData(document.getElementById('details-form')));

    const { paymentIntent, error } = await stripe.confirmCardPayment(clientSecret, {
      payment_method: {
        card: card,
        billing_details: {
          name: (details.first_name + ' ' + details.last_name).trim(),
          email: details.customer_email,
          phone: details.phone_number,
        },
      },
    });

    if (error) {
      document.getElementById('error').textContent = error.message;
      document.getElementById('submit').disabled = false;
      return;
    }

    if (paymentIntent.status === 'succeeded') {
      // Step 5 — POST /bookings with details + payment_token
      await fetch('https://api.magrgroup.com/api/bookings', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          user_email: 'registered@emailaddress.com',
          password: 'your-password',
          agent_code: 'your-agent-code',
          company_code: 'HAPS-001',
          dropoff_date: '2026-09-10',
          dropoff_time: '10:00',
          pickup_date: '2026-09-15',
          pickup_time: '10:00',
          title: 'Mr',
          first_name: details.first_name,
          last_name: details.last_name,
          customer_email: details.customer_email,
          phone_number: details.phone_number,
          car_registration_number: details.car_registration_number,
          car_make: 'Ford',
          car_model: 'Focus',
          car_color: 'Blue',
          departure_flight_number: 'BA123',
          arrival_flight_number: 'BA456',
          departure_terminal: 'Terminal 2',
          arrival_terminal: 'Terminal 3',
          passenger: 1,
          park_api: 'b2b',
          paymentgateway: 'stripe',
          payment_token: paymentIntent.id,
          // optional: bookreference: 'YOUR-CLIENT-REF'
        }),
      }).then(r => r.json()).then(data => {
        // data.reference => "MG-A-12345"
        console.log('Booking reference', data.reference);
      });
    }
  });
</script>
                    

# Step 5 — same as the fetch above (after PI succeeded)
curl -X POST https://api.magrgroup.com/api/bookings \
  -H 'Content-Type: application/json' \
  -d '{
    "user_email": "registered@emailaddress.com",
    "password": "your-password",
    "agent_code": "your-agent-code",
    "company_code": "HAPS-001",
    "dropoff_time": "10:00",
    "dropoff_date": "2026-09-10",
    "pickup_time": "10:00",
    "pickup_date": "2026-09-15",
    "title": "Mr",
    "first_name": "John",
    "last_name": "Smith",
    "customer_email": "customer@example.com",
    "phone_number": "07123456789",
    "departure_flight_number": "BA123",
    "arrival_flight_number": "BA456",
    "departure_terminal": "Terminal 2",
    "arrival_terminal": "Terminal 3",
    "car_registration_number": "AB12 CDE",
    "car_make": "Ford",
    "car_model": "Focus",
    "car_color": "Blue",
    "passenger": 1,
    "park_api": "b2b",
    "paymentgateway": "stripe",
    "payment_token": "pi_XXXXXXXX",
    "fees": {
      "booking_fee": "1.99",
      "cancellation_fee": "1.25",
      "sms_notification_fee": "1.99"
    }
}'
# Response example:
# {
#   "success": true,
#   "message": "Booking created",
#   "reference": "MG-A-12345",
#   "booking_amount": 61.22,
#   "fees": {
#     "booking_fee": "1.99",
#     "cancellation_fee": "1.25",
#     "sms_notification_fee": "1.99"
#   }
# }
                    

Create a booking after quoting. Use product_code / company_code and park_api from the products response. booking_amount in the response is the total collected on M&G Stripe. fees in the response echoes the fee amounts you sent on the booking request (not catalog defaults).

JSON BOOKING POST DATA PARAMETERS

Field Type Description
agent_code String Your secret agent code used for authentication.
user_email String User Email of the booking partner or agent.
password String Password of the booking partner or agent.
company_code String Unique code assigned to the parking company.
bookreference String Optional. Your own client/order reference (stored as extra ref). M&G booking reference is generated automatically as MG-A-{id} and returned in the response.
dropoff_time String Scheduled time for vehicle drop-off (format: H:i).
dropoff_date String Scheduled date for vehicle drop-off (format: YYYY-MM-DD).
pickup_time String Scheduled time for vehicle pickup (format: H:i).
pickup_date String Scheduled date for vehicle pickup (format: YYYY-MM-DD).
title String Title of the customer (e.g., Mr, Mrs, Miss).
first_name String First name of the customer.
last_name String Last name of the customer.
customer_email String Email address this is agent email for conformation email.
phone_number String Contact phone number of the customer.
departure_flight_number String Flight number of the departure flight.
arrival_flight_number String Flight number of the return/arrival flight.
departure_terminal String Terminal of departure at the airport.
arrival_terminal String Terminal of arrival at the airport.
car_registration_number String Vehicle registration number.
car_make String Make/brand of the car (e.g., Ford, BMW).
car_model String Model of the car (e.g., Fiesta, X5).
car_color String Color of the car.
park_api String Booking source identifier (e.g., b2b, direct).
passenger String Number of passengers for the booking.
paymentgateway String Use stripe. Payment is collected on your website via M&G Stripe PaymentIntent.
payment_token String Stripe PaymentIntent id (pi_...) after status is succeeded.
booking_amount String Total amount charged for the booking (parking + fees collected on the PaymentIntent).
fees Object Optional. Fees your UI collected, e.g. {"booking_fee":"1.99","cancellation_fee":"1.25","sms_notification_fee":"1.99"}. Top-level keys also accepted. Echoed back in the response.

                Sample success response  :
                {
                    "success": true,
                    "message": "Booking created",
                    "reference": "MG-A-12345",
                    "booking_amount": 61.22,
                    "fees": {
                        "booking_fee": "1.99",
                        "cancellation_fee": "1.25",
                        "sms_notification_fee": "1.99"
                    }
                }
                

RESPONSE PARAMETERS

Field Type Description
success Boolean true when the booking was created.
message String Booking created
reference String A unique parking reference code for the booking for customer, in this case, "MG-A-12345".
booking_amount Number Total amount collected (parking + fees) on M&G Stripe for this booking.
fees Object Echo of fees you sent on the booking request: booking_fee, cancellation_fee, sms_notification_fee (empty object if none were sent).

POST Amend booking

https://api.magrgroup.com/api/amend

Non-Flexible Booking: This type of booking cannot be modified once confirmed. Flexible Booking: Modifications to this booking type are permitted, provided they are made at least 24 hours prior to the scheduled departure date. Using Stripe Payment Intent Method, API doesn't support Extend Booking Request.For date change cancel the booking and book again.But if you want to change only the airport details or customer details follow the bellow request


                curl \
                -X POST https://api.magrgroup.com/api/amend/ \
                -H 'Content-Type: application/json' \
                -H 'Cache-Control: no-cache' \
                -d '{
                    "company_code": "HAPS-001",
                    "bookreference": "CDC-012504222077",
                    "amend_booking": "amend_booking",
                    "dropoff_time": "09:00",
                    "dropoff_date": "2025-04-24",
                    "pickup_time": "09:00",
                    "pickup_date": "2025-04-29",
                    "title": "Mr",
                    "first_name": "test",
                    "last_name": "test",
                    "customer_email": "b2b@meetandgreetparkingdeals.com",
                    "phone_number": "23433323",
                    "departure_flight_number": "TBA",
                    "arrival_flight_number": "test",
                    "departure_terminal": "Terminal 2",
                    "arrival_terminal": "Terminal 3",
                    "car_registration_number": "test",
                    "car_make": "test",
                    "car_model": "test",
                    "car_color": "test",
                    "park_api": "b2b",
                    "passenger": 1,
                    "paymentgateway": "Invoice",
                    "payment_token": "pi_3RGghGL3PGdUbgCn0UtqdIj3",
                    "booking_amount": 50.99,
                    "agent_code": "Ic5w0rP2kWu4M5DVDUztZH6tYqPb",
                    "user_email": "b2b@meetandgreetparkingdeals.com",
                    "password": "1234"
                }'
                
Field Type Description
agent_code String Your secret agent code used for authentication.
user_email String User Email of the booking partner or agent.
password String Password of the booking partner or agent.
company_code String Unique code assigned to the parking company.
bookreference String M&G booking reference from the create-booking response (e.g. MG-A-12345).
amend_booking String Flag to indicate if this is an amendment to an existing booking.
dropoff_time String Scheduled time for vehicle its change able in amend drop-off (format: H:i).
dropoff_date String Scheduled date for vehicle that will be at booking time its not change drop-off (format: YYYY-MM-DD).
pickup_time String Scheduled time for vehicle its change able in amend pickup (format: H:i).
pickup_date String Scheduled date for vehicle that will be at booking time its not change pickup (format: YYYY-MM-DD).
title String Title of the customer (e.g., Mr, Mrs, Miss).
first_name String First name of the customer.
last_name String Last name of the customer.
customer_email String Email address this is agent email for conformation email.
phone_number String Contact phone number of the customer.
departure_flight_number String Flight number of the departure flight.
arrival_flight_number String Flight number of the return/arrival flight.
departure_terminal String Terminal of departure at the airport.
arrival_terminal String Terminal of arrival at the airport.
car_registration_number String Vehicle registration number.
car_make String Make/brand of the car (e.g., Ford, BMW).
car_model String Model of the car (e.g., Fiesta, X5).
car_color String Color of the car.
park_api String Booking source identifier (e.g., b2b, direct).
passenger String Number of passengers for the booking.
paymentgateway String Payment method used (e.g., Card, Invoice) at booking time.
payment_token String Token received from the payment gateway at booking time .
booking_amount String Total amount charged for the booking.

RESPONSE PARAMETERS


        Amend Sample Success response :
        {
            "status": "success",
            "message": "Booking updated successfully",
            "reference": "MG-A-12345",
        }
        

        Amend Sample user email,key or password Error response :
        {
            "status": "Error",
            "message": "Invalid API Credentials (User not found)",
            }
        

        Amend Sample 48 Hours Error response :
        {
            "status": "Error",
            "message": "Booking cannot be amended within 48 hours of departure",
            
        }
        

        Amend Sample NonFlex Error response :
        {
            "status": "Error",
            "message": "the product must be flex",
                
        }
        
Field Type Description
Status String Indicates the status of the API response. 'success' denotes a successful completion of the booking amendment. 'error' denotes failure of booking amendment..
message String if 'success' a confirmation message to show that booking has been amended successfully. if 'error' a response message to show the reason why booking cannot be amended.
reference String A unique parking reference code that send in request for update, in this case, "MG-A-12345".

POST Cancel booking

https://api.magrgroup.com/api/cancel

Submits a cancellation request only. The product must be cancelable=Yes and drop-off at least 24 hours away. M&G cancels with the parking company afterwards; Stripe refund is issued only after company confirmation. Non-cancelable products return an error and do not create a request. Same behaviour on /cancel_booking and /partner/parking/cancel.


                curl \
                -X POST https://api.magrgroup.com/api/cancel/ \
                -H 'Content-Type: application/json' \
                -H 'Cache-Control: no-cache' \
                -d '{ 
                    "booking_ref": "CDC-012504222077",
                    "refund": 50.99,
                    "agent_code": "Ic5w0rP2kWu4M5DVDUztZH6tYqPb",
                    "user_email": "b2b@meetandgreetparkingdeals.com",
                    "password": "1234"
                }'
                
Field Type Description
agent_code String Your secret agent code used for authentication.
user_email String User Email of the booking partner or agent.
password String Password of the booking partner or agent.
booking_ref String the Unique booking reference that will get in response of booking conformation.
refund String Total amount refund for the booking.whcih is not more then the acutal booking amount

RESPONSE PARAMETERS


                Cancellation Sample response :
        {
            "status": "success",
            "message": "Cancellation request received. You will be notified after the company confirms.",
            "booking_ref": "MG-A-12345",
            "cancel_stage": "Pending",
            "cancelable": "Yes",
            "requested_refund": "50.99"
        }
        

        Cancel Sample user email,key or password Error response :
        {
            "status": "Error",
            "message": "Invalid API Credentials (User not found)",
            }
        

        Cancel Sample 48 Hours Error response :
        {
            "status": "Error",
            "message": "Booking cannot be Cancel within 48 hours of departure",
            
        }
        

        Cancel Sample NonFlex Error response :
        {
            "status": "Error",
            "message": "the product must be flex",
                
        }
        
Field Type Description
Status String Indicates the status of the API response. 'success' denotes a successful completion of the booking Cancellatoin. 'error' denotes failure of booking Cancellatoin..
message String if 'success' a confirmation message to show that booking has been Cancellatoin successfully. if 'error' a response message to show the reason why booking cannot be Cancellatoin.
reference String A unique parking reference code that send in request for update, in this case, "MG-A-12345".

Errors

The meet and greet API sent following error response:

EMPTY OR INVALID LOGIN EMAIL & HASH KEY PARAMETERS


                Error Sample response :
        {
            "status": "Error",
            "message": "User Email is required or Invalid API Credentials ",
            
        }
        

        Error Sample response :
        {
            "status": "Error",
            "message": "Your request is for live API but your account is in test mode. Use https://dev-api.magrgroup.com for test accounts.",
            
        }
        

        Error Sample response :
        {
            "status": "Error",
            "message": "e.g Booking Reference is Missing. Payment Transaction is Missing.",
            
        }
        
Field Type Description
Status String Indicates the status of the API response. In this case, 'error' denotes a failure to provide wrong / empty required parameters.
message String User Email is required or Invalid API Credentials

TEST / LIVE API MODE

Field Type Description
Status String Indicates the status of the API response. In this case, 'error' denotes a failure using Live / Test API over wrong end points.
message String Your request is for live API but your account is in test mode

TEST / LIVE API MODE

Field Type Description
Status String Indicates the status of the API response. In this case, 'error' denotes a failure when sending wrong , invalid or empty required parameters.
message String Contains detail of missing parameters.
Copied