API REST & Intégrations · v1 Gérer mes clés d'API dans la console →

Documentation de l'API On est là

Intégrez la création instantanée de vos galeries de mariage avec votre CRM (Fotostudio, Shoot & Sell, Dubsado), vos automatisations Zapier / Make ou vos propres scripts et espaces clients.

💡 Que pouvez-vous automatiser ?

⚡ CRM Photographe (ex: Fotostudio)

Dès qu'un contrat de mariage est signé, votre webhook crée la galerie On est là et injecte automatiquement l'URL de la galerie et des chevalets QR code dans la fiche client.

🔗 Zapier & Make (Integromat)

Vérifiez si un studio existe et créez des galeries à partir d'un formulaire Typeform/Tally, d'une ligne Notion ou d'un e-mail reçu.

🛠️ Scripts & Espaces Clients

Intégrez la galerie live dans votre site WordPress, Squarespace ou votre propre plateforme sur-mesure.

🔑 1. Authentification & Sécurité

Toutes les requêtes vers l'API On est là doivent inclure une clé d'API valide. Vous pouvez générer et révoquer vos clés à tout moment depuis votre console administrateur (menu API & Clés).

Passez votre clé d'API dans l'en-tête HTTP Authorization sous forme de jeton Bearer (recommandé), ou via l'en-tête X-API-Key :

Authorization: Bearer oel_live_9f8d1a3c7b5e204d88e612f901ab34cd56ef78
X-API-Key: oel_live_9f8d1a3c7b5e204d88e612f901ab34cd56ef78

✨ 2. Créer une nouvelle galerie

Crée instantanément une galerie participative complète pour un mariage, avec son slug unique, son URL d'accès invité, son mur interactif projetable et son kit de chevalets imprimables.

POST https://onestla.app/api/v1/events

Paramètres de la requête (JSON ou Form-Data)

Paramètre Type Statut Description & Exemples
couple_names string Requis Prénoms ou nom du couple marié (ex: "Sophie & Thomas").
event_date string Requis Date du mariage au format standard AAAA-MM-JJ (ex: "2026-07-18").
email string Optionnel E-mail du photographe (ex: "contact@monstudiophoto.fr"). Si le compte existe, la galerie lui est rattachée ; sinon, son compte est automatiquement provisionné et créé !
studio_name string Optionnel Nom commercial du studio (ex: "Studio Horizon Photographie"). Utilisé sur la galerie, les invitations et les chevalets QR codes.
venue string Optionnel Lieu ou domaine de la fête (ex: "Château de la Tour, Chantilly").
expected_guests integer Optionnel Nombre estimé d'invités adultes (ex: 120).
moderation_mode string Optionnel "auto" (photos publiées en direct, défaut) ou "review" (validation manuelle préalable).
show_banner boolean Optionnel true (défaut, affiche les encarts et la pastille flottante invité "Tu souhaites être prévenu(e)...") ou false pour masquer entièrement le bandeau et le bloc de collecte d'e-mails.
bg_color string Optionnel Couleur de fond personnalisée de la galerie sous la forme hexadécimale #RRGGBB (ex: "#F3E9DB"). Par défaut : thème sombre (#0E0F11). Si une nuance claire comme #F3E9DB est passée, les cartes, polices et contrastes s'adaptent automatiquement pour une lisibilité optimale.
status string Optionnel "draft" (brouillon pré-mariage, défaut) ou "published".
require_payment boolean Optionnel true pour déclencher immédiatement une session Stripe Checkout à 19,99 € (ou montant personnalisé). La galerie est créée en statut draft et l'API renvoie l'URL de paiement checkout_url. Dès paiement du client, la galerie est automatiquement activée en published. Alias acceptés : trigger_payment, with_payment, checkout, pay.
amount_cents integer Optionnel Montant à facturer en centimes (défaut : 1999 pour 19,99 €). Vous pouvez aussi utiliser price: "19.99".
success_url string Optionnel URL de redirection personnalisée après validation du paiement Stripe (supporte le placeholder {CHECKOUT_SESSION_ID}). Par défaut : redirection directe vers la galerie déverrouillée.
cancel_url string Optionnel URL de retour en cas d'abandon du paiement par le client sur Stripe Checkout.

Exemples de code pour la création (Standard)

curl -X POST https://onestla.app/api/v1/events \
  -H "Authorization: Bearer VOTRE_CLE_API" \
  -H "Content-Type: application/json" \
  -d '{
    "couple_names": "Sophie & Thomas",
    "event_date": "2026-07-18",
    "email": "contact@monstudiophoto.fr",
    "studio_name": "Studio Horizon Photographie",
    "venue": "Château de la Tour, Chantilly",
    "expected_guests": 120,
    "moderation_mode": "auto",
    "bg_color": "#F3E9DB",
    "show_banner": false
  }'
const response = await fetch('https://onestla.app/api/v1/events', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer VOTRE_CLE_API',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    couple_names: 'Sophie & Thomas',
    event_date: '2026-07-18',
    email: 'contact@monstudiophoto.fr',
    studio_name: 'Studio Horizon Photographie',
    venue: 'Château de la Tour, Chantilly',
    expected_guests: 120,
    bg_color: '#F3E9DB'
  })
});

