TravelTime Python SDK

The TravelTime Python SDK provides a simple and efficient way to access the TravelTime API, enabling you to calculate travel times and distances, generate isochrones, and perform location-based queries using real-world transportation data.
Features
- Time Matrix & Filtering: Calculate travel times between multiple origins and destinations
- Isochrone Generation: Create time-based catchment areas in multiple formats (GeoJSON, WKT)
- Route Planning: Get detailed turn-by-turn directions between locations
- Geocoding: Convert addresses to coordinates and vice versa
- Specialized Analysis: UK postcode analysis, H3 hexagon analysis, and geohash analysis
- Transportation Modes: Support for driving, public transport, walking, cycling, and multimodal transport
- Async Support: Both synchronous and asynchronous clients available
- Performance Options: Fast endpoints for high-volume use cases
Requirements
To check your Python version:
python --version
Installation
Install the TravelTime Python SDK using pip:
pip install traveltimepy
Optional Dependencies
For protocol buffer (protobuf) support (required for TimeFilterFastProto endpoints):
pip install 'traveltimepy[proto]'
Getting Started
Authentication
Get your API credentials from the TravelTime Developer Portal.
Basic Usage
from datetime import datetime
from traveltimepy import Client
from traveltimepy.requests.common import Location, Coordinates, Property
from traveltimepy.requests.time_filter import TimeFilterDepartureSearch
from traveltimepy.requests.transportation import PublicTransport
from traveltimepy.errors import TravelTimeApiError
locations = [
Location(id="London center", coords=Coordinates(lat=51.508930, lng=-0.131387)),
Location(id="Hyde Park", coords=Coordinates(lat=51.508824, lng=-0.167093)),
Location(id="ZSL London Zoo", coords=Coordinates(lat=51.536067, lng=-0.153596))
]
client = Client(app_id="YOUR_APP_ID", api_key="YOUR_API_KEY")
try:
response = client.time_filter(
locations=locations,
departure_searches=[
TimeFilterDepartureSearch(
id="London center",
departure_location_id="London center",
arrival_location_ids=["Hyde Park", "ZSL London Zoo"],
departure_time=datetime.now(),
transportation=PublicTransport(),
travel_time=1800,
properties=[Property.TRAVEL_TIME]
)
],
arrival_searches=[]
)
print(f"Found {len(response.results)} results")
for result in response.results:
print(f"Search ID: {result.search_id}")
except TravelTimeApiError as e:
print(e)
finally:
client.close()
with Client(app_id="YOUR_APP_ID", api_key="YOUR_API_KEY") as client:
try:
response = client.time_filter(
locations=locations,
departure_searches=[
TimeFilterDepartureSearch(
id="London center",
departure_location_id="London center",
arrival_location_ids=["Hyde Park", "ZSL London Zoo"],
departure_time=datetime.now(),
transportation=PublicTransport(),
travel_time=1800,
properties=[Property.TRAVEL_TIME]
)
],
arrival_searches=[]
)
print(f"Found {len(response.results)} results")
for result in response.results:
print(f"Search ID: {result.search_id}")
except TravelTimeApiError as e:
print(e)
Async Usage
import asyncio
from datetime import datetime
from traveltimepy import AsyncClient
from traveltimepy.requests.common import Location, Coordinates
from traveltimepy.requests.time_filter import TimeFilterDepartureSearch
from traveltimepy.requests.transportation import PublicTransport
from traveltimepy.errors import TravelTimeApiError
locations = [
Location(id="London center", coords=Coordinates(lat=51.508930, lng=-0.131387)),
Location(id="Hyde Park", coords=Coordinates(lat=51.508824, lng=-0.167093)),
Location(id="ZSL London Zoo", coords=Coordinates(lat=51.536067, lng=-0.153596))
]
async def main():
client = AsyncClient(app_id="YOUR_APP_ID", api_key="YOUR_API_KEY")
try:
response = await client.time_filter(
locations=locations,
departure_searches=[
TimeFilterDepartureSearch(
id="London center",
departure_location_id="London center",
arrival_location_ids=["Hyde Park", "ZSL London Zoo"],
departure_time=datetime.now(),
transportation=PublicTransport(),
travel_time=1800
)
],
arrival_searches=[]
)
print(f"Found {len(response.results)} results")
for result in response.results:
print(f"Search ID: {result.search_id}")
except TravelTimeApiError as e:
print(e)
finally:
await client.close()
async def main_with_context():
async with AsyncClient(app_id="YOUR_APP_ID", api_key="YOUR_API_KEY") as client:
try:
response = await client.time_filter(
locations=locations,
departure_searches=[
TimeFilterDepartureSearch(
id="London center",
departure_location_id="London center",
arrival_location_ids=["Hyde Park", "ZSL London Zoo"],
departure_time=datetime.now(),
transportation=PublicTransport(),
travel_time=1800
)
],
arrival_searches=[]
)
print(f"Found {len(response.results)} results")
for result in response.results:
print(f"Search ID: {result.search_id}")
except TravelTimeApiError as e:
print(e)
asyncio.run(main())
asyncio.run(main_with_context())
Core Methods
The SDK provides both synchronous (Client
) and asynchronous (AsyncClient
) versions of all methods:
Time Matrix & Filtering
Isochrone Generation
Route Planning
routes()
- Calculate detailed routes between locations
Geocoding
Specialized Analysis
Utility Methods
Configuration
The SDK supports various configuration options:
from traveltimepy import Client, AsyncClient
client = Client(
app_id="YOUR_APP_ID",
api_key="YOUR_API_KEY",
timeout=300,
retry_attempts=3,
max_rpm=60,
)
async_client = AsyncClient(
app_id="YOUR_APP_ID",
api_key="YOUR_API_KEY",
timeout=300,
retry_attempts=3,
max_rpm=60
)
Error Handling and Retries
The SDK automatically handles both rate limiting and server error retries:
- Rate limiting: Automatically handled with exponential backoff
- Server errors (5xx): Automatically retried up to 3 times with immediate retry
- Client errors (4xx): Not retried (indicates invalid request)
client = Client(app_id="YOUR_APP_ID", api_key="YOUR_API_KEY")
response = client.time_filter(
locations=locations,
departure_searches=searches
)
Configuring Retries
You can configure the number of retry attempts:
client = Client(
app_id="YOUR_APP_ID",
api_key="YOUR_API_KEY",
retry_attempts=5
)
client = Client(
app_id="YOUR_APP_ID",
api_key="YOUR_API_KEY",
retry_attempts=0
)
Examples
The examples/
directory contains practical examples.
See examples/README.md for setup instructions and detailed descriptions.
Performance Tips
- Use
*_fast()
methods for high-volume use cases
- Use
time_filter_proto()
for maximum performance with large datasets (install with pip install 'traveltimepy[proto]'
)
- Use async methods for I/O-bound applications
Documentation
For comprehensive documentation, including detailed parameter references and advanced usage examples, visit:
Support
If you have questions or need help:
License
This project is licensed under the MIT License - see the LICENSE file for details.