# Rustine docs > Rustine scanne la sécurité d'un site ou d'un dépôt GitHub, donne un score sur 100 et, pour chaque problème, un correctif prêt à coller dans ton agent de code. Cette doc couvre l'API REST v1 (https://api.rustine.io/v1) et le serveur MCP (https://mcp.rustine.io). Authentification : en-tête `Authorization: Bearer rst_…` (clé créée dans l'app, offre Pro ou essai Solo), jamais dans l'adresse. Erreurs : `{"error":{"type","code","message","doc_url"}}`. Listes : `{"object":"list","data","has_more"}`. Rustine ne scanne que les sites de tes projets, en lecture seule, et ne modifie jamais ton code. ## Démarrer - [Introduction](https://docs.rustine.io/index.md): L'API et le serveur MCP de Rustine. Ton code ou ton agent lance les scans, lit les problèmes et récupère les correctifs, sans passer par l'app. - [Premier appel en 2 minutes](https://docs.rustine.io/quickstart.md): Crée une clé, range-la dans une variable d'environnement et appelle l'API. Puis lance ton premier scan. - [Authentification](https://docs.rustine.io/authentication.md): Une clé rst_ dans l'en-tête Authorization pour tes scripts, OAuth pour les agents. Jamais de clé dans une adresse. - [Erreurs](https://docs.rustine.io/api/errors.md): Le format des erreurs, quand réessayer, et chaque code que l'API peut renvoyer. - [Pagination](https://docs.rustine.io/pagination.md): Les listes arrivent par pages. limit fixe la taille, starting_after reprend après le dernier élément, has_more dit s'il en reste. - [Limites et quotas](https://docs.rustine.io/rate-limits.md): 120 requêtes par minute et par clé, les quotas de ton offre sur chaque période, et les quelques plafonds qui protègent Rustine et les sites scannés. - [Idempotence](https://docs.rustine.io/idempotency.md): Envoie une Idempotency-Key avec tes POST. Si la requête est rejouée (timeout, CI relancée), Rustine renvoie la première réponse au lieu de refaire l'action. - [Versions](https://docs.rustine.io/versioning.md): L'API est en v1. Ce qui peut changer sans prévenir (des ajouts), ce qui ne changera jamais dans la v1, et l'en-tête Rustine-Version. - [Accès](https://docs.rustine.io/access.md): L'API et le serveur MCP sont inclus dans l'offre Pro, et à l'essai pendant 14 jours sur l'offre Solo. ## API - [Référence de l'API](https://docs.rustine.io/api.md): L'adresse, les formats et les conventions communes à toutes les routes de l'API v1, puis chaque route une par une. ## API · Projets - [Lister les projets](https://docs.rustine.io/api/projects/list.md): Tes projets, avec leurs sites, leur score sur 100 et leurs problèmes ouverts. Les identifiants des sites (targets[].id) servent à lancer un scan. - [Créer un projet](https://docs.rustine.io/api/projects/create.md): Crée un projet, avec l'adresse de son premier site si tu la donnes. Le site n'est pas encore prouvé : tu peux y lancer un scan quick tout de suite, l'audit complet attendra la preuve. - [Lire un projet](https://docs.rustine.io/api/projects/get.md): Un projet, ses sites et son dernier score. Pratique après un scan pour voir la note bouger. - [Ajouter un site](https://docs.rustine.io/api/projects/add-site.md): Ajoute une adresse à un projet : un sous-domaine (app., api.) ou un autre domaine du même produit. ## API · Scans - [Lancer un scan](https://docs.rustine.io/api/scans/create.md): Démarre un scan sur un site de ton projet, ou une analyse sur un dépôt GitHub. Le scan tourne en arrière-plan : la réponse arrive tout de suite (201, statut queued) et tu suis l'avancement avec Suivre un scan. - [Suivre un scan](https://docs.rustine.io/api/scans/get.md): Où en est un scan. Interroge cette route toutes les 3 à 5 secondes jusqu'à done ou failed ; un scan rapide prend en général moins d'une minute. - [Historique des scans](https://docs.rustine.io/api/scans/list.md): Les scans d'un projet, du plus récent au plus ancien. La profondeur de l'historique dépend de ton offre. ## API · Problèmes - [Lister les problèmes](https://docs.rustine.io/api/issues/list.md): Les problèmes d'un projet, du plus grave au moins grave, avec leur niveau de confiance. Filtre par statut, gravité ou site. - [Lire un problème](https://docs.rustine.io/api/issues/get.md): Un problème avec sa gravité, ce que Rustine a observé et l'endroit où il l'a vu. Le correctif se demande à part, avec Débloquer le correctif. - [Débloquer le correctif](https://docs.rustine.io/api/issues/unlock-fix.md): Débloque le correctif d'un problème et le renvoie : un prompt écrit pour ton agent de code, à coller dans Cursor, Claude Code ou Lovable. - [Relire le correctif](https://docs.rustine.io/api/issues/fix.md): Relit un correctif déjà débloqué, sans rien décompter. S'il n'est pas encore débloqué, la réponse est 404 fix_locked et rien n'est débloqué : passe par Débloquer le correctif. - [Revérifier](https://docs.rustine.io/api/issues/recheck.md): Refait le même contrôle au même endroit, sur ton site en ligne, juste après ton déploiement. Pour un dépôt, Rustine relance une analyse de la branche par défaut (pending, avec son scan_id). - [Marquer un problème](https://docs.rustine.io/api/issues/update.md): Marque un problème comme faux positif ou risque accepté, ou le rouvre. La raison s'affiche dans l'app avec le nom de ta clé. ## API · Compte - [Ton offre et tes quotas](https://docs.rustine.io/api/account.md): Ton offre, l'accès à l'API, et ce qu'il te reste sur la période en scans rapides, audits et correctifs. Appelle-la avant une boucle de scans pour ne pas buter sur un 402. ## MCP - [Brancher ton agent](https://docs.rustine.io/mcp/connect.md): Claude, ChatGPT, Claude Code, Cursor ou VS Code se branchent sur https://mcp.rustine.io, avec OAuth ou une clé d'API. - [Les outils](https://docs.rustine.io/mcp/tools.md): Les six outils du serveur MCP, leurs paramètres et ce qu'ils coûtent. Lire est gratuit, débloquer un correctif décompte un correctif. - [Depuis un script](https://docs.rustine.io/mcp/scripts.md): Appelle le serveur MCP sans agent, avec curl et une clé d'API. Sans état, en POST, en SSE ou en JSON simple. ## Nouveautés - [Changelog](https://docs.rustine.io/changelog.md): Ce qui change dans l'API, le serveur MCP et cette doc. Les ajouts arrivent sans casser la v1. ## English Rustine scans the security of a site or a GitHub repository, gives a score out of 100 and, for each issue, a fix ready to paste into your coding agent. These docs cover the REST API v1 (https://api.rustine.io/v1) and the MCP server (https://mcp.rustine.io). Authentication: header `Authorization: Bearer rst_…` (a key created in the app, Pro plan or Solo trial), never in the address. Errors: `{"error":{"type","code","message","doc_url"}}`. Lists: `{"object":"list","data","has_more"}`. Rustine only scans the sites of your projects, read-only, and never edits your code. ### Get started - [Introduction](https://docs.rustine.io/en.md): Rustine's API and MCP server. Your code or your agent starts scans, reads issues and gets fixes, without going through the app. - [First call in 2 minutes](https://docs.rustine.io/en/quickstart.md): Create a key, keep it in an environment variable and call the API. Then start your first scan. - [Authentication](https://docs.rustine.io/en/authentication.md): An rst_ key in the Authorization header for your scripts, OAuth for agents. Never a key in an address. - [Errors](https://docs.rustine.io/en/api/errors.md): The error format, when to retry, and every code the API can return. - [Pagination](https://docs.rustine.io/en/pagination.md): Lists come in pages. limit sets the size, starting_after resumes after the last item, has_more says whether more are left. - [Rate limits and quotas](https://docs.rustine.io/en/rate-limits.md): 120 requests per minute per key, your plan's quotas for each period, and the few ceilings that protect Rustine and the scanned sites. - [Idempotency](https://docs.rustine.io/en/idempotency.md): Send an Idempotency-Key with your POSTs. If the request is replayed (timeout, CI rerun), Rustine returns the first answer instead of doing the action again. - [Versions](https://docs.rustine.io/en/versioning.md): The API is at v1. What may change without notice (additions), what will never change within v1, and the Rustine-Version header. - [Access](https://docs.rustine.io/en/access.md): The API and the MCP server are included in the Pro plan, and on trial for 14 days on the Solo plan. ### API - [API reference](https://docs.rustine.io/en/api.md): The address, formats and conventions shared by every route of API v1, then each route one by one. ### API · Projects - [List projects](https://docs.rustine.io/en/api/projects/list.md): Your projects, with their sites, their score out of 100 and their open issues. The site ids (targets[].id) are what you pass to start a scan. - [Create a project](https://docs.rustine.io/en/api/projects/create.md): Creates a project, with the address of its first site if you give one. The site is not proved yet: you can run a quick scan on it right away, the full audit waits for the proof. - [Get a project](https://docs.rustine.io/en/api/projects/get.md): One project, its sites and its latest score. Handy after a scan to watch the grade move. - [Add a site](https://docs.rustine.io/en/api/projects/add-site.md): Adds an address to a project: a subdomain (app., api.) or another domain of the same product. ### API · Scans - [Start a scan](https://docs.rustine.io/en/api/scans/create.md): Starts a scan of one of your project's sites, or an analysis of a GitHub repository. The scan runs in the background: the answer comes back at once (201, status queued) and you follow it with Get a scan. - [Get a scan](https://docs.rustine.io/en/api/scans/get.md): Where a scan stands. Poll this route every 3 to 5 seconds until done or failed; a quick scan usually takes less than a minute. - [List a project's scans](https://docs.rustine.io/en/api/scans/list.md): A project's scans, newest first. How far back it goes depends on your plan. ### API · Issues - [List issues](https://docs.rustine.io/en/api/issues/list.md): A project's issues, worst first, with how sure Rustine is. Filter by status, severity or site. - [Get an issue](https://docs.rustine.io/en/api/issues/get.md): One issue with its severity, what Rustine observed and where it saw it. The fix is asked for separately, with Unlock the fix. - [Unlock the fix](https://docs.rustine.io/en/api/issues/unlock-fix.md): Unlocks the fix of an issue and returns it: a prompt written for your coding agent, to paste into Cursor, Claude Code or Lovable. - [Read a fix](https://docs.rustine.io/en/api/issues/fix.md): Reads a fix you already unlocked, at no cost. If it is not unlocked yet, the answer is 404 fix_locked and nothing is unlocked: use Unlock the fix. - [Recheck an issue](https://docs.rustine.io/en/api/issues/recheck.md): Runs the same check at the same place on your live site, right after your deploy. For a repository, Rustine starts a new analysis of the default branch (pending, with its scan_id). - [Mark an issue](https://docs.rustine.io/en/api/issues/update.md): Marks an issue as a false positive or an accepted risk, or opens it again. The reason shows in the app with your key's name. ### API · Account - [Your plan and quotas](https://docs.rustine.io/en/api/account.md): Your plan, your API access, and what you have left this period in quick scans, audits and fixes. Call it before a loop of scans so you do not hit a 402. ### MCP - [Connect your agent](https://docs.rustine.io/en/mcp/connect.md): Claude, ChatGPT, Claude Code, Cursor or VS Code connect to https://mcp.rustine.io, with OAuth or an API key. - [The tools](https://docs.rustine.io/en/mcp/tools.md): The six tools of the MCP server, their parameters and what they cost. Reading is free, unlocking a fix uses one fix. - [From a script](https://docs.rustine.io/en/mcp/scripts.md): Call the MCP server without an agent, with curl and an API key. Stateless, over POST, as SSE or plain JSON. ### What's new - [Changelog](https://docs.rustine.io/en/changelog.md): What changes in the API, the MCP server and these docs. Additions arrive without breaking v1. ## Optional - [Toute la doc en français](https://docs.rustine.io/llms-full.txt): every French page in one Markdown file - [All the docs in English](https://docs.rustine.io/en/llms-full.txt): every English page in one Markdown file - [OpenAPI](https://docs.rustine.io/openapi.json): the API v1 specification, OpenAPI 3.1 - [MCP server](https://mcp.rustine.io): Streamable HTTP, OAuth or an API key