{
  "openapi": "3.1.0",
  "info": {
    "title": "Vyro API v1",
    "version": "1.0.0",
    "description": "Clés d’accès agents (Bearer vyro_…). Session cookie hors scope. Envois email/SMS = file d’approbation humaine. WhatsApp n’est pas un canal."
  },
  "servers": [{ "url": "/api/v1" }],
  "components": {
    "securitySchemes": {
      "bearerAuth": { "type": "http", "scheme": "bearer", "bearerFormat": "vyro_" }
    }
  },
  "security": [{ "bearerAuth": [] }],
  "paths": {
    "/contacts": {
      "get": { "summary": "Lister / rechercher des contacts", "operationId": "listContacts", "tags": ["contacts"] },
      "post": { "summary": "Créer un contact", "operationId": "createContact", "tags": ["contacts"] }
    },
    "/contacts/{id}": {
      "get": { "summary": "Lire un contact", "operationId": "getContact", "tags": ["contacts"] },
      "patch": { "summary": "Mettre à jour un contact", "operationId": "updateContact", "tags": ["contacts"] }
    },
    "/contacts/{id}/pipeline": {
      "post": { "summary": "Déplacer le stade pipeline", "operationId": "movePipeline", "tags": ["pipeline"] }
    },
    "/conversations": {
      "get": { "summary": "Lister les conversations", "operationId": "listConversations", "tags": ["inbox"] }
    },
    "/conversations/{id}/messages": {
      "get": { "summary": "Messages d’une conversation", "operationId": "getMessages", "tags": ["inbox"] }
    },
    "/conversations/{id}/notes": {
      "post": { "summary": "Ajouter une note interne", "operationId": "addNote", "tags": ["inbox"] }
    },
    "/properties": {
      "get": { "summary": "Lister les biens", "operationId": "listProperties", "tags": ["properties"] }
    },
    "/properties/{id}": {
      "get": { "summary": "Lire un bien", "operationId": "getProperty", "tags": ["properties"] }
    },
    "/appointments": {
      "get": { "summary": "Lister les visites", "operationId": "listVisits", "tags": ["visits"] }
    },
    "/tasks": {
      "post": { "summary": "Créer une tâche", "operationId": "createTask", "tags": ["tasks"] }
    },
    "/sequences/{id}/enroll": {
      "post": {
        "summary": "Enroller un prospect dans une EmailSequence (Inngest)",
        "operationId": "enrollSequence",
        "tags": ["sequences"]
      }
    },
    "/messages/sms": {
      "post": {
        "summary": "Brouillon SMS unitaire (pending, pas d’envoi). Distinct des campagnes SMS de masse.",
        "operationId": "draftUnitSms",
        "tags": ["sms"]
      }
    }
  }
}
