Une interface REST API et un serveur MCP permettant de prendre rendez-vous avec des avocats spécialisés en droit de l'immigration agréés dans toute l'Espagne. Les clients effectuent toujours la confirmation et le paiement sur leyapp.es — votre intégration n'implique aucune transaction financière.
L'API «API » fournit les mêmes données vérifiées sur les avocats que le site leyapp.es : recherche, profils publics, avis, disponibilités et intentions de prise de rendez-vous. L'accès anonyme est soumis à des limites de requêtes peu élevées ; une clé « API » permet d'augmenter ces limites et de débloquer des points de terminaison protégés par clé ainsi que des analyses d'utilisation.
Aucun paiement ne peut être effectué via l'API
Une « intention de réservation » correspond à une réservation de 15 minutes. Le client confirme et effectue le paiement sur leyapp.es — votre intégration ne traite à aucun moment les données relatives au paiement ou aux cartes bancaires.
Adapté aux utilisateurs anonymes
La lecture des points de terminaison et la création d'intentions fonctionnent sans clé, dans le respect de limites prudentes par adresse IP. Les clés sont gratuites et peuvent être créées depuis votre tableau de bord.
Mode test intégré
Les clés « leyk_test_ » exécutent l'ensemble du processus de validation, mais ne créent rien et n'envoient aucune notification. Compilation par rapport à l'environnement de test, déploiement sur l'environnement de production.
Traçabilité intégrée dès la conception
Chaque réponse comporte un identifiant X-Request-Id. Indiquez-le au service d'assistance et nous pourrons retrouver votre requête exacte.
De zéro à une intention de réservation (à titre d'essai) en quatre requêtes. Commencez par créer une clé d'essai gratuite dans Tableau de bord → Développeur.
# 1. Get a test key at leyapp.es/dashboard/developer
export LEYAPP_API_KEY="leyk_test_..."
# 2. Find a lawyer
curl "https://leyapp.es/api/v1/lawyers/search?city=Barcelona&practice_area=immigration" \
-H "Authorization: Bearer $LEYAPP_API_KEY"
# 3. Check availability (id from step 2)
curl "https://leyapp.es/api/v1/lawyers/<lawyer_id>/availability" \
-H "Authorization: Bearer $LEYAPP_API_KEY"
# 4. Create a (test) booking intent
curl -X POST "https://leyapp.es/api/v1/bookings/initiate" \
-H "Authorization: Bearer $LEYAPP_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: demo-1" \
-d '{"lawyer_id":"<lawyer_id>","date":"<date>","start_time":"09:00:00","end_time":"10:00:00"}'Envoyez votre clé sous forme de jeton « Bearer » à chaque requête :
Authorization: Bearer leyk_...
Les requêtes avec clé sont soumises à des limites par niveau (double fenêtre : rafale par minute + quota journalier) via les en-têtes X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset. En cas de code d'erreur 429, respecter le paramètre Retry-After et effectuer une nouvelle tentative avec un recul exponentiel à variation aléatoire.
| Niveau | Requêtes par minute | Demandes / jour |
|---|---|---|
| free | 60 | 5,000 |
| partner | 300 | 50,000 |
| internal | 1,000 | ∞ |
Les nouvelles clés sont disponibles dès le niveau gratuit. Les niveaux de partenariat sont attribués par l'équipe LeyApp — contactez-nous via le formulaire d'assistance si votre intégration nécessite davantage de capacité. Les requêtes anonymes sont soumises à des limites distinctes et inférieures par adresse IP.
Les clés de test (leyk_test_) fonctionnent exactement comme les clés de production — mêmes points de terminaison, même validation, mêmes formats de réponse — mais aucune action réelle n'est effectuée : aucune demande de réservation n'est enregistrée, aucun avocat n'est averti, rien ne peut être confirmé ni payé.
Le trafic de test apparaît dans le journal des requêtes de votre tableau de bord (signalé), mais il est exclu des agrégats quotidiens. Remplacez la clé par une clé de production lors du déploiement — aucune autre modification n'est nécessaire.
/api/v1/lawyers/searchSearch verified lawyers
Same search engine as leyapp.es. Verified, publicly listed lawyers only. Scope: lawyers:read (anonymous allowed).
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| city | string | Non | |
| practice_area | string | Non | Slug from GET /practice-areas |
| language | string | Non | |
| min_fee_eur | number | Non | |
| max_fee_eur | number | Non | |
| sort | string (rating | price_asc | price_desc | reviews) | Non | |
| page | integer | Non | |
| limit | integer | Non |
curl "https://leyapp.es/api/v1/lawyers/search?city=Barcelona&practice_area=immigration&language=en" \ -H "Authorization: Bearer $LEYAPP_API_KEY"
/api/v1/lawyers/{lawyerId}Public lawyer profile
Full public profile incl. bio and bar memberships. Bio is user-generated content wrapped in safety fencing for AI consumers. Scope: lawyers:read (anonymous allowed).
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| lawyerId | string | Oui |
curl "https://leyapp.es/api/v1/lawyers/<lawyerId>" \ -H "Authorization: Bearer $LEYAPP_API_KEY"
/api/v1/lawyers/{lawyerId}/availabilityAvailable consultation slots
Available slots for a date range (max 14 days). Scope: availability:read (anonymous allowed).
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| lawyerId | string | Oui | |
| start_date | string | Non | Default: today |
| end_date | string | Non | Default: start_date + 13 days |
curl "https://leyapp.es/api/v1/lawyers/<lawyerId>/availability" \ -H "Authorization: Bearer $LEYAPP_API_KEY"
/api/v1/lawyers/{lawyerId}/reviewsPublic reviews
Recent reviews from verified clients. Comments are UGC with AI-safety fencing. Scope: reviews:read (anonymous allowed).
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| lawyerId | string | Oui | |
| limit | integer | Non |
curl "https://leyapp.es/api/v1/lawyers/<lawyerId>/reviews" \ -H "Authorization: Bearer $LEYAPP_API_KEY"
/api/v1/practice-areasPractice-area hierarchy
Reference data; cache-friendly (24h). Scope: reference:read (anonymous allowed).
curl "https://leyapp.es/api/v1/practice-areas" \ -H "Authorization: Bearer $LEYAPP_API_KEY"
/api/v1/citiesSupported cities and provinces
Reference data; cache-friendly (24h). Scope: reference:read (anonymous allowed).
curl "https://leyapp.es/api/v1/cities" \ -H "Authorization: Bearer $LEYAPP_API_KEY"
/api/v1/bookings/initiateCreate a booking intent
Creates a 15-minute booking intent for a free slot. The USER must open confirmation_url on leyapp.es to confirm and pay — the API never charges anyone. Supports Idempotency-Key (Stripe semantics: 24h replay, 422 on body mismatch). Test keys validate fully but create nothing. Scope: bookings:initiate (anonymous allowed at 5/hour).
{
"lawyer_id": "<lawyer_id from search>",
"date": "2026-09-01",
"start_time": "09:00:00",
"end_time": "10:00:00",
"source": "api",
"agent_name": "MyIntegration"
}curl -X POST "https://leyapp.es/api/v1/bookings/initiate" \
-H "Authorization: Bearer $LEYAPP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"lawyer_id":"<lawyer_id from search>","date":"2026-09-01","start_time":"09:00:00","end_time":"10:00:00","source":"api","agent_name":"MyIntegration"}'Les points de terminaison POST ne peuvent pas être exécutés à partir de la documentation — copiez l'extrait de code et exécutez-le en utilisant une clé de test à la place.
/api/v1/booking-intents/{intentId}API clé requisePoll a booking intent
Status of an intent CREATED BY YOUR KEY: pending | confirmed | expired. Requires an API key with bookings:read (not available anonymously).
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| intentId | string | Oui |
curl "https://leyapp.es/api/v1/booking-intents/<intentId>" \ -H "Authorization: Bearer $LEYAPP_API_KEY"
Abonnez un point de terminaison HTTPS (Tableau de bord → Développeur → Webhooks) aux événements liés aux intentions de réservation créées avec votre clé. Les envois respectent la spécification Standard Webhooks et font l'objet de nouvelles tentatives automatiques.
# Delivery headers (Standard Webhooks — standardwebhooks.com):
# webhook-id: unique delivery id (dedup key — at-least-once delivery)
# webhook-timestamp: unix seconds (reject if older than ±5 minutes)
# webhook-signature: v1,<base64 HMAC-SHA256 of "{id}.{timestamp}.{body}">
#
# Payload: { "id": "...", "type": "booking_intent.confirmed",
# "created_at": "...", "data": { "booking_intent_id": "...", "status": "..." } }
# Events: booking_intent.confirmed | booking_intent.expired
# Retries: 1m / 5m / 30m / 2h / 12h, then dead. Endpoint auto-disabled
# after 20 consecutive failures.Vous préférez discuter plutôt que de coder ? LeyApp fournit un serveur MCP comprenant 15 outils — recherche, disponibilité, réservation et (avec votre consentement) vos propres réservations — pour Claude, ChatGPT, Cursor et tout client compatible MCP. OAuth : donnez votre consentement avec des niveaux d’autorisation détaillés ; révoquez-le à tout moment depuis le Tableau de bord → Développeur.
Settings → Connectors → Add custom connector Name: LeyApp URL: https://leyapp.es/api/mcp/mcp Claude opens the LeyApp consent screen — sign in, pick a permission level, and you're connected.
La version 1 de l'API est exclusivement additive : des champs sont ajoutés, mais jamais renommés ni supprimés. Les modifications rompant la compatibilité seraient publiées sous la forme d'une nouvelle version, accompagnée d'une période de dépréciation de 90 jours annoncée ici et via les en-têtes « Deprecation » et « Sunset ».
2026-07-22
Reliability, webhook coverage, and key controls
2026-07-22
Search, profiles, reviews, reference data, intent polling, usage analytics
2026-07-16
API keys, tiered rate limits, idempotency, test mode
2026-03-21
Initial public beta
Des questions, des limites plus élevées ou des idées de partenariat ? Contactez-nous via le formulaire d'assistance — ou créez simplement une clé et commencez à développer.