const data = await response.json();
console.log('Galerie créée :', data.event.urls.gallery_url);
<?php
$payload = [
    'couple_names'    => 'Sophie & Thomas',
    'event_date'      => '2026-07-18',
    'email'           => 'contact@monstudiophoto.fr',
    'studio_name'     => 'Studio Horizon Photographie',
    'venue'           => 'Château de la Tour, Chantilly',
    'expected_guests' => 120,
    'bg_color'        => '#F3E9DB',
];

$ch = curl_init('https://onestla.app/api/v1/events');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer VOTRE_CLE_API',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));

$result = curl_exec($ch);
$data   = json_decode($result, true);
curl_close($ch);

echo "URL Galerie : " . $data['event']['urls']['gallery_url'];
import requests

url = "https://onestla.app/api/v1/events"
headers = {
    "Authorization": "Bearer VOTRE_CLE_API",
    "Content-Type": "application/json"
}
payload = {
    "couple_names": "Sophie & Thomas",
    "event_date": "2026-07-18",
    "email": "contact@monstudiophoto.fr",
    "studio_name": "Studio Horizon Photographie",
    "venue": "Château de la Tour, Chantilly",
    "expected_guests": 120,
    "bg_color": "#F3E9DB"
}

r = requests.post(url, json=payload, headers=headers)
data = r.json()
print("URL Galerie :", data["event"]["urls"]["gallery_url"])
Dans Zapier (Webhooks by Zapier) ou Make (HTTP module) :
- Méthode : POST
- URL : https://onestla.app/api/v1/events
- Headers :
    Authorization : Bearer VOTRE_CLE_API
    Content-Type  : application/json
- Body (JSON) :
    {
      "couple_names": "{{1.nom_des_maries}}",
      "event_date": "{{1.date_mariage}}",
      "email": "{{1.email_photographe}}",
      "studio_name": "{{1.nom_studio}}",
      "venue": "{{1.domaine_reception}}",
      "expected_guests": {{1.nb_convives}},
      "bg_color": "#F3E9DB"
    }

Exemple de réponse standard (201 Created)

{
  "ok": true,
  "payment_required": false,
  "message": "Galerie créée avec succès.",
  "is_new_studio": false,
  "event": {
    "id": 42,
    "public_slug": "k7w9m2zp",
    "couple_names": "Sophie & Thomas",
    "event_date": "2026-07-18",
    "venue": "Château de la Tour, Chantilly",
    "expected_guests": 120,
    "moderation_mode": "auto",
    "status": "draft",
    "show_banner": false,
    "bg_color": "#F3E9DB",
    "urls": {
      "gallery_url": "https://onestla.app/g/k7w9m2zp",
      "upload_url": "https://onestla.app/g/k7w9m2zp",
      "wall_url": "https://onestla.app/wall/a4f890e1bc129482fa",
      "admin_url": "https://onestla.app/admin/e/42",
      "kit_url": "https://onestla.app/admin/e/42/kit"
    },
    "photographer": {
      "id": 2,
      "studio_name": "Studio Horizon Photographie",
      "email": "contact@monstudiophoto.fr",
      "is_new": false
    },
    "created_at": "2026-09-24 21:40:00"
  }
}

💳 Création avec Paiement Stripe (19,99 €)

Pour faire régler la galerie directement par le client avant toute création, passez "require_payment": true. Ni la galerie ni le compte photographe ne sont créés en base de données avant le paiement : l'API génère une session Stripe sécurisée et vous retourne le lien checkout_url. Dès que le client effectue son règlement, la galerie et le compte photographe sont automatiquement créés et activés en direct avec les options spécifiées (y compris bg_color).

curl -X POST https://onestla.app/api/v1/events \
  -H "Authorization: Bearer VOTRE_CLE_API" \
  -H "Content-Type: application/json" \
  -d '{
    "couple_names": "Sophie & Thomas",
    "event_date": "2026-07-18",
    "venue": "Château de la Tour, Chantilly",
    "expected_guests": 120,
    "bg_color": "#F3E9DB",
    "require_payment": true,
    "amount_cents": 1999,
    "success_url": "https://votresite.com/merci?session_id={CHECKOUT_SESSION_ID}",
    "cancel_url": "https://votresite.com/annule"
  }'

Exemple de réponse avec paiement exigé (201 Created)

{
  "ok": true,
  "payment_required": true,
  "message": "Session de paiement Stripe générée (19,99 €). Le compte photographe et la galerie seront créés automatiquement dès réception du paiement.",
  "payment": {
    "status": "pending",
    "amount_cents": 1999,
    "amount_eur": 19.99,
    "currency": "EUR",
    "checkout_url": "https://checkout.stripe.com/c/pay/cs_live_a1b2c3d4e5f6...",
    "session_id": "cs_live_a1b2c3d4e5f6...",
    "success_url": "https://votresite.com/merci?session_id=cs_live_a1b2c3d4e5f6...",
    "cancel_url": "https://votresite.com/annule"
  },
  "event_preview": {
    "couple_names": "Sophie & Thomas",
    "event_date": "2026-07-18",
    "venue": "Château de la Tour, Chantilly",
    "expected_guests": 120,
    "bg_color": "#F3E9DB",
    "public_slug": "8dgxiphy",
    "gallery_url": "https://onestla.app/g/8dgxiphy",
    "wall_url": "https://onestla.app/wall/a4f890e1bc129482fa",
    "status": "pending_payment"
  }
}

