PrivateEvent
API v1 · stable

Documentation développeurs

Recevez et répondez aux demandes de privatisation directement depuis votre CRM via notre API REST authentifiée par token. Un seul token suffit pour piloter tous vos lieux.

URL de base

Toutes les requêtes utilisent HTTPS et acceptent / retournent du JSON.

https://privateevent.mesprojets.org/api/v1

Authentification

L'API utilise des tokens Bearer personnels (Laravel Sanctum). Chaque token est rattaché à votre compte propriétaire et donne accès à l'ensemble des lieux que vous gérez — vous n'avez pas besoin de générer un token par lieu.

🔑 Génération de token — self-service
  1. Connectez-vous à votre espace lieu
  2. Menu Tokens APICréer un token
  3. Nommez le token (ex: "CRM production"), optionnellement définissez une date d'expiration
  4. Copiez le token affiché — il ne sera plus jamais visible ensuite

Vous pouvez générer plusieurs tokens (un par intégration) et les révoquer indépendamment depuis la même interface.

Utilisation

Ajoutez le header Authorization: Bearer <token> à chaque requête.

Exemple — vérifier votre identité et lister vos lieux

# Request curl -H "Authorization: Bearer YOUR_TOKEN" \ -H "Accept: application/json" \ https://privateevent.mesprojets.org/api/v1/me # Response 200 OK { "user": { "id": 2, "name": "Marc Dupont", "email": "marc@hotel-tour-eiffel.test", "role": "venue_owner" }, "venues": [ {"id": 1, "name": "Le Belvédère", "slug": "le-belvedere-...", "status": "active"}, {"id": 7, "name": "Loft Marais", "slug": "loft-marais-...", "status": "active"}, {"id": 12, "name": "Rooftop Lyon", "slug": "rooftop-lyon-...", "status": "pending"} ] }

Plusieurs lieux, un seul token

Si votre compte gère plusieurs lieux, un unique token API couvre la totalité de votre portefeuille. L'endpoint GET /api/v1/me retourne la liste complète des lieux accessibles via le token courant dans le tableau venues[].

Comment savoir à quel lieu correspond une demande ?

Chaque sollicitation retournée par /api/v1/solicitations et /api/v1/solicitations/{id} embarque un objet venue (id, nom, ville, capacités). Filtrez ou routez les demandes côté CRM selon venue.id.

Exemple — récupérer toutes les demandes de tous vos lieux

# Un seul appel pour l'ensemble du portefeuille curl -H "Authorization: Bearer YOUR_TOKEN" \ -H "Accept: application/json" \ "https://privateevent.mesprojets.org/api/v1/solicitations?status=sent" # Côté CRM : grouper par venue.id pour router vers la bonne équipe
Bonne pratique : créez un token distinct par intégration (CRM, BI, automation) plutôt que de partager un token unique entre plusieurs systèmes. Cela vous permet de révoquer indépendamment l'accès d'un outil sans impacter les autres.

Endpoints

Tous les endpoints sont scopés à vos lieux : vous ne voyez que les demandes envoyées à un lieu dont vous êtes propriétaire.

GET /api/v1/solicitations

Lister les demandes reçues

Retourne une liste paginée des sollicitations envoyées à vos lieux. Triées par sent_at décroissant.

Query parameters

ParamTypeDescription
statusstringFiltre : sent · viewed · replied · declined
pageintNuméro de page (50 résultats par page)

Exemple

curl -H "Authorization: Bearer YOUR_TOKEN" \ -H "Accept: application/json" \ "https://privateevent.mesprojets.org/api/v1/solicitations?status=sent"
GET /api/v1/solicitations/{id}

Détail d'une demande

Récupère toutes les infos d'une demande : événement, contact, entreprise, proposition envoyée (s'il y en a). Marque automatiquement la demande comme « vue » au premier appel.

Exemple de réponse

{ "data": { "id": 4, "status": "viewed", "sent_at": "2026-05-11T10:46:09+00:00", "viewed_at": "2026-05-11T10:55:22+00:00", "venue": { "id": 1, "name": "Le Belvédère", "city": "Paris", "capacity_min": 10, "capacity_max": 60 }, "booking_request": { "id": 2, "event_date": "2026-06-10", "start_time": "19:00", "end_time": "23:00", "persons": 50, "budget": {"type": "per_person", "amount": 75, "currency": "EUR"}, "event_types": ["cocktail"], "message": "...", "company": {"name": "TestCorp SAS", "siret": null}, "contact": {"name": "Pierre Test", "email": "...", "phone": "..."} }, "proposal": null, "urls": { "self": "https://privateevent.mesprojets.org/api/v1/solicitations/4", "create_proposal": "https://privateevent.mesprojets.org/api/v1/solicitations/4/proposal", "decline": "https://privateevent.mesprojets.org/api/v1/solicitations/4/decline" } } }
POST /api/v1/solicitations/{id}/proposal

Envoyer un devis

Crée une proposition pour une demande. Le client est automatiquement notifié par email avec un lien magique vers son espace.

Body parameters

FieldTypeRequisDescription
messagestringouiCorps du devis (3 à 5000 caractères)
total_priceintegernonMontant total en euros (entier)
attachments[]file[]nonJusqu'à 5 PDF, 10 MB par fichier (multipart/form-data)

Exemple JSON simple

curl -X POST \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d '{"message":"Nous pouvons accueillir votre événement, voici notre proposition.","total_price":3325}' \ https://privateevent.mesprojets.org/api/v1/solicitations/4/proposal # Response 201 Created {"data":{"id":2,"message":"...","total_price":3325,"source":"api","created_at":"..."}}

Exemple avec PDF

curl -X POST \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Accept: application/json" \ -F "message=Devis détaillé en pièce jointe." \ -F "total_price=4500" \ -F "attachments[]=@devis.pdf" \ https://privateevent.mesprojets.org/api/v1/solicitations/4/proposal

Codes d'erreur spécifiques

  • 403 — Cette sollicitation n'est pas accessible avec votre token
  • 409 — Une proposition existe déjà OU la demande a été déclinée
  • 422 — Erreur de validation (message trop court, etc.)
POST /api/v1/solicitations/{id}/decline

Décliner une demande

Marque la demande comme déclinée. Aucun body requis.

curl -X POST \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Accept: application/json" \ https://privateevent.mesprojets.org/api/v1/solicitations/4/decline

Rate limits & bonnes pratiques

  • 60 requêtes par minute et par token. Au-delà : réponse 429 Too Many Requests.
  • Polling raisonnable : interrogez /api/v1/solicitations?status=sent toutes les 1 à 5 minutes pour récupérer les nouvelles demandes.
  • Un token pour tous vos lieux : pas besoin de multiplier les appels par lieu — un seul /api/v1/solicitations retourne les demandes de tous vos lieux.
  • Pas de batch endpoint pour l'instant : une proposition par appel.
  • Idempotence : un même solicitation_id ne peut recevoir qu'une seule proposition. Retentez si vous obtenez 409.

Support

Question d'intégration ou bug API ?

infos@mesprojets.org
Réponse sous 24h ouvré.