# Reset Ultra > API de prospection et de suivi commercial (prospects, rendez-vous, appels, quotas) pour les comptes Reset Ultra. Base : https://app.reset-ultra.com ## Authentification Une clé par compte, générée depuis l'application (page « Mon API »). Elle n'est affichée qu'une fois, à sa création. Elle voyage UNIQUEMENT en en-tête : jamais dans l'URL, jamais dans le corps. Une clé ne fonctionne que tant que l'abonnement du compte est actif. - En-tête : X-API-Key: - Alternative : Authorization: Bearer - Forme : ru_live_ ## Limites - Lectures : 240 par heure et par clé. - Poussées : 60 par heure et 500 par jour et par clé. - Les compteurs sont par clé : une clé saturée ne punit jamais la voisine. Dépassement = 429. ## Endpoints ### GET /api/v1/me Identité derrière la clé, les limites publiées de l'API et la liste des endpoints. C'est le point de départ : gratuit, aucune donnée métier. Réponse : ```json { "ok": true, "user_id": "11111111-1111-4111-8111-111111111111", "limites": { "lectures_par_heure": 240, "poussees_par_heure": 60, "poussees_par_jour": 500 }, "endpoints": { "GET /api/v1/me": "identité derrière la clé", "GET /api/v1/prospects": "les prospects de ton organisation, paginés et filtrables" } } ``` Codes : 200, 401, 429, 503. ### GET /api/v1/infos Les 50 dernières infos poussées dans le compte, de la plus récente à la plus ancienne. Réponse : ```json { "ok": true, "infos": [ { "id": "22222222-2222-4222-8222-222222222222", "titre": "Rappel", "contenu": "Relancer la salle de sport de Montreuil", "source": "api", "cree_le": "2026-10-03T09:12:44.000Z" } ] } ``` Codes : 200, 401, 429, 502, 503. ### POST /api/v1/infos Enregistre une note dans le compte titulaire de la clé. Répond 201 une fois enregistrée. - `contenu` (string, requis) : Le texte de l'info, 1 à 4000 caractères (après trim). - `titre` (string, optionnel) : Titre court, 120 caractères maximum. - `source` (string, optionnel) : Étiquette d'origine, 60 caractères maximum (défaut : api). Réponse : ```json { "ok": true } ``` Codes : 201, 400, 401, 429, 502, 503. ### GET /api/v1/clients Les clients agence de l'organisation du titulaire, ordre alphabétique, 100 au maximum. Les jetons de partage et la fiche détaillée ne sortent jamais. Réponse : ```json { "ok": true, "clients": [ { "id": "33333333-3333-4333-8333-333333333333", "slug": "salle-de-sport-montreuil", "nom": "Salle de sport Montreuil", "marque": "MTR", "metier": "fitness", "statut": "actif", "cree_le": "2026-09-12" } ] } ``` Codes : 200, 401, 429, 502, 503. ### GET /api/v1/rdv Les rendez-vous des prospects de l'organisation (ceux qui portent une date), du plus récent au plus ancien, 200 au maximum. Les fiches en corbeille sont exclues. Réponse : ```json { "ok": true, "rdv": [ { "id": "44444444-4444-4444-8444-444444444444", "rdv_at": "2026-10-07T14:00:00.000Z", "statut": "rdv_booke", "prenom": "Camille", "nom": "Roux", "societe": "Studio Yoga", "telephone": "0612345678", "niche": "salles-de-sport", "assigned_to": "55555555-5555-4555-8555-555555555555" } ] } ``` Codes : 200, 401, 429, 502, 503. ### GET /api/v1/appels Les appels du titulaire de la clé, du plus récent au plus ancien, 100 au maximum. Métadonnées et scores seulement : ni transcript, ni audio. Les traces d'upload vidéo non abouti sont exclues. Réponse : ```json { "ok": true, "appels": [ { "id": 9012, "created_at": "2026-10-03T08:05:11.000Z", "issue": "rdv", "duree_s": 245, "score_fond": 72, "score_forme": 65, "part_eleve_pct": 48, "niche": "salles-de-sport", "script_nom": "Accroche v2", "prospect_nom": "Camille Roux", "prospect_tel": "0612345678" } ] } ``` Codes : 200, 401, 429, 502, 503. ### GET /api/v1/prospects Les prospects de l'organisation du titulaire, du plus récent au plus ancien, 100 par page au maximum. Les fiches en corbeille sont exclues. Les filtres s'appliquent EN BASE : la page rendue correspond toujours au filtre demandé. - `page` (integer, optionnel, défaut 1) : Page à lire, à partir de 1. - `limit` (integer, optionnel, défaut 50) : Taille d'une page, de 1 à 100. - `q` (string, optionnel) : Recherche partielle et insensible à la casse sur le NOM du prospect (60 caractères maximum). - `statut` (string, optionnel) : Filtre exact sur le statut du pipeline (40 caractères maximum). Réponse : ```json { "ok": true, "prospects": [ { "id": "66666666-6666-4666-8666-666666666666", "prenom": "Camille", "nom": "Roux", "societe": "Studio Yoga", "telephone": "0612345678", "statut": "a_appeler", "rdv_at": null, "niche": "salles-de-sport", "created_at": "2026-10-02T18:41:03.000Z" } ], "pagination": { "page": 1, "limit": 50, "total": 128, "pages": 3, "has_more": true }, "filtre": { "q": null, "statut": null } } ``` Codes : 200, 400, 401, 429, 502, 503. ### GET /api/v1/limites Deux blocs : `api` = les plafonds publiés de l'API v1 (les mêmes que /api/v1/me), `credits` = le forfait de l'organisation sur le cycle courant (plafond, consommé, réservé, restant). Un forfait illisible rend `credits: null` avec un message, jamais un faux zéro. Réponse : ```json { "ok": true, "organisation": true, "credits": { "plafond": 2500, "consomme": 420, "reserve": 60, "restant": 2020, "bonus": 0 }, "api": { "lectures_par_heure": 240, "poussees_par_heure": 60, "poussees_par_jour": 500, "fenetre_heure_s": 3600, "fenetre_jour_s": 86400 } } ``` Codes : 200, 401, 429, 502, 503. ## Erreurs Toute erreur a la forme { "ok": false, "message": "..." }. - 400 Corps ou paramètre invalide : Le corps JSON ou l'un des paramètres de requête ne passe pas la validation : la réponse nomme le champ fautif. - 401 Clé absente, invalide ou inactive : Clé API absente, invalide ou inactive : envoie une clé valide dans l'en-tête X-API-Key, avec un abonnement actif. - 429 Quota dépassé : Les 240 lectures par heure et par clé (fenêtre d'une heure) et les 60 poussées par heure / 500 par jour sont dépassées : la réponse dit la fenêtre exacte, jamais un refus nu. - 502 Lecture impossible : Lecture impossible : réessaie dans un instant. - 503 Accès invérifiable : Vérification de ton accès impossible pour le moment. Réessaie dans un instant : rien n'a été modifié.