Déclencher le paiement sur une galerie existante

POST https://onestla.app/api/v1/events/{id_ou_slug}/checkout

Génère une session Stripe à 19,99 € pour une galerie en attente (brouillon) déjà créée auparavant.

🔍 3. Vérifier l'existence d'un studio ou e-mail

Permet de tester avant création si un studio_name ou une adresse email est déjà enregistré sur On est là.

GET https://onestla.app/api/v1/studio/check?studio_name=Studio+Horizon

Paramètres acceptés (en Query String ou Body JSON)

Paramètre Type Description
studio_name string Nom du studio à vérifier (insensible à la casse).
email string Adresse e-mail à vérifier si aucun studio_name n'est trouvé.

Exemples de requêtes pour tester l'existence

# Test par nom de studio
curl -X GET "https://onestla.app/api/v1/studio/check?studio_name=Studio+Horizon+Photographie" \
  -H "Authorization: Bearer VOTRE_CLE_API"

# Ou test par e-mail
curl -X GET "https://onestla.app/api/v1/studio/check?email=contact@monstudiophoto.fr" \
  -H "Authorization: Bearer VOTRE_CLE_API"
const check = await fetch('https://onestla.app/api/v1/studio/check?studio_name=Studio+Horizon', {
  headers: { 'Authorization': 'Bearer VOTRE_CLE_API' }
});
const result = await check.json();
if (result.exists) {
  console.log('Studio trouvé, ID:', result.photographer.id);
} else {
  console.log('Nouveau studio à créer');
}
import requests

r = requests.get(
    "https://onestla.app/api/v1/studio/check",
    params={"studio_name": "Studio Horizon Photographie"},
    headers={"Authorization": "Bearer VOTRE_CLE_API"}
)
data = r.json()
print("Existe déjà :", data["exists"])

Exemple de réponse si le studio EXISTE ("exists": true) :

{
  "ok": true,
  "exists": true,
  "query": {
    "studio_name": "Studio Horizon Photographie",
    "email": null
  },
  "photographer": {
    "id": 2,
    "studio_name": "Studio Horizon Photographie",
    "email": "contact@monstudiophoto.fr",
    "brand_color": "#E0A458",
    "events_count": 8,
    "created_at": "2026-08-15 10:00:00"
  }
}

Exemple de réponse si le studio N'EXISTE PAS ("exists": false) :

{
  "ok": true,
  "exists": false,
  "query": {
    "studio_name": "Studio Inconnu",
    "email": null
  },
  "photographer": null
}

📋 4. Lister et consulter vos galeries

Lister vos galeries existantes

GET https://onestla.app/api/v1/events?limit=25&offset=0
curl -X GET "https://onestla.app/api/v1/events?limit=25" \
  -H "Authorization: Bearer VOTRE_CLE_API"

Détail et métriques en direct d'une galerie

GET https://onestla.app/api/v1/events/{id_ou_slug}

Renvoie les statistiques en direct : nombre de photos approuvées, photos en attente de modération et nombre de contacts e-mails d'invités collectés.

{
  "ok": true,
  "event": {
    "id": 40,
    "public_slug": "myxvp5nn",
    "couple_names": "Clémence & Alexandre",
    "event_date": "2026-08-22",
    "venue": "Château de Chambord",
    "expected_guests": 150,
    "moderation_mode": "auto",
    "status": "draft",
    "show_banner": true,
    "bg_color": "#F3E9DB",
    "metrics": {
      "approved_photos": 42,
      "pending_photos": 3,
      "guest_contacts": 58
    },
    "urls": {
      "gallery_url": "https://onestla.app/g/myxvp5nn",
      "wall_url": "https://onestla.app/wall/4c42e5e1f1ca07a26e",
      "admin_url": "https://onestla.app/admin/e/40",
      "kit_url": "https://onestla.app/admin/e/40/kit"
    },
    "created_at": "2026-09-24 07:11:05"
  }
}

🚦 5. Codes HTTP & Gestion des erreurs

Code HTTP Signification Explication
200 OK Succès Requête traitée avec succès (consultation, vérification).
201 Created Création réussie La nouvelle galerie a été créée et configurée.
400 Bad Request Requête invalide Paramètre de recherche ou payload manquant.
401 Unauthorized Non authentifié Clé d'API absente, invalide ou révoquée.
422 Unprocessable Validation échouée Champs obligatoires manquants, format d'e-mail invalide ou date incorrecte.
404 Not Found Introuvable La galerie demandée n'existe pas ou n'appartient pas à ce compte.

Prêt à brancher vos automatisations ?

Générez votre première clé d'API en 1 clic dans votre espace d'administration et créez votre première galerie en quelques millisecondes.

Accéder à l'espace API & Clés →