Beach Day API — Python Client
Python client for the Beach Day API — water quality, weather, tides, ocean conditions, beach rules, amenities, and composite scoring in a single call. Covers 36,000+ beaches across 110 countries including the US, UK, Spain, Italy, France, Croatia, Greece, Malta, Cyprus, Turkey, Portugal, Japan, Philippines, South Korea, Mexico, Costa Rica, Cuba, Dominican Republic, Puerto Rico, Jamaica, Bahamas, Panama, India, Indonesia, Norway, Sweden, Denmark, Ireland, Iceland, Albania, Montenegro, Malaysia, Sri Lanka, Taiwan, Australia, South Africa, French Polynesia, New Caledonia, Fiji, New Zealand, Cambodia, Thailand, Vietnam, China, Samoa, Tonga, Cook Islands, American Samoa, Tuvalu, Niue, Wallis and Futuna, Tokelau, Brazil, Colombia, Uruguay, Ecuador, Chile, Peru, Barbados, Maldives, all 36 African countries, and more.
pip install beachdayapi
Quick Start
from beachdayapi import BeachDayAPI
client = BeachDayAPI("bda_your_api_key")
# Search beaches by state (supports offset/limit pagination)
beaches = client.beaches.list(state="CA")
# Pagination: client.beaches.list(state="CA", offset=100, limit=50)
# Filter by country: client.beaches.list(country="Cambodia")
for b in beaches["data"]:
print(b["name"], b["state"])
# Search beaches by name
malibu = client.beaches.list(search="Malibu")
print(f"Found {malibu['count']} beaches matching 'Malibu'")
# Get full detail for a beach
beach = client.beaches.get(372)
print(beach["data"]["name"], beach["data"]["beach_day_score"])
# Get current conditions (supports offset/limit)
conditions = client.beaches.conditions(372)
# Pagination: client.beaches.conditions(372, offset=30, limit=15)
print(conditions["data"]["water_quality_grade"])
# Get top-scored beaches (supports offset/limit)
scored = client.beaches.scored(min_score=70, limit=10)
# Pagination: client.beaches.scored(offset=50, limit=25)
for b in scored["data"]:
print(f"{b['name']}: {b['beach_day_score']}")
# Discover available countries
countries = client.beaches.countries()
for c in countries["results"]:
print(f"{c['country']}: {c['beach_count']} beaches")
# Health check (no API key needed)
health = client.health()
print(health)
API Key
Sign up at beachdayapi.com to get your free API key (50 free credits, no credit card). Your key starts with bda_.
You can also set the BEACHDAY_API_KEY environment variable:
import os
from beachdayapi import BeachDayAPI
client = BeachDayAPI(os.environ["BEACHDAY_API_KEY"])
Endpoints
| Method | Endpoint | Cost | Description |
|---|---|---|---|
client.health() |
GET /v1/health |
Free | API health check |
client.beaches.list() |
GET /v1/beaches |
1 credit | Search beaches |
client.beaches.get(id) |
GET /v1/beaches/{id} |
5 credits | Beach detail |
client.beaches.conditions(id) |
GET /v1/beaches/{id}/conditions |
3 credits | Current conditions |
client.beaches.scored() |
GET /v1/beaches/scored |
10 credits | Scored beaches |
client.beaches.countries() |
GET /v1/countries |
1 credit | List countries with counts |
Error Handling
from beachdayapi import (
BeachDayAPI,
AuthenticationError,
InsufficientCreditsError,
NotFoundError,
RateLimitError,
ServerError,
)
client = BeachDayAPI("bda_invalid_key")
try:
client.beaches.list(state="CA")
except AuthenticationError:
print("Check your API key")
except InsufficientCreditsError:
print("Buy more credits at beachdayapi.com/credits/pricing/")
except RateLimitError:
print("Slow down")
Requirements
- Python 3.9+
- Zero dependencies (stdlib only)
License
MIT — see the main Beach Day API repository.
Metadata
Release files for beachdayapi 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| beachdayapi-0.1.5.tar.gz | 5.3 kB | Without provenance | Details for beachdayapi-0.1.5.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| beachdayapi-0.1.5-py3-none-any.whl | Python 3 | none | any | Details for beachdayapi-0.1.5-py3-none-any.whl |
Total release size: 11.2 kB
Release files / beachdayapi-0.1.5.tar.gz
| Download URL | beachdayapi-0.1.5.tar.gz |
|---|---|
| Size | 5.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8a9b584d07d564a8aabbd2793682f3302e19e6ffc0acc24fcd0b1ea9c586905a
|
|
BLAKE2b-256 checksum How to use checksums |
5179288ed47469a73307e552ad33dadde131d465509cefef7084f38764bf18c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Release files / beachdayapi-0.1.5-py3-none-any.whl
| Download URL | beachdayapi-0.1.5-py3-none-any.whl |
|---|---|
| Size | 6.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f86e0016f68c3023e7e6f663d6541708c5865bedda2daec5cbf1437b5099760d
|
|
BLAKE2b-256 checksum How to use checksums |
287d7342033cbdfc3ec4a016bbdb6514fb1e76a42e0f69e1dd2045b8c5e11024
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Security for beachdayapi 0.1.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.