# 🤖 Adopt AI Grand Palais 2025 - API
> An AI-friendly REST API for the Adopt AI Grand Palais conference schedule
[](https://aws.amazon.com/lambda/)
[](https://www.python.org/)
[](https://opensource.org/licenses/MIT)
## 🎯 Why?
The official [Adopt AI Grand Palais](https://adoptai.artefact.com) website uses infinite-scroll JavaScript rendering that's impossible for AI assistants to parse.
This API provides **clean, structured, filterable endpoints** so AI assistants like Claude and ChatGPT can actually help attendees navigate the conference.
**The irony**: An AI summit without AI-readable data. This fixes that.
## 🚀 Quick Start
### For AI Assistants
Just tell Claude/ChatGPT:
```
"Fetch https://adoptai.codecrafter.fr and help me find sessions
about AI in banking on November 25"
```
The API is designed to be self-documenting. AI assistants can read the `/llms.txt` endpoint for full instructions.
**Fallback Strategy**: If an AI assistant cannot access the API directly (common limitation when URLs aren't user-provided), it can ask you to copy/paste the complete JSON from:
- https://adoptai.codecrafter.fr/sessions (all 240+ sessions)
- https://adoptai.codecrafter.fr/speakers (all 200+ speakers)
The assistant will then process the data locally to answer your questions. The full dataset is small enough (~500KB) to be easily shared this way.
### For Developers
```bash
# What's happening right now?
curl https://adoptai.codecrafter.fr/now
# Get all sessions
curl https://adoptai.codecrafter.fr/sessions
# Filter by date and stage
curl "https://adoptai.codecrafter.fr/sessions?date=2025-11-25&stage=CEO%20Stage"
# Search sessions
curl "https://adoptai.codecrafter.fr/sessions?search=banking"
# Get speakers
curl https://adoptai.codecrafter.fr/speakers
```
## 🤖 AI Assistant Usage Patterns
This API supports two data access methods for AI assistants:
### Method 1: Direct API Access (Preferred)
When an AI assistant can make HTTP requests (URL provided by user or found via web search):
```
User: "What's happening right now at Adopt AI?"
AI: *Fetches https://adoptai.codecrafter.fr/now*
AI: "Currently there are 3 sessions ongoing and 5 starting soon..."
User: "Find AI banking sessions at Adopt AI"
AI: *Fetches https://adoptai.codecrafter.fr/sessions?search=banking*
AI: "I found 5 sessions about AI in banking..."
```
### Method 2: User-Provided Data (Fallback)
When an AI assistant cannot access external URLs independently:
```
User: "Find AI banking sessions at Adopt AI"
AI: "I don't have direct access to the API. Please copy/paste the JSON from:
https://adoptai.codecrafter.fr/sessions"
User: *Copies and pastes JSON data*
AI: *Processes data locally and filters for "banking"*
AI: "I found 5 sessions about AI in banking..."
```
**Why this dual approach works:**
- ✅ **Small dataset**: Full data is only ~500KB (240 sessions + 200 speakers)
- ✅ **Single request**: No pagination needed - entire dataset in one call
- ✅ **Client-side processing**: AI can filter, search, and analyze locally
- ✅ **Always helpful**: Users get assistance regardless of API access limitations
This design ensures **maximum accessibility** for all AI assistants, even those with URL access restrictions.
## 📚 API Documentation
### Endpoints
| Endpoint | Description | Filters | Cache |
|----------|-------------|---------|-------|
| `GET /sessions` | All conference sessions | `date`, `stage`, `time`, `search` | 1h |
| `GET /now` | Sessions happening now or starting soon | - | None (real-time) |
| `GET /speakers` | All speakers | `search` | 1h |
| `GET /` | API documentation | - | 1h |
| `GET /health` | Health check | - | None (real-time) |
### Query Parameters
#### `/sessions`
- **`date`**: `2025-11-25` or `2025-11-26`
- **`stage`**: `CEO Stage`, `Mainstage South`, `Mainstage North`, `Mainstage East`, `Masterclass South`, `Masterclass North`, `Startup Stage`
- **`time`**: `morning` (before 12:00) or `afternoon` (12:00+)
- **`search`**: Full-text search in titles, descriptions, speaker names
#### `/speakers`
- **`search`**: Search by name, company, or role
### Examples
```bash
# What's happening right now?
curl "https://adoptai.codecrafter.fr/now"
# Nobel Prize keynote
curl "https://adoptai.codecrafter.fr/sessions?search=Aghion"
# All morning sessions on Nov 25
curl "https://adoptai.codecrafter.fr/sessions?date=2025-11-25&time=morning"
# Finance-related sessions
curl "https://adoptai.codecrafter.fr/sessions?search=finance"
# Speakers from Anthropic
curl "https://adoptai.codecrafter.fr/speakers?search=Anthropic"
```
## 🏗️ Architecture
```
┌─────────────┐
│ Client │
│ (AI/Human) │
└──────┬──────┘
│
▼
┌─────────────────┐
│ CloudFront │
│ + Custom │
│ Domain │
└──────┬──────────┘
│
▼
┌─────────────────┐
│ Lambda │
│ Function URL │
│ (Python 3.14) │
└──────┬──────────┘
│
▼
┌─────────────────┐
│ S3 Bucket │
│ sessions.json │
│ speakers.json │
└─────────────────┘
```
**Tech Stack:**
- **AWS Lambda** (Python 3.14) - Serverless compute
- **S3** - Data storage
- **Lambda Function URL** - Direct HTTPS endpoint (no API Gateway)
- **CloudFront** - CDN + custom domain + 1h caching
## ⚡ CloudFront Caching
**Cache Strategy:**
- **Cached (1 hour)**: `/sessions`, `/speakers`, `/`, `/llms.txt`, `/robots.txt`
- 90% reduction in Lambda invocations for repeated queries
- 5-10x faster response times (10-50ms vs 100-500ms)
- Cache keys include query parameters: `date`, `stage`, `time`, `search`
- **Real-time (no cache)**: `/now`, `/health`
- Always hits Lambda for fresh data
- Current sessions and health status
**Why 1 hour TTL?**
- Data is static (scraped Nov 19, 2025)
- Conference is only 2 days (Nov 25-26)
- Balances performance with flexibility
**Cache Invalidation:**
If you update data in S3, invalidate CloudFront cache:
```bash
aws cloudfront create-invalidation \
--distribution-id <DISTRIBUTION_ID> \
--paths "/sessions*" "/speakers*" "/" "/llms.txt"
```
## 📊 Data
- **240+ sessions** across 8 stages
- **200+ speakers** from leading AI companies
- **2 days**: November 25-26, 2025
- **Venue**: Grand Palais, Paris
### Notable Speakers
- **Philippe Aghion** - 2025 Nobel Prize in Economics
- **Guillaume Princen** - Anthropic Head of EMEA
- **Dr. Najwa Aaraj** - Technology Innovation Institute CEO
- And many more...
## 💰 Cost
Essentially **free** with AWS Free Tier:
- Lambda: 1M requests/month free
- S3: Negligible storage + GET costs
- CloudFront: 1TB transfer/month free
Estimated cost beyond free tier: **~$0.10/month** for typical usage.
## 🚀 Deployment
### Prerequisites
- AWS account
- AWS CLI configured
- Python 3.14
- Domain configured (codecrafter.fr)
### Deploy
```bash
# Clone the repo
git clone https://github.com/ThomasHoussin/adoptai-api.git
cd adoptai-api
# Run deployment script
./deploy.sh
# Configure custom domain (CloudFront)
# See DEPLOYMENT.md for details
```
## 🤝 Contributing
Found incorrect data? Session changed? Open an issue or PR!
```bash
# Update sessions data
vi data/sessions.json
# Redeploy
./deploy.sh
```
## 📝 License
MIT License - feel free to use this for other conferences!
## 👨💻 Author
**Thomas Houssin**
- GitHub: [@ThomasHoussin](https://github.com/ThomasHoussin)
- Website: [codecrafter.fr](https://codecrafter.fr)
Because AI events should be AI-accessible.
## 🙏 Acknowledgments
- Data scraped from [Adopt AI Grand Palais](https://adoptai.artefact.com)
- Inspired by the llms.txt convention
- Built with the best serverless tools AWS offers
---
**"Adopt AI... but make it actually adoptable by AI"** 🤖
Built with ❤️ and irony: an AI summit without AI-readable data.