← L'Atelier de la Route du Rhum
L'Atelier de la Route du Rhum — API documentation
A public REST API (JSON) for the catalogue of artisan infused rums, the workshops and the news articles of L'Atelier de la Route du Rhum, an infused-rum workshop and shop in Compiègne, France. Read endpoints need no API key.
Machine-readable spec: /openapi.json (OpenAPI 3.1) · Site overview for agents: /llms.txt · Sitemap: /api/sitemaps/index.xml
Base URL
https://atelier-route-du-rhum.com/api/v1
All responses are JSON (Content-Type: application/json), except the XML sitemaps. Choose the content language with the Accept-Language header (fr default, en, es).
Authentication
Catalogue, workshop, article, contact and gift-card endpoints are public. Account endpoints use a JWT bearer token.
- Call
POST /api/v1/auth/loginwith an email and password. - Read
tokenfrom the response. - Send it on later calls:
Authorization: Bearer <token>.
curl -sS -X POST https://atelier-route-du-rhum.com/api/v1/auth/login \
-H 'Content-Type: application/json' \
-d '{"email":"you@example.com","password":"…"}'
curl -sS https://atelier-route-du-rhum.com/api/v1/users/me \
-H 'Authorization: Bearer <token>'
Administration endpoints exist but are not part of the public API.
Endpoints
| Method & path | operationId | Purpose |
|---|---|---|
GET /api/v1/health | getHealth | Liveness probe. |
GET /api/v1/openapi.json | getOpenApiSpec | This API's OpenAPI document. |
GET /api/v1/products | listProducts | All rums with volumes and prices (EUR, VAT included). |
GET /api/v1/products/slug/{slug} | getProductBySlug | One rum by URL slug. |
GET /api/v1/categories | listCategories | The four collections: spiced, fruity, herbal, mixology. |
GET /api/v1/workshops | listWorkshops | All workshops with price, duration, format. |
GET /api/v1/workshops/decouverte | getDiscoveryWorkshop | The discovery workshop. |
GET /api/v1/workshops/duo | getDuoWorkshop | The two-person workshop. |
GET /api/v1/workshops/conception/{level} | getConceptionWorkshopByLevel | Course level 1–4: Fruits, Spices, Plants, Mixology. |
GET /api/v1/workshops/{id} | getWorkshopById | One workshop by UUID. |
GET /api/v1/articles | listArticles | Published news articles. |
GET /api/v1/articles/slug/{slug} | getArticleBySlug | One article by slug. |
GET /api/v1/public/seo/{page} | getPageSeo | Title and meta description of a page. |
POST /api/v1/contact | sendContactMessage | Send a message to the workshop. |
POST /api/v1/newsletter/subscribe | subscribeToNewsletter | Subscribe an email (with the person's consent). |
POST /api/v1/gift-cards/validate | validateGiftCard | Check a gift-card code and its balance. |
POST /api/v1/auth/register | registerUser | Create a customer account. |
POST /api/v1/auth/login | loginUser | Obtain a JWT. |
GET /api/v1/users/me | getCurrentUser | Profile of the authenticated customer (bearer token). |
Example requests
List the catalogue in English
curl -sS https://atelier-route-du-rhum.com/api/v1/products \
-H 'Accept-Language: en'
Get the level 2 (Spices) workshop
curl -sS https://atelier-route-du-rhum.com/api/v1/workshops/conception/2
Check a gift card
curl -sS -X POST https://atelier-route-du-rhum.com/api/v1/gift-cards/validate \
-H 'Content-Type: application/json' \
-d '{"code":"RHUM-AB12"}'
Errors
Every error response has the same JSON shape, so it can be parsed without guessing:
{
"error": "Route introuvable : GET /api/nope",
"message": "Route introuvable : GET /api/nope",
"code": "NOT_FOUND",
"status": 404,
"hint": "Check the path and identifier. Public routes are listed in /openapi.json.",
"docs": "https://atelier-route-du-rhum.com/docs"
}
| Status | code | Meaning and fix |
|---|---|---|
| 400 | BAD_REQUEST | Invalid body or parameters. Field-level problems are in details. |
| 401 | UNAUTHENTICATED | Missing or invalid bearer token. Log in again. |
| 403 | FORBIDDEN | Not allowed for this account or origin. |
| 404 | NOT_FOUND | Unknown path or resource. |
| 429 | RATE_LIMITED | Too many requests. Wait for Retry-After. |
| 500 | INTERNAL_ERROR | Server error. Retry later or contact us. |
Versioning and deprecation policy
- Version in the URL path. The current version is
v1:/api/v1/…. Paths without a version (/api/…) are an alias of the current version. - Version header. Every API response carries
API-Version: 1. - Backward-compatible changes (new routes, new optional fields) ship in
v1without notice. - Breaking changes ship as a new major version (
/api/v2); the previous version keeps being served during a transition period. - Deprecation signals. A route or field scheduled for removal is announced at least 6 months ahead with the response headers
Deprecation: true,Sunset: <HTTP date>(RFC 8594) andLink: <successor>; rel="successor-version". The same policy is machine-readable in /openapi.json underx-api-versioning.
Rate limits
General API: 120 requests per minute per IP. Login and registration: 10 per 15 minutes. Gift-card validation: 5 per minute. Limits are reported in the standard RateLimit-* response headers.
Content negotiation on the website
Every public page of the website is also available as Markdown: send Accept: text/markdown to the page URL (for example curl -H 'Accept: text/markdown' https://atelier-route-du-rhum.com/). Unknown paths return a real HTTP 404.
Contact
Questions about the API: contact page or 69znabil@gmail.com. L'Atelier de la Route du Rhum, 12 rue des Cordeliers, 60200 Compiègne, France.