Elife Partner API - MultiModal ## Sections • [About Elife APIs](https://developers.elifelimo.com/new-section.md): Elifelimo provides a set of APIs designed to integrate with partner systems for ride booking, management, and related services. API Endpoint Allocation API endpoints are provided per partner and per API , allowing Elife to manage computational resources based on each partner’s volume and specific implementation requirements. Sandbox Environment A sandbox environment is provisioned for each partner to support development and testing before production deployment. Sandbox endpoints will be shared during the development phase. Available APIs The following RESTful APIs are available to support ride booking and management: Ride Quote API API allows users to retrieve pricing information for potential rides. By utilizing this feature, users can quickly obtain quotes for partner rides, facilitating cost estimation and informed decision-making in transportation planning. Reservation API The Reservation API is applicable only for train as the vehicle class. Reserves a train ticket for the given quote_id . Returns the total price of the ride with breakup. Ride Order Creation API API allows users to schedule transportation services for one-way, round-trips and hourly rides by providing essential details such as pickup and drop-off locations, passenger information, and vehicle class. API Creates a booking. Ride Order update API The Ride Update API allows updating all details of an existing ride booking, including, Pickup and drop-off locations, date and time, vehicle type, flight information etc Ride Cancellation API Allows cancellation of a scheduled ride. Ride Order Status API Retrieves the current status of an existing booking. Update Passenger API Updates passenger information, including contact details and luggage specifications. Trip Status Allows adding of special instructions to the Ride order. Ride Detail Allows to retrieve all the details of the ride • [API Authentication](https://developers.elifelimo.com/api-authentication.md): There are two ways to authenticate with the Elife Partner APIs: OAuth and Key/Value. OAuth With OAuth, you first generate a token using your partner credentials, then include it as a Bearer token in subsequent API requests. Step 1 — Generate a token: CURL curl --location 'https://i40wk1nqfj.execute-api.us-east-2.amazonaws.com/dev/partner-rides/oauth/token' \ --header 'Content-Type: application/json' \ --data '{ "partner_name": "PARTNER_NAME", "partner_key": "PARTNER_KEY" }' Step 2 — Use the token in API requests: CURL curl --location 'https://dasvcm8z7h.execute-api.us-east-2.amazonaws.com/dev/partner-rides/quotes' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <your_token>' \ --data '{ "request_id": "202608071500", "from": { "lat": 37.6192568, "lng": -122.3841488, "name": "San Francisco International Airport" }, "to": { "lat": 37.6156445, "lng": -122.3974825, "name": "Hotel Aura" }, "time": 1786333474 }' Key/Value With Key/Value authentication, your partner credentials are passed directly in the request body alongside the API payload — no separate token generation step is required. CURL curl --location 'https://i40wk1nqfj.execute-api.us-east-2.amazonaws.com/dev/partner-rides/quotes' \ --header 'Content-Type: application/json' \ --data '{ "partner": "PARTNER_NAME", "key": "PARTNER_KEY", "request_id": "unique-request-id", "from": { "lat": 37.6192568, "lng": -122.3841488, "name": "San Francisco International Airport" }, "to": { "lat": 37.6156445, "lng": -122.3974825, "name": "Hotel Aura" }, "time": 1772769965 }' • [Ride Quotes](https://developers.elifelimo.com/ride-quotes.md): The "Ride Quotes" API allows users to retrieve pricing information for potential rides. By utilizing this feature, users can quickly obtain quotes for partner rides, facilitating cost estimation and informed decision-making in transportation planning. Quotes can be obtained for: Point to Point, a.k.a. one way rides. A ​ point-to-point ​ (or ​ one-way ​) ride refers to a trip with a single pickup and drop-off location, without a scheduled return. In such cases, the request does not include a ​ return_time ​ parameter, and pricing is calculated based solely on the one-way journey. If the ​ time ​ is now, request is treated as Ride hailing Round trip rides. A ride is considered a ​ round trip ​ if the request includes the ​ return_time ​parameter. The presence of this parameter indicates that the ride is not one-way. In such cases, the returned price will reflect the round-trip fare. Additionally, booking a round-trip ride may offer a discount compared to booking two separate one-way trips. Duration based rides (hourly). An ​ hourly ride ​ is basically a ride based on ​ duration ​, and service will be rendered for the ​ duration ​ quoted. It is expected the drop off address will be in close proximity to the pickup address. To get a quote and create a ride based on duration, the ​ to ​ field must be the same as the ​ from ​field, and an additional field ​ duration ​ ​ must ​ ​ be ​ provided to indicate the number of minutes requested. Multi day rides. Multi-day rides are represented as a sequence of individual ​ trip segments ​, each corresponding to a leg of the journey. These segments are defined using the ​ trips ​ array in the request payload or ride configuration. If the ​ trips ​ array is ​ present ​, the ride is treated as a ​ multi-day journey ​ composed of discrete legs. If the ​ trips ​ array is ​ not provided ​, the ride defaults to one of the standard ride types ​ Point to point, aka one-way, Round-trip, Hourly Train Booking Train Booking are ride bookings with vehicle class as ​ Trains ​ , you can search for train schedule in ​ close proximity ​to your requested from and to location and you journey datetime, The API returns a list of train schedules from which you can book a ​ oneway/roundtrip ​ train by picking you convinient schedule. Ride Hailing Ride Hailing rides are on demand rides or Asap ​ one way ​ ride. you need to provide the time as ​ now ​ to search for the real time availability for the ride. • [Reservation](https://developers.elifelimo.com/reservation.md): The Reservation API is used to reserve a train ticket for a given schedule associated with a quote_id . Each reservation is valid for 9 minutes from the time of request, and there is a one-to-one relationship between a train reservation and the quote_id in the quote response. A new quote_id must be used for every reservation request, and the API returns the reservation details along with the total price of the ride • [Book a ride](https://developers.elifelimo.com/create-one-way-ride.md): The "Book a ride" allows users to schedule transportation services for one-way, round-trips and hourly rides by providing essential details such as pickup and drop-off locations, passenger information, and vehicle class. Point to Point, a.k.a. one way rides. A point-to-point (or one-way ) ride refers to a trip with a single pickup and drop-off location, without a scheduled return. In such cases, the request does not include a return_time parameter, and pricing is calculated based solely on the one-way journey. If the time is now, request is treated as Ride hailing. Round trip rides. A ride is considered a round trip if the request includes the return_time parameter. The presence of this parameter indicates that the ride is not one-way. In such cases, the returned price will reflect the round-trip fare. Additionally, booking a round-trip ride may offer a discount compared to booking two separate one-way trips. Duration based rides (hourly). An hourly ride is basically a ride based on duration , and service will be rendered for the duration quoted. It is expected the drop off address will be in close proximity to the pickup address. To get a quote and create a ride based on duration, the to field must be the same as the from field, and an additional field duration must be provided to indicate the number of minutes requested. Multi day rides. Multi-day rides are represented as a sequence of individual trip segments , each corresponding to a leg of the journey. These segments are defined using the trips array in the request payload or ride configuration. If the trips array is present , the ride is treated as a multi-day journey composed of discrete legs. If the trips array is not provided , the ride defaults to one of the standard ride types Point to point, aka one-way, Round-trip, Hourly Train Booking A train booking as represented as trips , need to provide the quote id for each trip. Also its required to provide details of all passenger in the passengers array , with the booking fields that are mandatory which is sent in the quote response. Ride Hailing Ride Hailing rides are on demand rides or Asap one way ride. you need to provide the time as now to make the booking as ride hailing • [Update ride](https://developers.elifelimo.com/patch-ride.md): The "Update ride" API allows users to modify and adjust existing ride information, such as passenger details, locations, vehicle class, and additional services. Users can seamlessly update and manage ride specifics within the API to ensure accurate and up-to-date ride information. Update ride is supported only for one way, hourly and roundtrip rides. It is not applicable for multiday, mutivehicle, train and ride hailing rides. • [Cancel ride](https://developers.elifelimo.com/partner-rides-v2-cancel.md): The Cancel ride section of the API empowers partners to efficiently manage and update ride statuses within the system by canceling specific rides. By utilizing this functionality, users can swiftly make real-time adjustments to their ride information, providing them with enhanced flexibility and control over partner-related actions. • [Ride Status](https://developers.elifelimo.com/partner-ride-get.md): The Ride Status section in the Default project API allows users to retrieve detailed information about a specific partner ride. By accessing this section, users can easily track and manage essential data related to a particular ride within their application, enabling efficient monitoring and control of partner ride details. • [Passenger Update](https://developers.elifelimo.com/partner-rides-v2-passenger-update.md): The Passenger Update section allows users to modify and update passenger details for specific rides within the Elife Partner API. By enabling changes to passenger information such as names, contact details, and luggage counts, users can ensure personalized and accurate transportation experiences for their clients. This section empowers users to manage passenger data seamlessly and facilitate smooth communication during rides. Passenger Update is only applicable for prebooked rides and currently does not support train and ride hailing rides. • [Trip Status](https://developers.elifelimo.com/trip-detail-status.md): The "Trip Status" section of the Elife Partner API allows users to retrieve real-time updates on the status of trip details associated with their account. With this functionality, users can monitor and track the progress of specific trips, enabling them to make timely decisions and adjustments as needed. • [Ride Detail](https://developers.elifelimo.com/ride-detail.md): The Ride Detail section provides comprehensive information about a specific ride, including details about the passenger, vehicle, price, and dispatches. Users can retrieve detailed data about a ride's origin, destination, duration, and additional pertinent information to facilitate effective management and tracking of rides within the system. • [Authentication](https://developers.elifelimo.com/webhooks/oauth.md): Elife calls into the partner system to get the access token using the client id and client secret • [Provide driver and vehicle details](https://developers.elifelimo.com/webhooks/provide-driver-and-vehicle-details.md): The webhooks below are based on Elife's specification. However, Elife is dedicated to streamline integration and is flexible to adapt to partner's technology and API capability. Elife is open to use partner's existing webhook specification. The authentication mechanism for accessing the API is subject to agreement with the integration partner. The specific method—such as API key or OAuth 2.0, will be determined and formalized during the integration planning phase. This callback is triggered when a driver and vehicle have been assigned to a ride. It delivers the relevant details to the partner system, enabling real-time updates and preparation for ride fulfillment. • [Send driver events and location details](https://developers.elifelimo.com/webhooks/about-webhooks.md): The webhooks below are based on Elife's specification. However, Elife is dedicated to streamline integration and is flexible to adapt to partner's technology and API capability. Elife is open to use partner's existing webhook specification. The authentication mechanism for accessing the API is subject to agreement with the integration partner. The specific method—such as API key or OAuth 2.0, will be determined and formalized during the integration planning phase. This callback provides details on changes of driver status and location detail updates on a periodic basis as the trip is being done. The frequency of driver location updates is configurable and should be agreed upon during integration. While some platforms (e.g., Uber) send location data every 4 seconds, such frequency may be considered excessive depending on the use case and operational constraints. Collected data can be batched and transmitted at a different interval (e.g., every 60 seconds, via the webhook • [Send Final Fare](https://developers.elifelimo.com/webhooks/send-final-fare.md) • [Vehicle Mapping](https://developers.elifelimo.com/enumerations/vehical-mapping.md): Vehicle Mapping included in the Availability response payload, acts as a unique reference used to categorize vehicle groups. It supports consistent mapping across different locales, enabling effective integration." Review Elife Vehicle Classes Refer to the documentation to understand each vehicle class (e.g., Business, MPV, First Class, Minibus, Limo, Shuttles). Focus on definitions based on comfort, use case, passenger capacity, and typical vehicle models or equivalents. For more details, you can also refer to Elife’s Fleet Overview . Create a Mapping Matrix Map your local vehicle types to the closest Elife vehicle classes by comparing key attributes such as passenger capacity, luggage volume, comfort level, and vehicle type (e.g., sedan, van). Validate Class Compatibility Collaborate with Elife’s team to resolve any ambiguous mappings. Ensure alignment with Elife’s regional availability and naming conventions, and validate the mapping logic for uncommon or edge-case vehicle types. Implement in Integration Layer Incorporate the mapping logic into your backend integration layer. Ensure that each quote and booking API request correctly translates your local vehicle class into the corresponding Elife-compatible class parameter. Logging & Auditing Log all mapping events, including both successful mappings and exceptions. This facilitates debugging of incorrect bookings, monitoring of mapping-related issues, and effective handling of customer service inquiries. Continuous Review Regularly review and update your vehicle class mappings to account for changes such as: • New vehicles added to your fleet • New vehicle classes introduced by Elife • Updates to classification rules or regional shifts in vehicle categorization For more details or clarifications, please reach out to the Elife Business Team or feel free to contact the Elife Tech Team. • [Trip Type](https://developers.elifelimo.com/enumerations/trip-type.md): One Way A single-direction journey from the pickup location to the drop-off location. No return trip is included. Round Trip A journey that includes both the outbound and return legs. The vehicle wa/its at the destination or returns after a specified duration. Hourly (As Directed) A flexible ride where the vehicle and driver are available for a fixed number of hours. Ideal for multiple stops or events. Pricing is usually time-based Multiday A long-duration booking that spans multiple days, often used for tours, road trips, or business travel with extended itineraries. Shuttle A shared or private service that operates between fixed points (e.g., airport to hotel) on a predefined schedule or on demand. Train Ride A point-to-point intercity or intracity journey via train. This includes booking and managing rail transport along with optional ground pickup and drop-off support. Train Service (Addon/Connection) A complementary ground transport service before or after a train journey, supporting first-mile or last-mile connectivity. Charter A custom, often large-capacity booking (e.g., buses or minibuses) arranged for specific group travel, events, or tours. • [Postman Collection](https://developers.elifelimo.com/sdk-and-tools/postman-collection.md): https://www.postman.com/elife-partner-rides/elife/collection/em14yhv/elife-partner-rides-multimodal-api-collection • [Widgets and Whitelabels](https://developers.elifelimo.com/sdk-and-tools/widgets-and-whitelabels.md): https://github.com/h5-integrations/whitelabel/wiki/SDK-Integration-Guide • [SDK Token Issuance](https://developers.elifelimo.com/sdk-and-tools/widgets-and-whitelabels/sdk-token-issuance.md): Request — POST {base_url}/h5/oauth/token Prebook token (raw passenger identity): JSON { "partner_name": "Partner Name", "partner_key": "Partner Key", "email": "jane.doe@example.com", "phone": "+123212321", "first_name": "Jane", "last_name": "Doe", "salutation": "Ms" } Ride Hailing token — same shape, but the partner_name and partner_key values are replaced with the ride hailing equivalent Responses Title Description Title Status When Body 200 Partner valid and sdk_enabled = true { access_token, token_type: "Bearer", expires_in: 86400 } 401 partner_key mismatch — 403 Partner found but sdk_enabled = false — On 200 , The returned access_token is what the host passes to the SDK as token / rhToken . Notes onSessionInvalid is debounced: a burst of 401s fires the host exactly once ( sessionInvalidFired in callbacks.ts ) until a new token is set. Runtime refresh without remount: handle.updateSession(ses) and handle.setRhToken(token) swap tokens in place; the SDK keeps running. onLogout vs onExit : logout clears the session and is host-owned; exit leaves the session intact and just returns the user to the host UI. The SDK never authenticates a user. No password, OTP, or OAuth flow lives in the SDK — minting ses / rhToken is entirely the host/partner backend's job • [Web Mobile SDK](https://developers.elifelimo.com/sdk-and-tools/widgets-and-whitelabels/h5-mobile-sdk-copy.md): Getting Started Embed the ElifeRide booking widget in a web page. The widget loads as a single JS + CSS bundle — no build step or native SDK required. You'll need three things: A jwt token ( token ) — obtained from ElifeRide by your backend (see below). A Google Maps JavaScript API key , restricted to your page's origin. The bundle URL for eliferide-sdk.css and eliferide-sdk.umd.js . Get a session token The widget authenticates the passenger with a session token . This token is issued by ElifeRide — your backend requests it, never the browser. ElifeRide issues you partner credentials (a partner name + key). Your backend calls the ElifeRide token endpoint with those credentials and the passenger's details (name, email, and a phone number in E.164 format, e.g. +1234567890 ) and receives an access_token . Your backend returns that access_token to your page, which passes it to initSDK as ses . Keep your partner credentials on your server — never include them in client-side code. The token endpoint URL is provided to you together with your partner credentials. Minimal initialization Load the styles, add a sized mount element, load the bundle, then call initSDK : HTML <link rel="stylesheet" href="https://YOUR_CDN/eliferide-sdk.css" /> <div id="er-root" style="width:100vw;height:100vh"></div> <script src="https://YOUR_CDN/eliferide-sdk.umd.js"></script> <script> window.ERRideSDK.ERSDKManager.initSDK({ mountEl: '#er-root', googleApiKey: 'YOUR_GOOGLE_MAPS_API_KEY', token: 'ACCESS_TOKEN', currency: 'GBP', // ISO-4217 locale: 'en', theme: { colorPrimary: '#1565C0', colorSecondary: '#FF7043' }, }); </script> <link rel="stylesheet" href="https://YOUR_CDN/eliferide-sdk.css" /> <div id="er-root" style="width:100vw;height:100vh"></div> <script src="https://YOUR_CDN/eliferide-sdk.umd.js"></script> <script> window.ERRideSDK.ERSDKManager.initSDK({ mountEl: '#er-root', googleApiKey: 'YOUR_GOOGLE_MAPS_API_KEY', token: 'ACCESS_TOKEN', currency: 'GBP', // ISO-4217 locale: 'en', theme: { colorPrimary: '#1565C0', colorSecondary: '#FF7043' }, }); </script> These options are required: Title Description Option Description mountEl CSS selector or element to render into. Must have a definite size. googleApiKey Google Maps JavaScript API key, restricted to your origin. token The user's session token, issued by your backend. currency ISO-4217 code (e.g. GBP , USD , EUR , JPY ). locale Language code (e.g. en , fr , de , ar ). theme.colorPrimary Primary brand / button colour. theme.colorSecondary Accent colour (links, selected states). Working example HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" /> <title>Book a ride</title> <link rel="stylesheet" href="https://YOUR_CDN/eliferide-sdk.css" /> <style> html, body { margin: 0; height: 100%; } #er-root { width: 100vw; height: 100vh; } </style> </head> <body> <div id="er-root"></div> <script src="https://YOUR_CDN/eliferide-sdk.umd.js"></script> <script> // Your backend returns a session token for the signed-in user. // The phone number used to mint it must be in E.164 format (e.g. +447911123456). async function getSession() { const res = await fetch('/api/eliferide/session', { method: 'POST' }); const { access_token } = await res.json(); return access_token; } (async () => { const ses = await getSession(); const handle = window.ERRideSDK.ERSDKManager.initSDK({ mountEl: '#er-root', googleApiKey: 'YOUR_GOOGLE_MAPS_API_KEY', ses, currency: 'GBP', locale: 'en', theme: { colorPrimary: '#1565C0', colorSecondary: '#FF7043' }, onLogout: () => location.assign('/login'), onSessionInvalid: async () => { handle.updateSession(await getSession()); // re-auth without reloading }, }); })(); </script> </body> </html> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" /> <title>Book a ride</title> <link rel="stylesheet" href="https://YOUR_CDN/eliferide-sdk.css" /> <style> html, body { margin: 0; height: 100%; } #er-root { width: 100vw; height: 100vh; } </style> </head> <body> <div id="er-root"></div> <script src="https://YOUR_CDN/eliferide-sdk.umd.js"></script> <script> // Your backend returns a session token for the signed-in user. // The phone number used to mint it must be in E.164 format (e.g. +447911123456). async function getSession() { const res = await fetch('/api/eliferide/session', { method: 'POST' }); const { access_token } = await res.json(); return access_token; } (async () => { const ses = await getSession(); const handle = window.ERRideSDK.ERSDKManager.initSDK({ mountEl: '#er-root', googleApiKey: 'YOUR_GOOGLE_MAPS_API_KEY', ses, currency: 'GBP', locale: 'en', theme: { colorPrimary: '#1565C0', colorSecondary: '#FF7043' }, onLogout: () => location.assign('/login'), onSessionInvalid: async () => { handle.updateSession(await getSession()); // re-auth without reloading }, }); })(); </script> </body> </html> Expected result The widget fills #er-root and opens on the booking home screen: a map and a "Where to?" destination search. From there the passenger can search a destination, view fare quotes, choose a vehicle, pay by card, and follow live driver tracking — all themed with your colours and rendered in your chosen language and currency. If a required option is missing or invalid, the widget does not start and logs a clear ERRideSDK: … message to the browser console. See Errors & troubleshooting for the full list. Example structure The page always has the same four parts, in this order: Plain Text <head> └─ eliferide-sdk.css styles <body> ├─ <div id="er-root"> sized container the widget renders into ├─ eliferide-sdk.umd.js the bundle (defines window.ERRideSDK) └─ your script: 1. get a session token from your backend 2. ERSDKManager.initSDK({ … }) → returns a handle 3. use the handle to update or remove the widget <head> └─ eliferide-sdk.css styles <body> ├─ <div id="er-root"> sized container the widget renders into ├─ eliferide-sdk.umd.js the bundle (defines window.ERRideSDK) └─ your script: 1. get a session token from your backend 2. ERSDKManager.initSDK({ … }) → returns a handle 3. use the handle to update or remove the widget initSDK returns a handle for controlling the widget at runtime without reloading: updateSession(ses) , setLocale(...) , setTheme(...) / setPrimaryColor(...) , setCurrency(...) , setPickup(...) / setDropoff(...) , and unmount() . Optional init options include env ( 'dev' for sandbox, default 'prod' ), font , pickup / dropoff to pre-fill a location, and the onLogout , onSessionInvalid , and onExit callbacks. Reference Supported currencies Pass one of these ISO-4217 codes as currency . Title Description Title Code Currency Region GBP Pound sterling United Kingdom USD US dollar United States EUR Euro Eurozone CNY Chinese yuan (Renminbi) China JPY Japanese yen Japan HKD Hong Kong dollar Hong Kong THB Thai baht Thailand VND Vietnamese đồng Vietnam MXN Mexican peso Mexico AUD Australian dollar Australia PHP Philippine peso Philippines CAD Canadian dollar Canada KRW South Korean won South Korea SGD Singapore dollar Singapore TRY Turkish lira Türkiye AED UAE dirham United Arab Emirates SAR Saudi riyal Saudi Arabia INR Indian rupee India IDR Indonesian rupiah Indonesia MYR Malaysian ringgit Malaysia CHF Swiss franc Switzerland DKK Danish krone Denmark SEK Swedish krona Sweden NOK Norwegian krone Norway ZAR South African rand South Africa PLN Polish złoty Poland Supported languages Pass one of these codes as locale . Title Description Code Language en English zh Chinese (Simplified) ja Japanese ar Arabic (right-to-left) vi Vietnamese pt Portuguese tr Turkish es Spanish fr French it Italian de German da Danish sv Swedish no Norwegian nl Dutch Errors & troubleshooting Initialization errors are thrown synchronously and logged to the browser console. Title Description Title Message / symptom Cause Fix ERRideSDK: ses (session token) is required No session token passed Pass ses from your backend ERRideSDK: googleApiKey is required No Maps key passed Pass googleApiKey ERRideSDK: currency is required No currency passed Pass a currency ERRideSDK: unsupported currency "…" Code not in Supported currencies Use a listed ISO-4217 code ERRideSDK: locale is required No locale passed Pass a locale ERRideSDK: unsupported locale "…" Code not in Supported languages Use a listed language code ERRideSDK: primary colour is required (theme.colorPrimary or themeColorHex) No primary colour Set theme.colorPrimary ERRideSDK: secondary colour is required (theme.colorSecondary) No secondary colour Set theme.colorSecondary ERRideSDK: invalid font "…" font value not recognised Use a bundled family name or { family, url } ERRideSDK: rhToken must be a non-empty string when provided Empty rhToken Omit it, or pass a valid token Blank / zero-height widget Mount element has no size Give the mount element a definite width and height ApiTargetBlockedMapError (console) Maps key not allowed for this origin Add your origin to the key's HTTP-referrer restrictions Session expires during use Backend returned 401 Handle onSessionInvalid and call handle.updateSession(newSes) • [Go live Checklist](https://developers.elifelimo.com/go-live-checklist.md): Integration Certification Guide – Elife API This guide outlines the certification process required to validate your integration with the Elfe API prior to going live in the production environment. As part of this process, partners are expected to complete a series of structured test scenarios and submit relevant logs for review by the Elife technical team. The objective is to ensure correct handling of bookings, data transmission, disclaimer logic, and voucher generation as per Elife’s operational standards. ✅ Elife Partner API – Go-Live Checklist for Integration Partners 1. Authentication Setup Partner has received API Key from Elife and validated it in sandbox API requests use the correct authentication method (e.g., Bearer token). Token referesh or renewal flow is implemented (if applicable). Authorization header (`Authorization: Bearer <token>`) is included in all requests. Secure storage of API credentials is ensured (e.g., environment variables). 2 . Environment Configuration Sandbox base URL (``) used for integration testing. Production base URL (` ) configured for go-live. No sandbox keys or URLs exist in the production environment. Environment variables or configuration toggles are used for environment switching. Partner confirms separation between test and live booking workflows. 3. Functional API Testing Partner has received API Key from Elife and validated it in sandbox. Partner /ride-quotes` tested with various parameters including serviceType, time, location, passengers, and luggage. `Partner /confirm` books ride and returns a valid booking ID, with all necessary data. `Partner /cancel` cancels rides and returns valid status response (including policy-driven cases). `Partner GET /ride-status` fetches booking updates in real time with correct statuses. 4. Additional Services Validation Partner has enabled and tested support for Child Seat types (if enabled in their integration scope). Meet & Greet option is configurable and behaves as expected. Luggage options (standard/extra) are correctly submitted and affect pricing if applicable. 5. Vehicle & City Coverage Coverage tested with `GET /coverage` and cities validated for partner's use case. All internal vehicle categories mapped to Elife’s vehicle codes and names. Graceful fallback or notification exists for unsupported vehicles or locations. 6. Pricing, Booking Fee & Commission Booking fee retrieved from quote response and displayed correctly to users for train rides. Price breakdown includes base fare, taxes, fees, and surcharges. Currency code (e.g., INR, USD) shown properly with formatting rules applied. 7. Webhooks & Notifications Webhook URL registered with Elife if real-time notifications are used. Webhooks tested for all events: Booking confirmed, Driver assigned, Ride started, Ride completed, Cancellation. Partner systems acknowledge and log incoming webhooks. Duplicate or retry webhook deliveries handled via idempotency logic. 8. Date/Time Formatting & Timezones All time values sent/received in ISO 8601 format (e.g., `2025-08-01T14:30:00Z`). Partner handles pickup/dropoff in user’s local timezone. Internal systems convert time correctly for UI and processing flows. 9. Error Handling & Stability Partner handles all Elife API response codes (2xx, 4xx, 5xx). 400-499 errors provide user-friendly responses (e.g., invalid location, unavailable vehicle). Retry logic in place for temporary issues (e.g., 429 rate limit, 500 server error). Detailed error logs captured and accessible by developer or support teams. 10. Logging & Monitoring Partner logs all API requests/responses with status, timestamps, and transaction IDs. API keys, tokens, and sensitive user information are excluded from logs. Alerts or monitoring dashboards are set up to detect failure spikes or anomalies. 11. Documentation & Developer Support Partner has fully reviewed [Theneo API Docs](https://app.theneo.io/elifetransfer/elife-partner-api-multi-modal/about-elife-apis). Internal documentation prepared for tech team reference and troubleshooting. Escalation contacts and Elife support team details are stored securely. 12. UAT Sign-off All critical use cases tested and verified in sandbox: Quote, Book, Cancel, Status. Edge cases tested: unsupported areas, invalid inputs, cancellation deadlines. QA team or stakeholder has approved readiness for production. 13. Final Go-Live Validation Production keys configured in secure environment. Smoke test run in production for real bookings. Live monitoring confirmed with alerts active. Final handover or launch confirmation shared with Elife support Questions? For any certification or integration-related inquiries, contact: