From af001ddaeb985a23e197345187ddc012ac069e6c Mon Sep 17 00:00:00 2001 From: poduck Date: Wed, 17 Dec 2025 00:21:16 -0500 Subject: [PATCH] Add API documentation translations for all supported languages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds comprehensive translations for tenant API documentation in English, German, Spanish, and French. Includes ~312 translation keys per language covering API Overview, Appointments, Services, Resources, Customers, and Webhooks API documentation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- frontend/src/i18n/locales/de.json | 446 ++++++++++++++++++++++++++++++ frontend/src/i18n/locales/en.json | 446 ++++++++++++++++++++++++++++++ frontend/src/i18n/locales/es.json | 446 ++++++++++++++++++++++++++++++ frontend/src/i18n/locales/fr.json | 446 ++++++++++++++++++++++++++++++ 4 files changed, 1784 insertions(+) diff --git a/frontend/src/i18n/locales/de.json b/frontend/src/i18n/locales/de.json index 17764ef9..33145770 100644 --- a/frontend/src/i18n/locales/de.json +++ b/frontend/src/i18n/locales/de.json @@ -180,6 +180,452 @@ "request": "Anfrage", "response": "Antwort" }, + "apiDocs": { + "overview": { + "title": "API-Übersicht", + "subtitle": "REST API für Drittanbieter-Integrationen", + "introduction": { + "title": "Einführung", + "description": "SmoothSchedule bietet eine umfassende REST API, die es Ihnen ermöglicht, Ihre Planungsplattform mit Drittanbieter-Anwendungen zu integrieren, benutzerdefinierte Tools zu erstellen und Workflows zu automatisieren.", + "baseUrl": "Basis-URL", + "interactiveDocsTitle": "Interaktive Dokumentation", + "interactiveDocsDescription": "API-Endpunkte erkunden und testen unter" + }, + "authentication": { + "title": "Authentifizierung", + "description": "Alle API-Anfragen erfordern Authentifizierung mittels Bearer-Token im Authorization-Header.", + "tokenFormat": "Token-Format", + "productionEnv": "Produktionsumgebung", + "sandboxEnv": "Sandbox-Umgebung (sicher zum Testen)", + "exampleRequest": "Beispielanfrage", + "securityNote": "API-Tokens werden in Geschäftseinstellungen → API erstellt. Jeder Token hat konfigurierbare Bereiche, die den Zugriff auf bestimmte Endpunkte und Operationen steuern." + }, + "scopes": { + "title": "Verfügbare Bereiche", + "description": "Steuern Sie, welche Operationen Ihr API-Token durchführen kann, indem Sie Bereiche auswählen:", + "servicesRead": "Dienstleistungen und Preise anzeigen", + "resourcesRead": "Ressourcen und Mitarbeiter anzeigen", + "availabilityRead": "Verfügbarkeit von Zeitfenstern prüfen", + "bookingsRead": "Termine anzeigen", + "bookingsWrite": "Termine erstellen, aktualisieren, stornieren", + "customersRead": "Kundeninformationen anzeigen", + "customersWrite": "Kunden erstellen und aktualisieren", + "businessRead": "Geschäftsinformationen anzeigen", + "webhooksManage": "Webhook-Abonnements verwalten" + }, + "rateLimiting": { + "title": "Ratenbegrenzung", + "description": "API-Anfragen sind ratenbegrenzt, um faire Nutzung und Plattformstabilität zu gewährleisten:", + "globalLimit": "Globales Limit", + "globalLimitValue": "1.000 Anfragen pro Stunde", + "burstLimit": "Burst-Limit", + "burstLimitValue": "100 Anfragen pro Minute", + "responseHeaders": "Antwort-Header", + "headerLimit": "Maximal zulässige Anfragen", + "headerRemaining": "Verbleibende Anfragen im Zeitfenster", + "headerReset": "Unix-Zeitstempel, wann das Limit zurückgesetzt wird" + }, + "errors": { + "title": "Fehlerantworten", + "description": "Alle Fehler folgen einem konsistenten JSON-Format:", + "httpStatusCodes": "HTTP-Statuscodes", + "code": "Code", + "status": "Status", + "codeDescription": "Beschreibung", + "ok": "OK", + "okDesc": "Anfrage erfolgreich", + "created": "Erstellt", + "createdDesc": "Ressource erfolgreich erstellt", + "badRequest": "Ungültige Anfrage", + "badRequestDesc": "Ungültige Anfragedaten", + "unauthorized": "Nicht autorisiert", + "unauthorizedDesc": "Fehlendes oder ungültiges Token", + "forbidden": "Verboten", + "forbiddenDesc": "Unzureichende Bereichsberechtigungen", + "notFound": "Nicht gefunden", + "notFoundDesc": "Ressource existiert nicht", + "conflict": "Konflikt", + "conflictDesc": "Ressourcenkonflikt (z.B. Doppelbuchung)", + "tooManyRequests": "Zu viele Anfragen", + "tooManyRequestsDesc": "Ratenlimit überschritten", + "serverError": "Interner Serverfehler", + "serverErrorDesc": "Serverfehler (Support kontaktieren)" + }, + "sandbox": { + "title": "Sandbox-Modus", + "description": "Testen Sie Ihre Integration sicher, ohne Produktionsdaten zu beeinflussen:", + "testTokens": "Test-Tokens", + "testTokensDesc": "funktionieren nur mit Sandbox-Daten", + "safeTesting": "Sicheres Testen", + "safeTestingDesc": "Erstellen, aktualisieren und löschen Sie Testtermine, ohne echte Buchungen zu beeinflussen", + "easyToggle": "Einfaches Umschalten", + "easyToggleDesc": "Wechseln Sie zwischen Test- und Live-Modus in Geschäftseinstellungen → API", + "tip": "Testen Sie immer mit Sandbox-Tokens, bevor Sie Produktions-Tokens in Ihrer Anwendung verwenden." + }, + "endpoints": { + "title": "API-Endpunkte", + "appointmentsTitle": "Termine-API", + "appointmentsDesc": "Termine erstellen, verwalten und abfragen", + "servicesTitle": "Dienstleistungs-API", + "servicesDesc": "Zugriff auf Dienstleistungskatalog und Preise", + "resourcesTitle": "Ressourcen-API", + "resourcesDesc": "Mitarbeiter-, Raum- und Ausrüstungsdaten", + "customersTitle": "Kunden-API", + "customersDesc": "Kundenprofile und Kontaktinformationen", + "webhooksTitle": "Webhooks", + "webhooksDesc": "Echtzeit-Ereignisbenachrichtigungen", + "viewDocs": "Dokumentation anzeigen" + }, + "needHelp": { + "title": "Brauchen Sie mehr Hilfe?", + "description": "Unser Support-Team steht Ihnen bei Fragen zur API-Integration zur Verfügung.", + "contactSupport": "Support kontaktieren" + } + }, + "appointments": { + "title": "Termine-API", + "subtitle": "Termine und Buchungen programmatisch verwalten", + "overview": { + "title": "Übersicht", + "description": "Die Termine-API ermöglicht es Ihnen, Termine, Buchungen und Planungsereignisse in Ihrem SmoothSchedule-Konto programmatisch zu verwalten. Erstellen, abrufen, aktualisieren und stornieren Sie Termine mit voller Kontrolle über Ressourcen, Kunden und Planung.", + "requiredScopes": "Erforderliche OAuth-Bereiche" + }, + "endpoints": { + "title": "API-Endpunkte", + "list": { + "title": "Termine auflisten", + "description": "Abrufen einer Liste von Terminen mit optionaler Filterung.", + "queryParams": "Abfrageparameter", + "startDate": "Nach Startdatum filtern (JJJJ-MM-TT)", + "endDate": "Nach Enddatum filtern (JJJJ-MM-TT)", + "statusFilter": "Nach Status filtern (scheduled, confirmed, completed, etc.)", + "customerIdFilter": "Nach Kunden-UUID filtern" + }, + "get": { + "title": "Termin abrufen", + "description": "Abrufen eines einzelnen Termins anhand der ID." + }, + "create": { + "title": "Termin erstellen", + "description": "Erstellen eines neuen Termins.", + "requestBody": "Anfragekörper" + }, + "update": { + "title": "Termin aktualisieren", + "description": "Aktualisieren eines bestehenden Termins.", + "partialUpdate": "Anfragekörper (partielle Aktualisierung)" + }, + "cancel": { + "title": "Termin stornieren", + "description": "Einen Termin stornieren. Optional einen Stornierungsgrund angeben.", + "optionalBody": "Anfragekörper (optional)" + } + }, + "object": { + "title": "Termin-Objekt", + "description": "Jedes Termin-Objekt enthält die folgenden Felder:", + "field": "Feld", + "type": "Typ", + "fieldDescription": "Beschreibung", + "id": "Eindeutige Termin-ID", + "service": "Dienstleistungsdetails (id, name, duration, price)", + "resource": "Zugewiesene Ressource (id, name, type)", + "customer": "Kundendetails (id, email, name, phone)", + "startTime": "Startzeit des Termins (UTC)", + "endTime": "Endzeit des Termins (UTC)", + "status": "Aktueller Status (siehe Statuswerte unten)", + "notes": "Zusätzliche Notizen oder Anweisungen", + "createdAt": "Zeitpunkt der Erstellung des Termins" + }, + "statusValues": { + "title": "Statuswerte", + "description": "Termine können einen der folgenden Statuswerte haben:", + "scheduled": "Termin wurde geplant, aber noch nicht bestätigt", + "confirmed": "Kunde hat den Termin bestätigt", + "inProgress": "Termin läuft derzeit", + "completed": "Termin wurde erfolgreich abgeschlossen", + "cancelled": "Termin wurde storniert", + "noShow": "Kunde ist nicht zum Termin erschienen" + }, + "exampleResponse": { + "title": "Beispielantwort", + "description": "Ein typisches Termin-Objekt in der API-Antwort:" + }, + "rateLimiting": { + "title": "Ratenbegrenzung", + "description": "API-Anfragen sind begrenzt auf", + "perHour": "Anfragen pro Stunde", + "perKey": "pro API-Schlüssel.", + "headersInfo": "Ratenlimit-Informationen sind in den Antwort-Headern enthalten:" + } + }, + "services": { + "title": "Dienstleistungs-API", + "subtitle": "Zugriff auf Ihren Dienstleistungskatalog über API", + "overview": { + "title": "Übersicht", + "description": "Greifen Sie über die öffentliche API auf Ihren Dienstleistungskatalog zu, um Planungsfunktionen in Ihre eigenen Anwendungen, Websites oder mobilen Apps zu integrieren.", + "requiredScope": "Erforderlicher Bereich", + "readOnlyNote": "Dienstleistungen sind über die öffentliche API schreibgeschützt. Verwenden Sie das Dashboard zum Erstellen, Aktualisieren oder Löschen von Dienstleistungen." + }, + "endpoints": { + "title": "Endpunkte", + "list": { + "title": "Dienstleistungen auflisten", + "description": "Gibt alle aktiven Dienstleistungen sortiert zurück nach" + }, + "get": { + "title": "Dienstleistung abrufen", + "description": "Gibt detaillierte Informationen für eine bestimmte Dienstleistung anhand der UUID zurück." + } + }, + "object": { + "title": "Dienstleistungs-Objekt", + "field": "Feld", + "type": "Typ", + "description": "Beschreibung", + "id": "Eindeutige Kennung für die Dienstleistung", + "name": "Dienstleistungsname (z.B. \"Haarschnitt\", \"Ölwechsel\")", + "serviceDescription": "Optional detaillierte Beschreibung der Dienstleistung", + "duration": "Dauer in Minuten (z.B. 30, 60, 90)", + "price": "Preis in Dollar (null für variable Preisgestaltung)", + "photos": "Array von Foto-URLs für die Dienstleistung", + "isActive": "Ob die Dienstleistung derzeit aktiv ist" + }, + "exampleResponse": { + "title": "Beispielantwort" + }, + "codeExamples": { + "title": "Code-Beispiele", + "listAll": "Alle Dienstleistungen auflisten", + "getSpecific": "Bestimmte Dienstleistung abrufen" + } + }, + "resources": { + "title": "Ressourcen-API", + "subtitle": "Zugriff auf buchbare Ressourcen über die öffentliche API", + "overview": { + "title": "Übersicht", + "description": "Die Ressourcen-API bietet schreibgeschützten Zugriff auf Ihre buchbaren Ressourcen einschließlich Mitarbeiter, Räume und Ausrüstung. Verwenden Sie diese API, um verfügbare Ressourcen aufzulisten und deren Details abzurufen.", + "requiredScope": "Erforderlicher OAuth-Bereich", + "readOnlyNote": "Ressourcen sind über die öffentliche API schreibgeschützt. Verwenden Sie das Haupt-Dashboard zum Erstellen oder Ändern von Ressourcen." + }, + "endpoints": { + "title": "Endpunkte", + "list": { + "title": "Ressourcen auflisten", + "description": "Gibt eine Liste aller aktiven Ressourcen in Ihrem Konto zurück.", + "queryParams": "Abfrageparameter", + "typeFilter": "Nach Ressourcentyp filtern (STAFF, ROOM, EQUIPMENT)" + }, + "get": { + "title": "Ressource abrufen", + "description": "Details für eine bestimmte Ressource anhand ihrer ID abrufen." + } + }, + "object": { + "title": "Ressourcen-Objekt", + "field": "Feld", + "type": "Typ", + "description": "Beschreibung", + "id": "Eindeutige Kennung", + "name": "Ressourcenname", + "resourceDescription": "Ressourcenbeschreibung", + "resourceType": "Ressourcentyp-Objekt mit id, name, category", + "photoUrl": "URL zum Ressourcenfoto", + "isActive": "Ob die Ressource aktiv ist" + }, + "types": { + "title": "Ressourcentypen", + "staff": "STAFF", + "staffDesc": "Teammitglieder, die Dienstleistungen erbringen", + "room": "ROOM", + "roomDesc": "Physische Räume für Termine", + "equipment": "EQUIPMENT", + "equipmentDesc": "Werkzeuge oder Ausrüstung, die für Dienstleistungen benötigt werden" + }, + "exampleResponse": { + "title": "Beispielantwort" + }, + "codeExamples": { + "title": "Code-Beispiele", + "listAll": "Alle Ressourcen auflisten", + "filterByType": "Nach Typ filtern", + "getSpecific": "Bestimmte Ressource abrufen" + }, + "exploreMore": { + "title": "Weitere API-Endpunkte erkunden", + "description": "Die Ressourcen-API ist nur ein Teil unserer umfassenden öffentlichen API. Sehen Sie sich die vollständige Dokumentation an, um mehr über Termine, Kunden, Dienstleistungen und mehr zu erfahren.", + "viewFullDocs": "Vollständige API-Dokumentation anzeigen" + } + }, + "customers": { + "title": "Kunden-API", + "subtitle": "Kundendatensätze programmatisch verwalten", + "overview": { + "title": "Übersicht", + "description": "Die Kunden-API ermöglicht es Ihnen, Kundendatensätze in Ihrem SmoothSchedule-Konto zu verwalten. Erstellen, abrufen, aktualisieren und listen Sie Kundeninformationen programmatisch auf.", + "requiredScopes": "Erforderliche Bereiche", + "readScope": "zum Lesen", + "writeScope": "zum Erstellen/Aktualisieren" + }, + "endpoints": { + "title": "Endpunkte", + "list": { + "title": "Kunden auflisten", + "description": "Abrufen einer paginierten Liste von Kunden. Ergebnisse sind auf 100 Kunden pro Anfrage begrenzt.", + "queryParams": "Abfrageparameter", + "emailFilter": "Nach exakter E-Mail-Adresse filtern", + "searchFilter": "Nach Name oder E-Mail suchen (Teilübereinstimmung)" + }, + "get": { + "title": "Kunde abrufen", + "description": "Abrufen eines bestimmten Kunden anhand seiner UUID." + }, + "create": { + "title": "Kunde erstellen", + "description": "Erstellen eines neuen Kundendatensatzes.", + "requestBody": "Anfragekörper", + "emailRequired": "E-Mail-Adresse (muss eindeutig sein)", + "nameField": "Vollständiger Name des Kunden", + "phoneField": "Telefonnummer", + "conflictNote": "wenn bereits ein Kunde mit dieser E-Mail existiert." + }, + "update": { + "title": "Kunde aktualisieren", + "description": "Aktualisieren der Informationen eines bestehenden Kunden.", + "requestBody": "Anfragekörper", + "emailNote": "E-Mail-Adressen können nach der Erstellung nicht mehr geändert werden." + } + }, + "object": { + "title": "Kunden-Objekt", + "field": "Feld", + "type": "Typ", + "description": "Beschreibung", + "id": "Eindeutige Kunden-ID", + "email": "E-Mail-Adresse des Kunden (eindeutig)", + "name": "Vollständiger Name des Kunden", + "phone": "Telefonnummer des Kunden", + "createdAt": "Zeitstempel der Kundenerstellung", + "totalAppointments": "Gesamtzahl der Termine für diesen Kunden", + "lastAppointmentAt": "Zeitstempel des letzten Termins des Kunden" + }, + "exampleResponse": { + "title": "Beispielantwort" + }, + "codeExamples": { + "title": "Code-Beispiele", + "listAll": "Alle Kunden auflisten", + "search": "Kunden suchen", + "create": "Kunde erstellen", + "update": "Kunde aktualisieren" + } + }, + "webhooks": { + "title": "Webhooks-API", + "subtitle": "Erhalten Sie Echtzeitbenachrichtigungen, wenn Ereignisse in Ihrem Konto auftreten", + "overview": { + "title": "Übersicht", + "description": "Webhooks ermöglichen es Ihrer Anwendung, Echtzeitbenachrichtigungen zu erhalten, wenn Ereignisse in Ihrem SmoothSchedule-Konto auftreten. Anstatt die API abzufragen, senden Webhooks JSON-Payloads per POST an Ihren angegebenen Endpunkt, wann immer abonnierte Ereignisse eintreten.", + "requiredScope": "Erforderlicher Bereich", + "format": "JSON-Payloads per POST an Ihren Endpunkt", + "security": "HMAC-SHA256-Signaturverifizierung" + }, + "endpoints": { + "title": "API-Endpunkte", + "list": { + "title": "Abonnements auflisten", + "description": "Gibt eine Liste aller Webhook-Abonnements für Ihr Konto zurück." + }, + "create": { + "title": "Abonnement erstellen", + "description": "Erstellen eines neuen Webhook-Abonnements. Gibt das Abonnement einschließlich eines", + "secretNote": "zur Signaturverifizierung zurück.", + "requestBody": "Anfragekörper", + "secretWarning": "Das", + "secretWarningBold": "Geheimnis", + "secretWarningEnd": "wird nur einmal in der Antwort angezeigt. Speichern Sie es sicher für die Signaturverifizierung." + }, + "get": { + "title": "Abonnement abrufen", + "description": "Details eines bestimmten Webhook-Abonnements abrufen." + }, + "update": { + "title": "Abonnement aktualisieren", + "description": "Aktualisieren eines bestehenden Webhook-Abonnements (URL, Ereignisse oder Beschreibung)." + }, + "delete": { + "title": "Abonnement löschen", + "description": "Webhook-Abonnement dauerhaft löschen." + }, + "listEvents": { + "title": "Ereignistypen auflisten", + "description": "Liste aller verfügbaren Webhook-Ereignistypen abrufen." + }, + "test": { + "title": "Test-Webhook senden", + "description": "Test-Webhook senden, um zu überprüfen, ob Ihr Endpunkt korrekt funktioniert." + }, + "deliveries": { + "title": "Zustellungsverlauf anzeigen", + "description": "Zustellungsverlauf und Status für ein Webhook-Abonnement anzeigen." + } + }, + "events": { + "title": "Verfügbare Ereignisse", + "description": "Abonnieren Sie eines oder mehrere dieser Ereignisse, um Benachrichtigungen zu erhalten:", + "event": "Ereignis", + "eventDescription": "Beschreibung", + "appointmentCreated": "Wird ausgelöst, wenn ein neuer Termin erstellt wird", + "appointmentUpdated": "Wird ausgelöst, wenn ein Termin aktualisiert wird", + "appointmentCancelled": "Wird ausgelöst, wenn ein Termin storniert wird", + "customerCreated": "Wird ausgelöst, wenn ein neuer Kunde erstellt wird", + "customerUpdated": "Wird ausgelöst, wenn Kundeninformationen aktualisiert werden", + "serviceCreated": "Wird ausgelöst, wenn eine neue Dienstleistung erstellt wird", + "serviceUpdated": "Wird ausgelöst, wenn eine Dienstleistung aktualisiert wird" + }, + "payload": { + "title": "Webhook-Payload-Format", + "description": "Alle Webhook-Payloads folgen diesem Standardformat:" + }, + "signature": { + "title": "Signaturverifizierung", + "description": "Alle Webhooks enthalten einen", + "headerName": "-Header mit einer HMAC-SHA256-Signatur. Verifizieren Sie diese Signatur, um sicherzustellen, dass der Webhook von SmoothSchedule stammt.", + "headerTitle": "Header", + "algorithmTitle": "Algorithmus", + "algorithmDesc": "HMAC-SHA256 des rohen Anfragekörpers unter Verwendung Ihres Webhook-Geheimnisses", + "pythonExample": "Python-Beispiel", + "nodeExample": "Node.js-Beispiel" + }, + "retry": { + "title": "Wiederholungsrichtlinie", + "description": "Wenn Ihr Endpunkt nicht mit einem 2xx-Statuscode antwortet, wiederholt SmoothSchedule die Zustellung automatisch:", + "attempts": "Wiederholungsversuche", + "attemptsValue": "3 automatische Wiederholungen", + "backoff": "Verzögerungsplan", + "backoffValue": "1 Minute, 5 Minuten, 30 Minuten", + "autoDisable": "Automatische Deaktivierung", + "autoDisableValue": "Abonnement nach 10 aufeinanderfolgenden Fehlschlägen deaktiviert", + "responseNote": "Ihr Endpunkt sollte innerhalb von 5 Sekunden antworten und einen 2xx-Statuscode zurückgeben, um den Empfang zu bestätigen. Verarbeiten Sie den Webhook bei Bedarf asynchron." + }, + "codeExamples": { + "title": "Code-Beispiele", + "createSubscription": "Webhook-Abonnement erstellen", + "handleExpress": "Webhook in Express.js verarbeiten" + } + }, + "common": { + "required": "erforderlich", + "optional": "optional", + "returns": "Gibt zurück", + "or": "oder", + "needMoreHelp": "Brauchen Sie mehr Hilfe?", + "supportDescription": "Unser Support-Team steht Ihnen bei Fragen zur API zur Verfügung.", + "contactSupport": "Support kontaktieren" + } + }, "contracts": { "overview": { "title": "Vertrags- und E-Signatur-System", diff --git a/frontend/src/i18n/locales/en.json b/frontend/src/i18n/locales/en.json index cecd93f7..c699a503 100644 --- a/frontend/src/i18n/locales/en.json +++ b/frontend/src/i18n/locales/en.json @@ -254,6 +254,452 @@ "errorLoadingTokens": "Error Loading Tokens", "errorLoadingTokensMessage": "Failed to load API tokens. Please check your connection and try refreshing the page." }, + "apiDocs": { + "overview": { + "title": "API Overview", + "subtitle": "REST API for third-party integrations", + "introduction": { + "title": "Introduction", + "description": "SmoothSchedule provides a comprehensive REST API that allows you to integrate your scheduling platform with third-party applications, build custom tools, and automate workflows.", + "baseUrl": "Base URL", + "interactiveDocsTitle": "Interactive Documentation", + "interactiveDocsDescription": "Explore and test API endpoints at" + }, + "authentication": { + "title": "Authentication", + "description": "All API requests require authentication using Bearer tokens in the Authorization header.", + "tokenFormat": "Token Format", + "productionEnv": "Production environment", + "sandboxEnv": "Sandbox environment (safe for testing)", + "exampleRequest": "Example Request", + "securityNote": "API tokens are created in Business Settings → API. Each token has configurable scopes that control access to specific endpoints and operations." + }, + "scopes": { + "title": "Available Scopes", + "description": "Control which operations your API token can perform by selecting scopes:", + "servicesRead": "View services and pricing", + "resourcesRead": "View resources and staff", + "availabilityRead": "Check time slot availability", + "bookingsRead": "View appointments", + "bookingsWrite": "Create, update, cancel appointments", + "customersRead": "View customer information", + "customersWrite": "Create and update customers", + "businessRead": "View business information", + "webhooksManage": "Manage webhook subscriptions" + }, + "rateLimiting": { + "title": "Rate Limiting", + "description": "API requests are rate-limited to ensure fair usage and platform stability:", + "globalLimit": "Global Limit", + "globalLimitValue": "1,000 requests per hour", + "burstLimit": "Burst Limit", + "burstLimitValue": "100 requests per minute", + "responseHeaders": "Response Headers", + "headerLimit": "Maximum requests allowed", + "headerRemaining": "Requests remaining in window", + "headerReset": "Unix timestamp when limit resets" + }, + "errors": { + "title": "Error Responses", + "description": "All errors follow a consistent JSON format:", + "httpStatusCodes": "HTTP Status Codes", + "code": "Code", + "status": "Status", + "codeDescription": "Description", + "ok": "OK", + "okDesc": "Request succeeded", + "created": "Created", + "createdDesc": "Resource created successfully", + "badRequest": "Bad Request", + "badRequestDesc": "Invalid request data", + "unauthorized": "Unauthorized", + "unauthorizedDesc": "Missing or invalid token", + "forbidden": "Forbidden", + "forbiddenDesc": "Insufficient scope permissions", + "notFound": "Not Found", + "notFoundDesc": "Resource does not exist", + "conflict": "Conflict", + "conflictDesc": "Resource conflict (e.g., double booking)", + "tooManyRequests": "Too Many Requests", + "tooManyRequestsDesc": "Rate limit exceeded", + "serverError": "Internal Server Error", + "serverErrorDesc": "Server error (contact support)" + }, + "sandbox": { + "title": "Sandbox Mode", + "description": "Test your integration safely without affecting production data:", + "testTokens": "Test Tokens", + "testTokensDesc": "work with sandbox data only", + "safeTesting": "Safe Testing", + "safeTestingDesc": "Create, update, and delete test appointments without affecting real bookings", + "easyToggle": "Easy Toggle", + "easyToggleDesc": "Switch between test and live modes in Business Settings → API", + "tip": "Always test with sandbox tokens before using production tokens in your application." + }, + "endpoints": { + "title": "API Endpoints", + "appointmentsTitle": "Appointments API", + "appointmentsDesc": "Create, manage, and query appointments", + "servicesTitle": "Services API", + "servicesDesc": "Access service catalog and pricing", + "resourcesTitle": "Resources API", + "resourcesDesc": "Staff, rooms, and equipment data", + "customersTitle": "Customers API", + "customersDesc": "Customer profiles and contact info", + "webhooksTitle": "Webhooks", + "webhooksDesc": "Real-time event notifications", + "viewDocs": "View Docs" + }, + "needHelp": { + "title": "Need More Help?", + "description": "Our support team is ready to help with API integration questions.", + "contactSupport": "Contact Support" + } + }, + "appointments": { + "title": "Appointments API", + "subtitle": "Manage appointments and bookings programmatically", + "overview": { + "title": "Overview", + "description": "The Appointments API allows you to programmatically manage appointments, bookings, and scheduling events in your SmoothSchedule account. Create, retrieve, update, and cancel appointments with full control over resources, customers, and scheduling.", + "requiredScopes": "Required OAuth Scopes" + }, + "endpoints": { + "title": "API Endpoints", + "list": { + "title": "List Appointments", + "description": "Retrieve a list of appointments with optional filtering.", + "queryParams": "Query Parameters", + "startDate": "Filter by start date (YYYY-MM-DD)", + "endDate": "Filter by end date (YYYY-MM-DD)", + "statusFilter": "Filter by status (scheduled, confirmed, completed, etc.)", + "customerIdFilter": "Filter by customer UUID" + }, + "get": { + "title": "Get Appointment", + "description": "Retrieve a single appointment by ID." + }, + "create": { + "title": "Create Appointment", + "description": "Create a new appointment.", + "requestBody": "Request Body" + }, + "update": { + "title": "Update Appointment", + "description": "Update an existing appointment.", + "partialUpdate": "Request Body (partial update)" + }, + "cancel": { + "title": "Cancel Appointment", + "description": "Cancel an appointment. Optionally provide a cancellation reason.", + "optionalBody": "Request Body (optional)" + } + }, + "object": { + "title": "Appointment Object", + "description": "Each appointment object contains the following fields:", + "field": "Field", + "type": "Type", + "fieldDescription": "Description", + "id": "Unique appointment identifier", + "service": "Service details (id, name, duration, price)", + "resource": "Assigned resource (id, name, type)", + "customer": "Customer details (id, email, name, phone)", + "startTime": "Appointment start time (UTC)", + "endTime": "Appointment end time (UTC)", + "status": "Current status (see Status Values below)", + "notes": "Additional notes or instructions", + "createdAt": "When the appointment was created" + }, + "statusValues": { + "title": "Status Values", + "description": "Appointments can have one of the following status values:", + "scheduled": "Appointment has been scheduled but not yet confirmed", + "confirmed": "Customer has confirmed the appointment", + "inProgress": "Appointment is currently in progress", + "completed": "Appointment has been completed successfully", + "cancelled": "Appointment was cancelled", + "noShow": "Customer did not show up for the appointment" + }, + "exampleResponse": { + "title": "Example Response", + "description": "A typical appointment object in the API response:" + }, + "rateLimiting": { + "title": "Rate Limiting", + "description": "API requests are limited to", + "perHour": "requests per hour", + "perKey": "per API key.", + "headersInfo": "Rate limit information is included in response headers:" + } + }, + "services": { + "title": "Services API", + "subtitle": "Access your service catalog via API", + "overview": { + "title": "Overview", + "description": "Access your service catalog via the public API to integrate scheduling capabilities into your own applications, websites, or mobile apps.", + "requiredScope": "Required scope", + "readOnlyNote": "Services are read-only via the public API. Use the dashboard to create, update, or delete services." + }, + "endpoints": { + "title": "Endpoints", + "list": { + "title": "List Services", + "description": "Returns all active services ordered by" + }, + "get": { + "title": "Get Service", + "description": "Returns detailed information for a specific service by UUID." + } + }, + "object": { + "title": "Service Object", + "field": "Field", + "type": "Type", + "description": "Description", + "id": "Unique identifier for the service", + "name": "Service name (e.g., \"Haircut\", \"Oil Change\")", + "serviceDescription": "Optional detailed description of the service", + "duration": "Duration in minutes (e.g., 30, 60, 90)", + "price": "Price in dollars (null for variable pricing)", + "photos": "Array of photo URLs for the service", + "isActive": "Whether the service is currently active" + }, + "exampleResponse": { + "title": "Example Response" + }, + "codeExamples": { + "title": "Code Examples", + "listAll": "List All Services", + "getSpecific": "Get Specific Service" + } + }, + "resources": { + "title": "Resources API", + "subtitle": "Access bookable resources via the public API", + "overview": { + "title": "Overview", + "description": "The Resources API provides read-only access to your bookable resources including staff members, rooms, and equipment. Use this API to list available resources and retrieve their details.", + "requiredScope": "Required OAuth Scope", + "readOnlyNote": "Resources are read-only via the public API. To create or modify resources, use the main dashboard." + }, + "endpoints": { + "title": "Endpoints", + "list": { + "title": "List Resources", + "description": "Returns a list of all active resources in your account.", + "queryParams": "Query Parameters", + "typeFilter": "Filter by resource type (STAFF, ROOM, EQUIPMENT)" + }, + "get": { + "title": "Get Resource", + "description": "Retrieve details for a specific resource by its ID." + } + }, + "object": { + "title": "Resource Object", + "field": "Field", + "type": "Type", + "description": "Description", + "id": "Unique identifier", + "name": "Resource name", + "resourceDescription": "Resource description", + "resourceType": "Resource type object with id, name, category", + "photoUrl": "URL to resource photo", + "isActive": "Whether resource is active" + }, + "types": { + "title": "Resource Types", + "staff": "STAFF", + "staffDesc": "Team members who provide services", + "room": "ROOM", + "roomDesc": "Physical spaces for appointments", + "equipment": "EQUIPMENT", + "equipmentDesc": "Tools or equipment needed for services" + }, + "exampleResponse": { + "title": "Example Response" + }, + "codeExamples": { + "title": "Code Examples", + "listAll": "List All Resources", + "filterByType": "Filter by Type", + "getSpecific": "Get Specific Resource" + }, + "exploreMore": { + "title": "Explore More API Endpoints", + "description": "The Resources API is just one part of our comprehensive public API. View the full documentation to learn about appointments, customers, services, and more.", + "viewFullDocs": "View Full API Docs" + } + }, + "customers": { + "title": "Customers API", + "subtitle": "Manage customer records programmatically", + "overview": { + "title": "Overview", + "description": "The Customers API allows you to manage customer records in your SmoothSchedule account. Create, retrieve, update, and list customer information programmatically.", + "requiredScopes": "Required Scopes", + "readScope": "for reading", + "writeScope": "for creating/updating" + }, + "endpoints": { + "title": "Endpoints", + "list": { + "title": "List Customers", + "description": "Retrieve a paginated list of customers. Results are limited to 100 customers per request.", + "queryParams": "Query Parameters", + "emailFilter": "Filter by exact email address", + "searchFilter": "Search by name or email (partial match)" + }, + "get": { + "title": "Get Customer", + "description": "Retrieve a specific customer by their UUID." + }, + "create": { + "title": "Create Customer", + "description": "Create a new customer record.", + "requestBody": "Request Body", + "emailRequired": "Email address (must be unique)", + "nameField": "Customer's full name", + "phoneField": "Phone number", + "conflictNote": "if a customer with the email already exists." + }, + "update": { + "title": "Update Customer", + "description": "Update an existing customer's information.", + "requestBody": "Request Body", + "emailNote": "Email addresses cannot be changed after creation." + } + }, + "object": { + "title": "Customer Object", + "field": "Field", + "type": "Type", + "description": "Description", + "id": "Unique customer identifier", + "email": "Customer's email address (unique)", + "name": "Customer's full name", + "phone": "Customer's phone number", + "createdAt": "Timestamp when customer was created", + "totalAppointments": "Total number of appointments for this customer", + "lastAppointmentAt": "Timestamp of customer's most recent appointment" + }, + "exampleResponse": { + "title": "Example Response" + }, + "codeExamples": { + "title": "Code Examples", + "listAll": "List All Customers", + "search": "Search Customers", + "create": "Create Customer", + "update": "Update Customer" + } + }, + "webhooks": { + "title": "Webhooks API", + "subtitle": "Receive real-time notifications when events occur in your account", + "overview": { + "title": "Overview", + "description": "Webhooks allow your application to receive real-time notifications when events occur in your SmoothSchedule account. Instead of polling the API, webhooks POST JSON payloads to your specified endpoint whenever subscribed events happen.", + "requiredScope": "Required scope", + "format": "JSON payloads POSTed to your endpoint", + "security": "HMAC-SHA256 signature verification" + }, + "endpoints": { + "title": "API Endpoints", + "list": { + "title": "List Subscriptions", + "description": "Returns a list of all webhook subscriptions for your account." + }, + "create": { + "title": "Create Subscription", + "description": "Create a new webhook subscription. Returns the subscription including a", + "secretNote": "for signature verification.", + "requestBody": "Request Body", + "secretWarning": "The", + "secretWarningBold": "secret", + "secretWarningEnd": "is only shown once in the response. Store it securely for signature verification." + }, + "get": { + "title": "Get Subscription", + "description": "Retrieve details of a specific webhook subscription." + }, + "update": { + "title": "Update Subscription", + "description": "Update an existing webhook subscription (URL, events, or description)." + }, + "delete": { + "title": "Delete Subscription", + "description": "Delete a webhook subscription permanently." + }, + "listEvents": { + "title": "List Event Types", + "description": "Get a list of all available webhook event types." + }, + "test": { + "title": "Send Test Webhook", + "description": "Send a test webhook to verify your endpoint is working correctly." + }, + "deliveries": { + "title": "View Delivery History", + "description": "View delivery history and status for a webhook subscription." + } + }, + "events": { + "title": "Available Events", + "description": "Subscribe to one or more of these events to receive notifications:", + "event": "Event", + "eventDescription": "Description", + "appointmentCreated": "Triggered when a new appointment is created", + "appointmentUpdated": "Triggered when an appointment is updated", + "appointmentCancelled": "Triggered when an appointment is cancelled", + "customerCreated": "Triggered when a new customer is created", + "customerUpdated": "Triggered when customer information is updated", + "serviceCreated": "Triggered when a new service is created", + "serviceUpdated": "Triggered when a service is updated" + }, + "payload": { + "title": "Webhook Payload Format", + "description": "All webhook payloads follow this standard format:" + }, + "signature": { + "title": "Signature Verification", + "description": "All webhooks include an", + "headerName": "header containing an HMAC-SHA256 signature. Verify this signature to ensure the webhook came from SmoothSchedule.", + "headerTitle": "Header", + "algorithmTitle": "Algorithm", + "algorithmDesc": "HMAC-SHA256 of the raw request body using your webhook secret", + "pythonExample": "Python Example", + "nodeExample": "Node.js Example" + }, + "retry": { + "title": "Retry Policy", + "description": "If your endpoint fails to respond with a 2xx status code, SmoothSchedule will automatically retry delivery:", + "attempts": "Retry attempts", + "attemptsValue": "3 automatic retries", + "backoff": "Backoff schedule", + "backoffValue": "1 minute, 5 minutes, 30 minutes", + "autoDisable": "Auto-disable", + "autoDisableValue": "Subscription disabled after 10 consecutive failures", + "responseNote": "Your endpoint should respond within 5 seconds and return a 2xx status code to acknowledge receipt. Process the webhook asynchronously if needed." + }, + "codeExamples": { + "title": "Code Examples", + "createSubscription": "Creating a Webhook Subscription", + "handleExpress": "Handling Webhook in Express.js" + } + }, + "common": { + "required": "required", + "optional": "optional", + "returns": "Returns", + "or": "or", + "needMoreHelp": "Need More Help?", + "supportDescription": "Our support team is ready to help with any questions about the API.", + "contactSupport": "Contact Support" + } + }, "contracts": { "title": "Contracts Guide", "subtitle": "Create and manage digital contracts with e-signatures", diff --git a/frontend/src/i18n/locales/es.json b/frontend/src/i18n/locales/es.json index 2bb05aff..9ed18540 100644 --- a/frontend/src/i18n/locales/es.json +++ b/frontend/src/i18n/locales/es.json @@ -180,6 +180,452 @@ "request": "Solicitud", "response": "Respuesta" }, + "apiDocs": { + "overview": { + "title": "Resumen de API", + "subtitle": "API REST para integraciones de terceros", + "introduction": { + "title": "Introducción", + "description": "SmoothSchedule proporciona una API REST completa que te permite integrar tu plataforma de programación con aplicaciones de terceros, crear herramientas personalizadas y automatizar flujos de trabajo.", + "baseUrl": "URL Base", + "interactiveDocsTitle": "Documentación Interactiva", + "interactiveDocsDescription": "Explora y prueba los endpoints de la API en" + }, + "authentication": { + "title": "Autenticación", + "description": "Todas las solicitudes API requieren autenticación usando tokens Bearer en el encabezado Authorization.", + "tokenFormat": "Formato de Token", + "productionEnv": "Entorno de producción", + "sandboxEnv": "Entorno sandbox (seguro para pruebas)", + "exampleRequest": "Solicitud de Ejemplo", + "securityNote": "Los tokens API se crean en Configuración del Negocio → API. Cada token tiene alcances configurables que controlan el acceso a endpoints y operaciones específicas." + }, + "scopes": { + "title": "Alcances Disponibles", + "description": "Controla qué operaciones puede realizar tu token API seleccionando alcances:", + "servicesRead": "Ver servicios y precios", + "resourcesRead": "Ver recursos y personal", + "availabilityRead": "Verificar disponibilidad de franjas horarias", + "bookingsRead": "Ver citas", + "bookingsWrite": "Crear, actualizar, cancelar citas", + "customersRead": "Ver información de clientes", + "customersWrite": "Crear y actualizar clientes", + "businessRead": "Ver información del negocio", + "webhooksManage": "Gestionar suscripciones de webhooks" + }, + "rateLimiting": { + "title": "Limitación de Tasa", + "description": "Las solicitudes API están limitadas por tasa para asegurar un uso justo y la estabilidad de la plataforma:", + "globalLimit": "Límite Global", + "globalLimitValue": "1,000 solicitudes por hora", + "burstLimit": "Límite de Ráfaga", + "burstLimitValue": "100 solicitudes por minuto", + "responseHeaders": "Encabezados de Respuesta", + "headerLimit": "Máximo de solicitudes permitidas", + "headerRemaining": "Solicitudes restantes en la ventana", + "headerReset": "Marca de tiempo Unix cuando se restablece el límite" + }, + "errors": { + "title": "Respuestas de Error", + "description": "Todos los errores siguen un formato JSON consistente:", + "httpStatusCodes": "Códigos de Estado HTTP", + "code": "Código", + "status": "Estado", + "codeDescription": "Descripción", + "ok": "OK", + "okDesc": "La solicitud fue exitosa", + "created": "Creado", + "createdDesc": "Recurso creado exitosamente", + "badRequest": "Solicitud Incorrecta", + "badRequestDesc": "Datos de solicitud inválidos", + "unauthorized": "No Autorizado", + "unauthorizedDesc": "Token faltante o inválido", + "forbidden": "Prohibido", + "forbiddenDesc": "Permisos de alcance insuficientes", + "notFound": "No Encontrado", + "notFoundDesc": "El recurso no existe", + "conflict": "Conflicto", + "conflictDesc": "Conflicto de recursos (ej., doble reserva)", + "tooManyRequests": "Demasiadas Solicitudes", + "tooManyRequestsDesc": "Límite de tasa excedido", + "serverError": "Error Interno del Servidor", + "serverErrorDesc": "Error del servidor (contacta a soporte)" + }, + "sandbox": { + "title": "Modo Sandbox", + "description": "Prueba tu integración de forma segura sin afectar los datos de producción:", + "testTokens": "Tokens de Prueba", + "testTokensDesc": "funcionan solo con datos de sandbox", + "safeTesting": "Pruebas Seguras", + "safeTestingDesc": "Crea, actualiza y elimina citas de prueba sin afectar las reservas reales", + "easyToggle": "Cambio Fácil", + "easyToggleDesc": "Cambia entre modos de prueba y en vivo en Configuración del Negocio → API", + "tip": "Siempre prueba con tokens de sandbox antes de usar tokens de producción en tu aplicación." + }, + "endpoints": { + "title": "Endpoints de API", + "appointmentsTitle": "API de Citas", + "appointmentsDesc": "Crear, gestionar y consultar citas", + "servicesTitle": "API de Servicios", + "servicesDesc": "Acceder al catálogo de servicios y precios", + "resourcesTitle": "API de Recursos", + "resourcesDesc": "Datos de personal, salas y equipos", + "customersTitle": "API de Clientes", + "customersDesc": "Perfiles de clientes e información de contacto", + "webhooksTitle": "Webhooks", + "webhooksDesc": "Notificaciones de eventos en tiempo real", + "viewDocs": "Ver Documentación" + }, + "needHelp": { + "title": "¿Necesitas Más Ayuda?", + "description": "Nuestro equipo de soporte está listo para ayudarte con preguntas sobre la integración de la API.", + "contactSupport": "Contactar Soporte" + } + }, + "appointments": { + "title": "API de Citas", + "subtitle": "Gestiona citas y reservas programáticamente", + "overview": { + "title": "Resumen", + "description": "La API de Citas te permite gestionar citas, reservas y eventos de programación en tu cuenta de SmoothSchedule programáticamente. Crea, recupera, actualiza y cancela citas con control completo sobre recursos, clientes y programación.", + "requiredScopes": "Alcances OAuth Requeridos" + }, + "endpoints": { + "title": "Endpoints de API", + "list": { + "title": "Listar Citas", + "description": "Recupera una lista de citas con filtrado opcional.", + "queryParams": "Parámetros de Consulta", + "startDate": "Filtrar por fecha de inicio (AAAA-MM-DD)", + "endDate": "Filtrar por fecha de fin (AAAA-MM-DD)", + "statusFilter": "Filtrar por estado (programada, confirmada, completada, etc.)", + "customerIdFilter": "Filtrar por UUID de cliente" + }, + "get": { + "title": "Obtener Cita", + "description": "Recupera una sola cita por ID." + }, + "create": { + "title": "Crear Cita", + "description": "Crea una nueva cita.", + "requestBody": "Cuerpo de Solicitud" + }, + "update": { + "title": "Actualizar Cita", + "description": "Actualiza una cita existente.", + "partialUpdate": "Cuerpo de Solicitud (actualización parcial)" + }, + "cancel": { + "title": "Cancelar Cita", + "description": "Cancela una cita. Opcionalmente proporciona una razón de cancelación.", + "optionalBody": "Cuerpo de Solicitud (opcional)" + } + }, + "object": { + "title": "Objeto Cita", + "description": "Cada objeto de cita contiene los siguientes campos:", + "field": "Campo", + "type": "Tipo", + "fieldDescription": "Descripción", + "id": "Identificador único de la cita", + "service": "Detalles del servicio (id, nombre, duración, precio)", + "resource": "Recurso asignado (id, nombre, tipo)", + "customer": "Detalles del cliente (id, email, nombre, teléfono)", + "startTime": "Hora de inicio de la cita (UTC)", + "endTime": "Hora de fin de la cita (UTC)", + "status": "Estado actual (ver Valores de Estado abajo)", + "notes": "Notas o instrucciones adicionales", + "createdAt": "Cuándo se creó la cita" + }, + "statusValues": { + "title": "Valores de Estado", + "description": "Las citas pueden tener uno de los siguientes valores de estado:", + "scheduled": "La cita ha sido programada pero aún no confirmada", + "confirmed": "El cliente ha confirmado la cita", + "inProgress": "La cita está actualmente en progreso", + "completed": "La cita se ha completado exitosamente", + "cancelled": "La cita fue cancelada", + "noShow": "El cliente no se presentó a la cita" + }, + "exampleResponse": { + "title": "Respuesta de Ejemplo", + "description": "Un objeto de cita típico en la respuesta de la API:" + }, + "rateLimiting": { + "title": "Limitación de Tasa", + "description": "Las solicitudes API están limitadas a", + "perHour": "solicitudes por hora", + "perKey": "por clave API.", + "headersInfo": "La información del límite de tasa se incluye en los encabezados de respuesta:" + } + }, + "services": { + "title": "API de Servicios", + "subtitle": "Accede a tu catálogo de servicios a través de la API", + "overview": { + "title": "Resumen", + "description": "Accede a tu catálogo de servicios a través de la API pública para integrar capacidades de programación en tus propias aplicaciones, sitios web o aplicaciones móviles.", + "requiredScope": "Alcance requerido", + "readOnlyNote": "Los servicios son de solo lectura a través de la API pública. Usa el panel de control para crear, actualizar o eliminar servicios." + }, + "endpoints": { + "title": "Endpoints", + "list": { + "title": "Listar Servicios", + "description": "Devuelve todos los servicios activos ordenados por" + }, + "get": { + "title": "Obtener Servicio", + "description": "Devuelve información detallada para un servicio específico por UUID." + } + }, + "object": { + "title": "Objeto Servicio", + "field": "Campo", + "type": "Tipo", + "description": "Descripción", + "id": "Identificador único para el servicio", + "name": "Nombre del servicio (ej., \"Corte de Cabello\", \"Cambio de Aceite\")", + "serviceDescription": "Descripción detallada opcional del servicio", + "duration": "Duración en minutos (ej., 30, 60, 90)", + "price": "Precio en dólares (null para precios variables)", + "photos": "Array de URLs de fotos para el servicio", + "isActive": "Si el servicio está actualmente activo" + }, + "exampleResponse": { + "title": "Respuesta de Ejemplo" + }, + "codeExamples": { + "title": "Ejemplos de Código", + "listAll": "Listar Todos los Servicios", + "getSpecific": "Obtener Servicio Específico" + } + }, + "resources": { + "title": "API de Recursos", + "subtitle": "Accede a recursos reservables a través de la API pública", + "overview": { + "title": "Resumen", + "description": "La API de Recursos proporciona acceso de solo lectura a tus recursos reservables incluyendo miembros del personal, salas y equipos. Usa esta API para listar recursos disponibles y recuperar sus detalles.", + "requiredScope": "Alcance OAuth Requerido", + "readOnlyNote": "Los recursos son de solo lectura a través de la API pública. Para crear o modificar recursos, usa el panel de control principal." + }, + "endpoints": { + "title": "Endpoints", + "list": { + "title": "Listar Recursos", + "description": "Devuelve una lista de todos los recursos activos en tu cuenta.", + "queryParams": "Parámetros de Consulta", + "typeFilter": "Filtrar por tipo de recurso (STAFF, ROOM, EQUIPMENT)" + }, + "get": { + "title": "Obtener Recurso", + "description": "Recupera detalles para un recurso específico por su ID." + } + }, + "object": { + "title": "Objeto Recurso", + "field": "Campo", + "type": "Tipo", + "description": "Descripción", + "id": "Identificador único", + "name": "Nombre del recurso", + "resourceDescription": "Descripción del recurso", + "resourceType": "Objeto de tipo de recurso con id, nombre, categoría", + "photoUrl": "URL a la foto del recurso", + "isActive": "Si el recurso está activo" + }, + "types": { + "title": "Tipos de Recurso", + "staff": "STAFF", + "staffDesc": "Miembros del equipo que proporcionan servicios", + "room": "ROOM", + "roomDesc": "Espacios físicos para citas", + "equipment": "EQUIPMENT", + "equipmentDesc": "Herramientas o equipos necesarios para servicios" + }, + "exampleResponse": { + "title": "Respuesta de Ejemplo" + }, + "codeExamples": { + "title": "Ejemplos de Código", + "listAll": "Listar Todos los Recursos", + "filterByType": "Filtrar por Tipo", + "getSpecific": "Obtener Recurso Específico" + }, + "exploreMore": { + "title": "Explora Más Endpoints de API", + "description": "La API de Recursos es solo una parte de nuestra API pública completa. Ve la documentación completa para conocer sobre citas, clientes, servicios y más.", + "viewFullDocs": "Ver Documentación Completa de API" + } + }, + "customers": { + "title": "API de Clientes", + "subtitle": "Gestiona registros de clientes programáticamente", + "overview": { + "title": "Resumen", + "description": "La API de Clientes te permite gestionar registros de clientes en tu cuenta de SmoothSchedule. Crea, recupera, actualiza y lista información de clientes programáticamente.", + "requiredScopes": "Alcances Requeridos", + "readScope": "para lectura", + "writeScope": "para creación/actualización" + }, + "endpoints": { + "title": "Endpoints", + "list": { + "title": "Listar Clientes", + "description": "Recupera una lista paginada de clientes. Los resultados están limitados a 100 clientes por solicitud.", + "queryParams": "Parámetros de Consulta", + "emailFilter": "Filtrar por dirección de email exacta", + "searchFilter": "Buscar por nombre o email (coincidencia parcial)" + }, + "get": { + "title": "Obtener Cliente", + "description": "Recupera un cliente específico por su UUID." + }, + "create": { + "title": "Crear Cliente", + "description": "Crea un nuevo registro de cliente.", + "requestBody": "Cuerpo de Solicitud", + "emailRequired": "Dirección de email (debe ser única)", + "nameField": "Nombre completo del cliente", + "phoneField": "Número de teléfono", + "conflictNote": "si ya existe un cliente con el email." + }, + "update": { + "title": "Actualizar Cliente", + "description": "Actualiza la información de un cliente existente.", + "requestBody": "Cuerpo de Solicitud", + "emailNote": "Las direcciones de email no se pueden cambiar después de la creación." + } + }, + "object": { + "title": "Objeto Cliente", + "field": "Campo", + "type": "Tipo", + "description": "Descripción", + "id": "Identificador único del cliente", + "email": "Dirección de email del cliente (única)", + "name": "Nombre completo del cliente", + "phone": "Número de teléfono del cliente", + "createdAt": "Marca de tiempo cuando se creó el cliente", + "totalAppointments": "Número total de citas para este cliente", + "lastAppointmentAt": "Marca de tiempo de la cita más reciente del cliente" + }, + "exampleResponse": { + "title": "Respuesta de Ejemplo" + }, + "codeExamples": { + "title": "Ejemplos de Código", + "listAll": "Listar Todos los Clientes", + "search": "Buscar Clientes", + "create": "Crear Cliente", + "update": "Actualizar Cliente" + } + }, + "webhooks": { + "title": "API de Webhooks", + "subtitle": "Recibe notificaciones en tiempo real cuando ocurran eventos en tu cuenta", + "overview": { + "title": "Resumen", + "description": "Los webhooks permiten que tu aplicación reciba notificaciones en tiempo real cuando ocurren eventos en tu cuenta de SmoothSchedule. En lugar de hacer polling a la API, los webhooks envían cargas JSON a tu endpoint especificado cada vez que ocurren eventos suscritos.", + "requiredScope": "Alcance requerido", + "format": "Cargas JSON enviadas a tu endpoint", + "security": "Verificación de firma HMAC-SHA256" + }, + "endpoints": { + "title": "Endpoints de API", + "list": { + "title": "Listar Suscripciones", + "description": "Devuelve una lista de todas las suscripciones de webhook para tu cuenta." + }, + "create": { + "title": "Crear Suscripción", + "description": "Crea una nueva suscripción de webhook. Devuelve la suscripción incluyendo un", + "secretNote": "para verificación de firma.", + "requestBody": "Cuerpo de Solicitud", + "secretWarning": "El", + "secretWarningBold": "secreto", + "secretWarningEnd": "solo se muestra una vez en la respuesta. Guárdalo de forma segura para la verificación de firma." + }, + "get": { + "title": "Obtener Suscripción", + "description": "Recupera detalles de una suscripción de webhook específica." + }, + "update": { + "title": "Actualizar Suscripción", + "description": "Actualiza una suscripción de webhook existente (URL, eventos o descripción)." + }, + "delete": { + "title": "Eliminar Suscripción", + "description": "Elimina una suscripción de webhook permanentemente." + }, + "listEvents": { + "title": "Listar Tipos de Eventos", + "description": "Obtiene una lista de todos los tipos de eventos de webhook disponibles." + }, + "test": { + "title": "Enviar Webhook de Prueba", + "description": "Envía un webhook de prueba para verificar que tu endpoint funciona correctamente." + }, + "deliveries": { + "title": "Ver Historial de Entregas", + "description": "Ve el historial de entregas y el estado de una suscripción de webhook." + } + }, + "events": { + "title": "Eventos Disponibles", + "description": "Suscríbete a uno o más de estos eventos para recibir notificaciones:", + "event": "Evento", + "eventDescription": "Descripción", + "appointmentCreated": "Se activa cuando se crea una nueva cita", + "appointmentUpdated": "Se activa cuando se actualiza una cita", + "appointmentCancelled": "Se activa cuando se cancela una cita", + "customerCreated": "Se activa cuando se crea un nuevo cliente", + "customerUpdated": "Se activa cuando se actualiza la información del cliente", + "serviceCreated": "Se activa cuando se crea un nuevo servicio", + "serviceUpdated": "Se activa cuando se actualiza un servicio" + }, + "payload": { + "title": "Formato de Carga de Webhook", + "description": "Todas las cargas de webhook siguen este formato estándar:" + }, + "signature": { + "title": "Verificación de Firma", + "description": "Todos los webhooks incluyen un", + "headerName": "encabezado que contiene una firma HMAC-SHA256. Verifica esta firma para asegurar que el webhook provino de SmoothSchedule.", + "headerTitle": "Encabezado", + "algorithmTitle": "Algoritmo", + "algorithmDesc": "HMAC-SHA256 del cuerpo de solicitud crudo usando tu secreto de webhook", + "pythonExample": "Ejemplo en Python", + "nodeExample": "Ejemplo en Node.js" + }, + "retry": { + "title": "Política de Reintentos", + "description": "Si tu endpoint no responde con un código de estado 2xx, SmoothSchedule reintentará automáticamente la entrega:", + "attempts": "Intentos de reintento", + "attemptsValue": "3 reintentos automáticos", + "backoff": "Programación de espera", + "backoffValue": "1 minuto, 5 minutos, 30 minutos", + "autoDisable": "Desactivación automática", + "autoDisableValue": "Suscripción desactivada después de 10 fallos consecutivos", + "responseNote": "Tu endpoint debe responder dentro de 5 segundos y devolver un código de estado 2xx para confirmar la recepción. Procesa el webhook de forma asíncrona si es necesario." + }, + "codeExamples": { + "title": "Ejemplos de Código", + "createSubscription": "Creando una Suscripción de Webhook", + "handleExpress": "Manejando Webhook en Express.js" + } + }, + "common": { + "required": "requerido", + "optional": "opcional", + "returns": "Devuelve", + "or": "o", + "needMoreHelp": "¿Necesitas Más Ayuda?", + "supportDescription": "Nuestro equipo de soporte está listo para ayudar con cualquier pregunta sobre la API.", + "contactSupport": "Contactar Soporte" + } + }, "contracts": { "title": "Guía de Contratos", "subtitle": "Crea y gestiona contratos digitales con firmas electrónicas", diff --git a/frontend/src/i18n/locales/fr.json b/frontend/src/i18n/locales/fr.json index 0892fcf1..b3cdf472 100644 --- a/frontend/src/i18n/locales/fr.json +++ b/frontend/src/i18n/locales/fr.json @@ -180,6 +180,452 @@ "request": "Requête", "response": "Réponse" }, + "apiDocs": { + "overview": { + "title": "Aperçu de l'API", + "subtitle": "API REST pour les intégrations tierces", + "introduction": { + "title": "Introduction", + "description": "SmoothSchedule fournit une API REST complète qui vous permet d'intégrer votre plateforme de planification avec des applications tierces, de créer des outils personnalisés et d'automatiser les flux de travail.", + "baseUrl": "URL de Base", + "interactiveDocsTitle": "Documentation Interactive", + "interactiveDocsDescription": "Explorez et testez les points de terminaison de l'API à" + }, + "authentication": { + "title": "Authentification", + "description": "Toutes les requêtes API nécessitent une authentification à l'aide de tokens Bearer dans l'en-tête Authorization.", + "tokenFormat": "Format du Token", + "productionEnv": "Environnement de production", + "sandboxEnv": "Environnement sandbox (sûr pour les tests)", + "exampleRequest": "Exemple de Requête", + "securityNote": "Les tokens API sont créés dans Paramètres de l'Entreprise → API. Chaque token a des portées configurables qui contrôlent l'accès à des points de terminaison et opérations spécifiques." + }, + "scopes": { + "title": "Portées Disponibles", + "description": "Contrôlez les opérations que votre token API peut effectuer en sélectionnant les portées :", + "servicesRead": "Afficher les services et les tarifs", + "resourcesRead": "Afficher les ressources et le personnel", + "availabilityRead": "Vérifier la disponibilité des créneaux horaires", + "bookingsRead": "Afficher les rendez-vous", + "bookingsWrite": "Créer, mettre à jour, annuler des rendez-vous", + "customersRead": "Afficher les informations clients", + "customersWrite": "Créer et mettre à jour des clients", + "businessRead": "Afficher les informations de l'entreprise", + "webhooksManage": "Gérer les abonnements webhook" + }, + "rateLimiting": { + "title": "Limitation de Taux", + "description": "Les requêtes API sont limitées en taux pour garantir une utilisation équitable et la stabilité de la plateforme :", + "globalLimit": "Limite Globale", + "globalLimitValue": "1 000 requêtes par heure", + "burstLimit": "Limite de Rafale", + "burstLimitValue": "100 requêtes par minute", + "responseHeaders": "En-têtes de Réponse", + "headerLimit": "Requêtes maximales autorisées", + "headerRemaining": "Requêtes restantes dans la fenêtre", + "headerReset": "Horodatage Unix de réinitialisation de la limite" + }, + "errors": { + "title": "Réponses d'Erreur", + "description": "Toutes les erreurs suivent un format JSON cohérent :", + "httpStatusCodes": "Codes de Statut HTTP", + "code": "Code", + "status": "Statut", + "codeDescription": "Description", + "ok": "OK", + "okDesc": "La requête a réussi", + "created": "Créé", + "createdDesc": "Ressource créée avec succès", + "badRequest": "Requête Invalide", + "badRequestDesc": "Données de requête invalides", + "unauthorized": "Non Autorisé", + "unauthorizedDesc": "Token manquant ou invalide", + "forbidden": "Interdit", + "forbiddenDesc": "Permissions de portée insuffisantes", + "notFound": "Non Trouvé", + "notFoundDesc": "La ressource n'existe pas", + "conflict": "Conflit", + "conflictDesc": "Conflit de ressource (par ex., double réservation)", + "tooManyRequests": "Trop de Requêtes", + "tooManyRequestsDesc": "Limite de taux dépassée", + "serverError": "Erreur Serveur Interne", + "serverErrorDesc": "Erreur serveur (contactez le support)" + }, + "sandbox": { + "title": "Mode Sandbox", + "description": "Testez votre intégration en toute sécurité sans affecter les données de production :", + "testTokens": "Tokens de Test", + "testTokensDesc": "fonctionnent uniquement avec les données sandbox", + "safeTesting": "Tests Sécurisés", + "safeTestingDesc": "Créez, mettez à jour et supprimez des rendez-vous de test sans affecter les réservations réelles", + "easyToggle": "Basculement Facile", + "easyToggleDesc": "Basculez entre les modes test et production dans Paramètres de l'Entreprise → API", + "tip": "Testez toujours avec des tokens sandbox avant d'utiliser des tokens de production dans votre application." + }, + "endpoints": { + "title": "Points de Terminaison de l'API", + "appointmentsTitle": "API Rendez-vous", + "appointmentsDesc": "Créer, gérer et interroger des rendez-vous", + "servicesTitle": "API Services", + "servicesDesc": "Accéder au catalogue de services et aux tarifs", + "resourcesTitle": "API Ressources", + "resourcesDesc": "Données du personnel, des salles et de l'équipement", + "customersTitle": "API Clients", + "customersDesc": "Profils clients et coordonnées", + "webhooksTitle": "Webhooks", + "webhooksDesc": "Notifications d'événements en temps réel", + "viewDocs": "Voir la Documentation" + }, + "needHelp": { + "title": "Besoin d'Aide Supplémentaire ?", + "description": "Notre équipe de support est prête à vous aider pour les questions d'intégration API.", + "contactSupport": "Contacter le Support" + } + }, + "appointments": { + "title": "API Rendez-vous", + "subtitle": "Gérer les rendez-vous et réservations de manière programmable", + "overview": { + "title": "Aperçu", + "description": "L'API Rendez-vous vous permet de gérer de manière programmable les rendez-vous, les réservations et les événements de planification dans votre compte SmoothSchedule. Créez, récupérez, mettez à jour et annulez des rendez-vous avec un contrôle total sur les ressources, les clients et la planification.", + "requiredScopes": "Portées OAuth Requises" + }, + "endpoints": { + "title": "Points de Terminaison de l'API", + "list": { + "title": "Lister les Rendez-vous", + "description": "Récupérer une liste de rendez-vous avec filtrage optionnel.", + "queryParams": "Paramètres de Requête", + "startDate": "Filtrer par date de début (AAAA-MM-JJ)", + "endDate": "Filtrer par date de fin (AAAA-MM-JJ)", + "statusFilter": "Filtrer par statut (planifié, confirmé, terminé, etc.)", + "customerIdFilter": "Filtrer par UUID du client" + }, + "get": { + "title": "Obtenir un Rendez-vous", + "description": "Récupérer un seul rendez-vous par ID." + }, + "create": { + "title": "Créer un Rendez-vous", + "description": "Créer un nouveau rendez-vous.", + "requestBody": "Corps de la Requête" + }, + "update": { + "title": "Mettre à Jour un Rendez-vous", + "description": "Mettre à jour un rendez-vous existant.", + "partialUpdate": "Corps de la Requête (mise à jour partielle)" + }, + "cancel": { + "title": "Annuler un Rendez-vous", + "description": "Annuler un rendez-vous. Fournir optionnellement une raison d'annulation.", + "optionalBody": "Corps de la Requête (optionnel)" + } + }, + "object": { + "title": "Objet Rendez-vous", + "description": "Chaque objet rendez-vous contient les champs suivants :", + "field": "Champ", + "type": "Type", + "fieldDescription": "Description", + "id": "Identifiant unique du rendez-vous", + "service": "Détails du service (id, nom, durée, prix)", + "resource": "Ressource assignée (id, nom, type)", + "customer": "Détails du client (id, email, nom, téléphone)", + "startTime": "Heure de début du rendez-vous (UTC)", + "endTime": "Heure de fin du rendez-vous (UTC)", + "status": "Statut actuel (voir Valeurs de Statut ci-dessous)", + "notes": "Notes ou instructions supplémentaires", + "createdAt": "Date de création du rendez-vous" + }, + "statusValues": { + "title": "Valeurs de Statut", + "description": "Les rendez-vous peuvent avoir l'une des valeurs de statut suivantes :", + "scheduled": "Le rendez-vous a été planifié mais pas encore confirmé", + "confirmed": "Le client a confirmé le rendez-vous", + "inProgress": "Le rendez-vous est actuellement en cours", + "completed": "Le rendez-vous a été terminé avec succès", + "cancelled": "Le rendez-vous a été annulé", + "noShow": "Le client ne s'est pas présenté au rendez-vous" + }, + "exampleResponse": { + "title": "Exemple de Réponse", + "description": "Un objet rendez-vous typique dans la réponse de l'API :" + }, + "rateLimiting": { + "title": "Limitation de Taux", + "description": "Les requêtes API sont limitées à", + "perHour": "requêtes par heure", + "perKey": "par clé API.", + "headersInfo": "Les informations de limite de taux sont incluses dans les en-têtes de réponse :" + } + }, + "services": { + "title": "API Services", + "subtitle": "Accédez à votre catalogue de services via l'API", + "overview": { + "title": "Aperçu", + "description": "Accédez à votre catalogue de services via l'API publique pour intégrer les capacités de planification dans vos propres applications, sites web ou applications mobiles.", + "requiredScope": "Portée requise", + "readOnlyNote": "Les services sont en lecture seule via l'API publique. Utilisez le tableau de bord pour créer, mettre à jour ou supprimer des services." + }, + "endpoints": { + "title": "Points de Terminaison", + "list": { + "title": "Lister les Services", + "description": "Renvoie tous les services actifs triés par" + }, + "get": { + "title": "Obtenir un Service", + "description": "Renvoie des informations détaillées pour un service spécifique par UUID." + } + }, + "object": { + "title": "Objet Service", + "field": "Champ", + "type": "Type", + "description": "Description", + "id": "Identifiant unique du service", + "name": "Nom du service (par ex., \"Coupe de cheveux\", \"Vidange d'huile\")", + "serviceDescription": "Description détaillée optionnelle du service", + "duration": "Durée en minutes (par ex., 30, 60, 90)", + "price": "Prix en dollars (null pour tarification variable)", + "photos": "Tableau d'URLs de photos du service", + "isActive": "Indique si le service est actuellement actif" + }, + "exampleResponse": { + "title": "Exemple de Réponse" + }, + "codeExamples": { + "title": "Exemples de Code", + "listAll": "Lister Tous les Services", + "getSpecific": "Obtenir un Service Spécifique" + } + }, + "resources": { + "title": "API Ressources", + "subtitle": "Accédez aux ressources réservables via l'API publique", + "overview": { + "title": "Aperçu", + "description": "L'API Ressources fournit un accès en lecture seule à vos ressources réservables, y compris les membres du personnel, les salles et l'équipement. Utilisez cette API pour lister les ressources disponibles et récupérer leurs détails.", + "requiredScope": "Portée OAuth Requise", + "readOnlyNote": "Les ressources sont en lecture seule via l'API publique. Pour créer ou modifier des ressources, utilisez le tableau de bord principal." + }, + "endpoints": { + "title": "Points de Terminaison", + "list": { + "title": "Lister les Ressources", + "description": "Renvoie une liste de toutes les ressources actives dans votre compte.", + "queryParams": "Paramètres de Requête", + "typeFilter": "Filtrer par type de ressource (STAFF, ROOM, EQUIPMENT)" + }, + "get": { + "title": "Obtenir une Ressource", + "description": "Récupérer les détails d'une ressource spécifique par son ID." + } + }, + "object": { + "title": "Objet Ressource", + "field": "Champ", + "type": "Type", + "description": "Description", + "id": "Identifiant unique", + "name": "Nom de la ressource", + "resourceDescription": "Description de la ressource", + "resourceType": "Objet type de ressource avec id, nom, catégorie", + "photoUrl": "URL de la photo de la ressource", + "isActive": "Indique si la ressource est active" + }, + "types": { + "title": "Types de Ressources", + "staff": "STAFF", + "staffDesc": "Membres de l'équipe qui fournissent des services", + "room": "ROOM", + "roomDesc": "Espaces physiques pour les rendez-vous", + "equipment": "EQUIPMENT", + "equipmentDesc": "Outils ou équipements nécessaires pour les services" + }, + "exampleResponse": { + "title": "Exemple de Réponse" + }, + "codeExamples": { + "title": "Exemples de Code", + "listAll": "Lister Toutes les Ressources", + "filterByType": "Filtrer par Type", + "getSpecific": "Obtenir une Ressource Spécifique" + }, + "exploreMore": { + "title": "Explorer Plus de Points de Terminaison de l'API", + "description": "L'API Ressources n'est qu'une partie de notre API publique complète. Consultez la documentation complète pour en savoir plus sur les rendez-vous, les clients, les services et bien plus encore.", + "viewFullDocs": "Voir la Documentation Complète de l'API" + } + }, + "customers": { + "title": "API Clients", + "subtitle": "Gérer les enregistrements clients de manière programmable", + "overview": { + "title": "Aperçu", + "description": "L'API Clients vous permet de gérer les enregistrements clients dans votre compte SmoothSchedule. Créez, récupérez, mettez à jour et listez les informations clients de manière programmable.", + "requiredScopes": "Portées Requises", + "readScope": "pour la lecture", + "writeScope": "pour la création/mise à jour" + }, + "endpoints": { + "title": "Points de Terminaison", + "list": { + "title": "Lister les Clients", + "description": "Récupérer une liste paginée de clients. Les résultats sont limités à 100 clients par requête.", + "queryParams": "Paramètres de Requête", + "emailFilter": "Filtrer par adresse email exacte", + "searchFilter": "Rechercher par nom ou email (correspondance partielle)" + }, + "get": { + "title": "Obtenir un Client", + "description": "Récupérer un client spécifique par son UUID." + }, + "create": { + "title": "Créer un Client", + "description": "Créer un nouvel enregistrement client.", + "requestBody": "Corps de la Requête", + "emailRequired": "Adresse email (doit être unique)", + "nameField": "Nom complet du client", + "phoneField": "Numéro de téléphone", + "conflictNote": "si un client avec cet email existe déjà." + }, + "update": { + "title": "Mettre à Jour un Client", + "description": "Mettre à jour les informations d'un client existant.", + "requestBody": "Corps de la Requête", + "emailNote": "Les adresses email ne peuvent pas être modifiées après la création." + } + }, + "object": { + "title": "Objet Client", + "field": "Champ", + "type": "Type", + "description": "Description", + "id": "Identifiant unique du client", + "email": "Adresse email du client (unique)", + "name": "Nom complet du client", + "phone": "Numéro de téléphone du client", + "createdAt": "Horodatage de création du client", + "totalAppointments": "Nombre total de rendez-vous pour ce client", + "lastAppointmentAt": "Horodatage du rendez-vous le plus récent du client" + }, + "exampleResponse": { + "title": "Exemple de Réponse" + }, + "codeExamples": { + "title": "Exemples de Code", + "listAll": "Lister Tous les Clients", + "search": "Rechercher des Clients", + "create": "Créer un Client", + "update": "Mettre à Jour un Client" + } + }, + "webhooks": { + "title": "API Webhooks", + "subtitle": "Recevoir des notifications en temps réel lorsque des événements se produisent dans votre compte", + "overview": { + "title": "Aperçu", + "description": "Les webhooks permettent à votre application de recevoir des notifications en temps réel lorsque des événements se produisent dans votre compte SmoothSchedule. Au lieu d'interroger l'API, les webhooks POSTent des charges JSON à votre point de terminaison spécifié chaque fois que des événements auxquels vous êtes abonné se produisent.", + "requiredScope": "Portée requise", + "format": "Charges JSON POSTées à votre point de terminaison", + "security": "Vérification de signature HMAC-SHA256" + }, + "endpoints": { + "title": "Points de Terminaison de l'API", + "list": { + "title": "Lister les Abonnements", + "description": "Renvoie une liste de tous les abonnements webhook pour votre compte." + }, + "create": { + "title": "Créer un Abonnement", + "description": "Créer un nouvel abonnement webhook. Renvoie l'abonnement incluant un", + "secretNote": "pour la vérification de signature.", + "requestBody": "Corps de la Requête", + "secretWarning": "Le", + "secretWarningBold": "secret", + "secretWarningEnd": "n'est affiché qu'une seule fois dans la réponse. Conservez-le en sécurité pour la vérification de signature." + }, + "get": { + "title": "Obtenir un Abonnement", + "description": "Récupérer les détails d'un abonnement webhook spécifique." + }, + "update": { + "title": "Mettre à Jour un Abonnement", + "description": "Mettre à jour un abonnement webhook existant (URL, événements ou description)." + }, + "delete": { + "title": "Supprimer un Abonnement", + "description": "Supprimer définitivement un abonnement webhook." + }, + "listEvents": { + "title": "Lister les Types d'Événements", + "description": "Obtenir une liste de tous les types d'événements webhook disponibles." + }, + "test": { + "title": "Envoyer un Webhook de Test", + "description": "Envoyer un webhook de test pour vérifier que votre point de terminaison fonctionne correctement." + }, + "deliveries": { + "title": "Voir l'Historique de Livraison", + "description": "Voir l'historique et le statut de livraison d'un abonnement webhook." + } + }, + "events": { + "title": "Événements Disponibles", + "description": "Abonnez-vous à un ou plusieurs de ces événements pour recevoir des notifications :", + "event": "Événement", + "eventDescription": "Description", + "appointmentCreated": "Déclenché lorsqu'un nouveau rendez-vous est créé", + "appointmentUpdated": "Déclenché lorsqu'un rendez-vous est mis à jour", + "appointmentCancelled": "Déclenché lorsqu'un rendez-vous est annulé", + "customerCreated": "Déclenché lorsqu'un nouveau client est créé", + "customerUpdated": "Déclenché lorsque les informations d'un client sont mises à jour", + "serviceCreated": "Déclenché lorsqu'un nouveau service est créé", + "serviceUpdated": "Déclenché lorsqu'un service est mis à jour" + }, + "payload": { + "title": "Format de Charge Webhook", + "description": "Toutes les charges webhook suivent ce format standard :" + }, + "signature": { + "title": "Vérification de Signature", + "description": "Tous les webhooks incluent un", + "headerName": "en-tête contenant une signature HMAC-SHA256. Vérifiez cette signature pour vous assurer que le webhook provient de SmoothSchedule.", + "headerTitle": "En-tête", + "algorithmTitle": "Algorithme", + "algorithmDesc": "HMAC-SHA256 du corps de requête brut utilisant votre secret webhook", + "pythonExample": "Exemple Python", + "nodeExample": "Exemple Node.js" + }, + "retry": { + "title": "Politique de Nouvelle Tentative", + "description": "Si votre point de terminaison ne répond pas avec un code de statut 2xx, SmoothSchedule réessaiera automatiquement la livraison :", + "attempts": "Tentatives de nouvelle tentative", + "attemptsValue": "3 nouvelles tentatives automatiques", + "backoff": "Calendrier de temporisation", + "backoffValue": "1 minute, 5 minutes, 30 minutes", + "autoDisable": "Désactivation automatique", + "autoDisableValue": "Abonnement désactivé après 10 échecs consécutifs", + "responseNote": "Votre point de terminaison doit répondre dans les 5 secondes et renvoyer un code de statut 2xx pour accuser réception. Traitez le webhook de manière asynchrone si nécessaire." + }, + "codeExamples": { + "title": "Exemples de Code", + "createSubscription": "Créer un Abonnement Webhook", + "handleExpress": "Gérer le Webhook dans Express.js" + } + }, + "common": { + "required": "requis", + "optional": "optionnel", + "returns": "Renvoie", + "or": "ou", + "needMoreHelp": "Besoin d'Aide Supplémentaire ?", + "supportDescription": "Notre équipe de support est prête à vous aider pour toute question concernant l'API.", + "contactSupport": "Contacter le Support" + } + }, "contracts": { "overview": { "title": "Système de Contrats et Signature Électronique",