API v2 — Events (schema.org/Event) & Addresses (schema.org/PostalAddress)
Cette page documente la nouvelle API v2 sémantique. Elle remplace l’ancienne API héritée. Les exemples ci‑dessous utilisent les noms de propriétés de schema.org.
Aperçu
- Base path (tenant):
/api/v2/ - Authentification: en-tête
Authorization: Api-Key <votre_clé> - Format de réponse: JSON (schema.org‑like, proche JSON‑LD)
- Tests:
poetry run pytest -q tests/pytest
Ressource Event — schema.org/Event
Endpoints
GET /api/v2/events/— liste des évènements publiés- Retour non paginé:
{ "results": [Event, ...] }
- Retour non paginé:
GET /api/v2/events/<uuid>/— détail d’un évènementDELETE /api/v2/events/<uuid>/— suppression d’un évènementPOST /api/v2/events/<uuid>/link-address/— lier une adresse postale- Corps:
{ "postalAddressId": <int> }ou un objetPostalAddress(voir plus bas)
- Corps:
Champs principaux (schema.org)
- Requis à la création:
name,startDate - Recommandés/optionnels:
endDate,maximumAttendeeCapacity,disambiguatingDescription,description,eventStatus,audience,keywords,url,sameAs,offers,additionalProperty - Catégorie sémantique:
@type(sous‑type schema.org, ex:MusicEvent) – mappé vers la catégorie interneadditionalType(libellé humain, ex:Concert,Festival,Volunteering) – mappé vers la catégorie interne- Règle: si la catégorie résolue est ACTION (Volunteering), alors
superEventest obligatoire (UUID de l’évènement parent).
Exemple — création minimale
POST /api/v2/events/
Authorization: Api-Key <clé>
Content-Type: application/json
{
"@context": "https://schema.org",
"@type": "Event",
"name": "API v2 — Test create",
"startDate": "2025-12-20T19:00:00Z"
}
Réponse (201):
{
"@context": "https://schema.org",
"@type": "Event",
"identifier": "<uuid>",
"name": "API v2 — Test create",
"startDate": "2025-12-20T19:00:00Z",
"eventStatus": "https://schema.org/EventScheduled"
}
Exemple — création étendue (capacité, statut, tags, règles d’offre, etc.)
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Concert",
"startDate": "2025-12-20T19:00:00Z",
"maximumAttendeeCapacity": 250,
"disambiguatingDescription": "Soirée funk",
"description": "Une soirée funk mémorable",
"eventStatus": "https://schema.org/EventScheduled",
"audience": {"@type":"Audience","audienceType":"private"},
"keywords": ["Funk","Live"],
"sameAs": "https://example.org/external-event",
"offers": {
"eligibleQuantity": {"maxValue": 4},
"returnPolicy": {"merchantReturnDays": 7}
},
"additionalProperty": [
{"@type":"PropertyValue","name":"optionsRadio","value":["Salle"]},
{"@type":"PropertyValue","name":"customConfirmationMessage","value":"Merci pour votre réservation !"}
]
}
Lister (GET /events/)
GET /api/v2/events/
Authorization: Api-Key <clé>
Réponse (200):
{
"results": [
{
"@context": "https://schema.org",
"@type": "Event",
"identifier": "<uuid>",
"name": "Concert",
"startDate": "2025-12-20T19:00:00Z",
"maximumAttendeeCapacity": 250,
"eventStatus": "https://schema.org/EventScheduled",
"keywords": ["Funk","Live"],
"offers": {
"@type": "Offer",
"eligibleQuantity": {"@type":"QuantitativeValue","maxValue": 4},
"returnPolicy": {"@type":"MerchantReturnPolicy","merchantReturnDays": 7}
}
}
]
}
Détail (GET /events/uuid/)
GET /api/v2/events/<uuid>/
Authorization: Api-Key <clé>
Réponse (200):
{
"@context": "https://schema.org",
"@type": "Event",
"identifier": "<uuid>",
"name": "Concert",
"startDate": "2025-12-20T19:00:00Z",
"location": {
"@type": "Place",
"address": {"@type":"PostalAddress", "streetAddress": "7 S. Broadway", "addressLocality": "Denver", "postalCode": "80209", "addressCountry": "US"}
}
}
Supprimer (DELETE /events/uuid/)
DELETE /api/v2/events/<uuid>/
Authorization: Api-Key <clé>
Réponse: 204 No Content
Lier une adresse (POST /events/event_uuid/link-address/)
Deux possibilités:
- Lier une adresse existante par id
{ "postalAddressId": 123 }
- Créer & lier en une fois avec un objet PostalAddress
{
"@type": "PostalAddress",
"streetAddress": "42 Avenue des Tests",
"addressLocality": "DevCity",
"addressRegion": "DC",
"postalCode": "42424",
"addressCountry": "FR",
"geo": {"latitude": 48.8566, "longitude": 2.3522}
}
Réponse (200): l’Event mis à jour avec location.address.
Ressource PostalAddress — schema.org/PostalAddress
Endpoints
GET /api/v2/postal-addresses/— lister (retour{ "results": [...] })GET /api/v2/postal-addresses/{id}/— détail par id (interne)POST /api/v2/postal-addresses/— créer une adresseDELETE /api/v2/postal-addresses/{id}/— supprimer une adresse
Exemple — création
POST /api/v2/postal-addresses/
Authorization: Api-Key <clé>
Content-Type: application/json
{
"@type": "PostalAddress",
"name": "Test Address",
"streetAddress": "123 Rue de Test",
"addressLocality": "Testville",
"addressRegion": "TV",
"postalCode": "99999",
"addressCountry": "FR",
"geo": {"latitude": 43.7, "longitude": 7.25}
}
Réponse (201):
{
"@type": "PostalAddress",
"streetAddress": "123 Rue de Test",
"addressLocality": "Testville",
"addressRegion": "TV",
"postalCode": "99999",
"addressCountry": "FR",
"geo": {"@type":"GeoCoordinates","latitude": 43.7, "longitude": 7.25}
}
Liste (GET /postal-addresses/)
GET /api/v2/postal-addresses/
Authorization: Api-Key <clé>
Réponse (200):
{ "results": [ {"@type":"PostalAddress","streetAddress":"123 Rue de Test", "addressLocality":"Testville"} ] }
Notes d’implémentation & mapping
maximumAttendeeCapacity↔︎ capacité (jauge)offers.eligibleQuantity.maxValue↔︎max_per_userdisambiguatingDescription↔︎short_descriptiondescription↔︎long_descriptionsameAs/url↔︎full_url(sisameAsprésent ⇒ évènement « externe »)eventStatus:EventScheduledsi publié,EventCancelledsinonaudience:{audienceType:"private"}si évènement privékeywords↔︎ tags (créés si absents)additionalProperty:optionsRadio/optionsCheckbox(listes de noms d’options)customConfirmationMessage
Tests (Poetry)
- Installer:
poetry install - Lancer:
poetry run pytest -q tests/pytest - L’ordre des tests Event est forcé: create → list → retrieve → link → delete.
attention
La documentation est en cours de rédaction.
N'hésitez pas à venir discuter avec nous sur Discord pour avoir plus d'informations !