FlixBus api for ticket booking
FlixBus provides an API that allows developers to integrate services like bus search, seat availability, booking, and more. The API is typically accessible only through a partnership or affiliate program, meaning you'll need to contact FlixBus directly to request access to their API.
### Steps to Access and Use the FlixBus Booking API:
#### 1. **Request API Access**:
- Visit the [FlixBus Partner Portal](https://global.flixbus.com/company/partners/affiliates) to apply for access.
- Once approved, you'll receive the necessary API credentials (API key, Client ID, and Secret).
#### 2. **FlixBus API Features**:
The FlixBus API typically provides the following endpoints:
- **Search Buses**: Search for buses between two locations.
- **Seat Availability**: Check seat availability on a specific bus.
- **Block Seats**: Reserve seats temporarily before confirming.
- **Booking**: Confirm and finalize the booking.
#### 3. **Example Workflow**:
Here’s an outline of the workflow for integrating FlixBus seat booking using their API.
### Sample Python Code for FlixBus Booking (assuming API access):
#### 1. **Search for Available Buses**:
This endpoint allows you to search for buses between two cities on a specific date.
```python
import requests
# Replace with your actual API key and other credentials
api_key = "your_api_key_here"
# URL for bus search
search_url = "https://api.flixbus.com/v1/search"
# Parameters for the search
params = {
"origin_id": "128", # Origin city ID (e.g., for Berlin)
"destination_id": "23", # Destination city ID (e.g., for Munich)
"departure_date": "2024-09-20", # Date of travel
}
# Headers for authentication
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
# Make the request
response = requests.get(search_url, headers=headers, params=params)
# Check if the request is successful
if response.status_code == 200:
bus_data = response.json()
# List available buses
for bus in bus_data['results']:
print(f"Bus ID: {bus['id']}, Departure: {bus['departure']}, Arrival: {bus['arrival']}")
else:
print(f"Error: {response.status_code}")
```
#### 2. **Check Seat Availability**:
Once you have the bus ID, you can check for seat availability.
```python
# URL for seat availability check
seat_url = f"https://api.flixbus.com/v1/seats/{bus_id}"
# bus_id obtained from the search result
bus_id = "some_bus_id_here"
# Send the request for seat availability
response = requests.get(seat_url, headers=headers)
# Check if the request is successful
if response.status_code == 200:
seat_data = response.json()
# Print available seats
print(f"Available Seats: {seat_data['available_seats']}")
else:
print(f"Error: {response.status_code}")
```
#### 3. **Block Seats**:
This is to temporarily reserve the seats for a customer before confirming the booking.
```python
# URL for blocking seats
block_seats_url = "https://api.flixbus.com/v1/blockSeats"
# Payload for blocking seats
payload = {
"bus_id": bus_id, # Bus ID from search result
"seats": ["A1", "A2"], # Seats to block
"contact_info": {
"name": "John Doe",
"email": "john@example.com",
"phone": "9876543210"
}
}
# Send POST request to block seats
response = requests.post(block_seats_url, headers=headers, json=payload)
# Check if the request is successful
if response.status_code == 200:
block_response = response.json()
block_id = block_response['block_id']
print(f"Seats Blocked, Block ID: {block_id}")
else:
print(f"Error: {response.status_code}")
```
#### 4. **Confirm Booking**:
Once the seats are blocked, you can finalize the booking.
```python
# URL for confirming booking
confirm_booking_url = "https://api.flixbus.com/v1/book"
# Payload to confirm the booking
payload = {
"block_id": block_id, # Block ID from the blockSeats response
"payment_info": {
"payment_method": "credit_card", # Payment method
"payment_status": "Success" # Payment confirmation status
}
}
# Send POST request to confirm the booking
response = requests.post(confirm_booking_url, headers=headers, json=payload)
# Check if the request is successful
if response.status_code == 200:
booking_response = response.json()
print(f"Booking Successful: {booking_response['ticket_number']}")
else:
print(f"Error: {response.status_code}")
```
### Key Considerations:
- **Authentication**: You need to use your API Key to authenticate each request.
- **Rate Limits**: Ensure that you comply with the API rate limits, as specified by FlixBus.
- **Payment Integration**: For booking, you will need to integrate a payment gateway (e.g., credit card, PayPal, etc.).
No Comments have been Posted.