POST https://joe.kodkodkod.studio/api/chat/claude/stream

HTTP Client

2 Total requests
0 HTTP errors

Clients

http_client 2

Requests

POST https://api.anthropic.com/v1/messages
Request options
[
  "headers" => [
    "x-api-key" => "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"
    "anthropic-version" => "2023-06-01"
    "content-type" => "application/json"
  ]
  "json" => [
    "model" => "claude-sonnet-4-20250514"
    "max_tokens" => 500
    "system" => "Tu es Julia, un assistant IA pour les cliniques. Tu aides les clients à prendre rendez-vous, à obtenir des informations sur les traitements et à gérer leurs soins. Réponds de manière professionnelle et empathique en français."
    "messages" => [
      [
        "role" => "user"
        "content" => [
          [
            "type" => "text"
            "text" => "est ce que vous avez des mécecins compétent la dessus"
          ]
        ]
      ]
    ]
    "tools" => [
      [
        "name" => "calculer_date"
        "description" => "Calculer une date relative (ex: "dans 3 jours", "ds 2 j", "demain", "J+2") et retourner au format ISO8601."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "expression" => [
              "type" => "string"
              "description" => "Expression relative ("dans 3j", "ds 2 j", "demain", "après-demain", "J+2", "2j")."
            ]
            "raw_user_text" => [
              "type" => "string"
              "description" => "Texte brut du dernier message utilisateur (fallback si expression manquante)."
            ]
            "base_date" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "Date de base ISO8601 (optionnel, défaut: maintenant)"
            ]
            "time" => [
              "type" => "string"
              "description" => "Heure souhaitée HH:MM (optionnel, défaut: 09:00). Peut aussi être implicite (ex: "à 14h")."
              "default" => "09:00"
            ]
            "timezone" => [
              "type" => "string"
              "description" => "Timezone IANA (ex: "Europe/Paris", "Asia/Seoul"). Si non fourni: timezone serveur."
            ]
          ]
        ]
      ]
      [
        "name" => "rdv_creer"
        "description" => "Créer un rendez-vous (RDV) pour un client, à partir d’une date ISO ou d’une expression relative (ex: "dans 3 jours à 14h")."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "subject" => [
              "type" => "string"
              "description" => "Objet du RDV (ex: "Soin botox")."
            ]
            "location" => [
              "type" => "string"
              "description" => "Lieu du RDV (optionnel)."
            ]
            "client_id" => [
              "type" => "integer"
              "description" => "ID du client (recommandé si connu)."
            ]
            "client_query" => [
              "type" => "string"
              "description" => "Recherche client par nom/email/téléphone si client_id non fourni."
            ]
            "date_iso" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "Date/heure absolue ISO8601 (ex: "2025-09-17T14:30:00+09:00")."
            ]
            "expression" => [
              "type" => "string"
              "description" => "Expression relative (ex: "dans 3 jours à 14h", "demain 10h")."
            ]
            "raw_user_text" => [
              "type" => "string"
              "description" => "Texte brut utilisateur (fallback si expression manquante)."
            ]
            "time" => [
              "type" => "string"
              "description" => "Heure HH:MM si non incluse dans l’expression (défaut: 09:00)."
              "default" => "09:00"
            ]
            "timezone" => [
              "type" => "string"
              "description" => "Timezone IANA (ex: "Europe/Paris", "Asia/Seoul"). Défaut: timezone serveur."
            ]
            "base_date" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "Date de base pour une expression relative (défaut: maintenant)."
            ]
          ]
        ]
      ]
      [
        "name" => "rdv_deplacer"
        "description" => "Déplacer (replanifier) un RDV par ID vers une nouvelle date ISO8601."
        "input_schema" => [
          "type" => "object"
          "required" => [
            "id"
            "date_iso"
          ]
          "properties" => [
            "id" => [
              "type" => "integer"
              "description" => "ID du RDV"
            ]
            "date_iso" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "Nouvelle date/heure ISO"
            ]
            "timezone" => [
              "type" => "string"
              "description" => "TZ IANA pour homogénéiser si besoin"
            ]
          ]
        ]
      ]
      [
        "name" => "envoyer_email"
        "description" => "Envoyer un e-mail avec sujet, corps (HTML/texte) et pièces jointes facultatives."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "to" => [
              "type" => "array"
              "items" => [
                "type" => "object"
                "properties" => [
                  "email" => [
                    "type" => "string"
                  ]
                  "name" => [
                    "type" => "string"
                  ]
                ]
                "required" => [
                  "email"
                ]
                "additionalProperties" => false
              ]
              "minItems" => 1
            ]
            "subject" => [
              "type" => "string"
              "minLength" => 1
            ]
            "htmlContent" => [
              "type" => "string"
            ]
            "textContent" => [
              "type" => "string"
            ]
            "from" => [
              "type" => "string"
            ]
            "attachments" => [
              "type" => "array"
              "items" => [
                "type" => "object"
                "properties" => [
                  "path" => [
                    "type" => "string"
                  ]
                  "content" => [
                    "type" => "string"
                    "description" => "base64"
                  ]
                  "filename" => [
                    "type" => "string"
                  ]
                  "mimeType" => [
                    "type" => "string"
                  ]
                ]
                "anyOf" => [
                  [
                    "required" => [
                      "path"
                    ]
                  ]
                  [
                    "required" => [
                      "content"
                      "filename"
                    ]
                  ]
                ]
                "additionalProperties" => false
              ]
            ]
          ]
          "required" => [
            "to"
            "subject"
          ]
        ]
      ]
      [
        "name" => "gerer_client"
        "description" => "Créer / récupérer / mettre à jour un client, lister ses rendez-vous."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "action" => [
              "type" => "string"
              "enum" => [
                "inserer"
                "recuperer"
                "mettre_a_jour"
                "get_rdvs"
              ]
              "description" => "Action à effectuer"
            ]
            "client" => [
              "type" => "object"
              "description" => "Données du client"
              "properties" => [
                "client_id" => [
                  "type" => "integer"
                ]
                "prenom" => [
                  "type" => "string"
                ]
                "nom" => [
                  "type" => "string"
                ]
                "email" => [
                  "type" => "string"
                ]
                "telephone" => [
                  "type" => "string"
                ]
                "adresse" => [
                  "type" => "string"
                ]
                "codePostal" => [
                  "type" => "string"
                ]
                "ville" => [
                  "type" => "string"
                ]
              ]
            ]
          ]
          "required" => [
            "action"
          ]
        ]
      ]
      [
        "name" => "gerer_entreprise"
        "description" => "Créer/mettre à jour/récupérer l'entreprise liée à l'utilisateur courant."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "action" => [
              "type" => "string"
              "enum" => [
                "inserer"
                "recuperer"
                "mettre_a_jour"
              ]
              "description" => "Action à effectuer"
            ]
            "entreprise" => [
              "type" => "object"
              "description" => "Champs de l’entreprise à insérer/mettre à jour"
              "properties" => [
                "nom" => [
                  "type" => "string"
                ]
                "adresse" => [
                  "type" => "string"
                ]
                "codePostal" => [
                  "type" => "string"
                ]
                "ville" => [
                  "type" => "string"
                ]
                "pays" => [
                  "type" => "string"
                ]
                "siret" => [
                  "type" => "string"
                ]
                "tvaIntracom" => [
                  "type" => "string"
                ]
                "email" => [
                  "type" => "string"
                ]
                "telephone" => [
                  "type" => "string"
                ]
                "iban" => [
                  "type" => "string"
                ]
                "bic" => [
                  "type" => "string"
                ]
                "siteWeb" => [
                  "type" => "string"
                ]
                "sector" => [
                  "type" => "string"
                ]
                "doctorSpeciality" => [
                  "type" => "string"
                ]
                "rpps" => [
                  "type" => "string"
                ]
                "amNumber" => [
                  "type" => "string"
                ]
                "medecinParentFirstname" => [
                  "type" => "string"
                ]
                "medecinParentLastname" => [
                  "type" => "string"
                ]
                "medecinParentType" => [
                  "type" => "string"
                ]
                "medecinParentRpps" => [
                  "type" => "string"
                ]
                "isMedecinRemplacant" => [
                  "type" => "boolean"
                ]
                "signatureFile" => [
                  "type" => "string"
                  "description" => "base64"
                ]
                "signatureFilename" => [
                  "type" => "string"
                ]
                "signatureFileSize" => [
                  "type" => "integer"
                ]
              ]
              "additionalProperties" => true
            ]
          ]
          "required" => [
            "action"
          ]
        ]
      ]
      [
        "name" => "gerer_rappel"
        "description" => "Créer ou récupérer un rappel (message, date/heure, type). Pour créer un rappel, utilise action="creer" avec le message et la date/heure."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "action" => [
              "type" => "string"
              "enum" => [
                "creer"
                "recuperer"
              ]
              "description" => "Action à effectuer: "creer" pour créer un nouveau rappel, "recuperer" pour récupérer un rappel existant"
            ]
            "message" => [
              "type" => "string"
              "description" => "Texte du rappel (requis pour action=creer). Ex: "Rappel soin botox""
            ]
            "remind_at" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "Date/heure ISO8601 (ex: 2025-09-16T10:00:00+02:00) pour action=creer"
            ]
            "type" => [
              "type" => "string"
              "enum" => [
                "email"
                "sms"
                "whatsapp"
              ]
              "description" => "Canal de notification (optionnel, défaut: whatsapp)"
              "default" => "whatsapp"
            ]
            "rappel_id" => [
              "type" => "integer"
              "description" => "ID du rappel (requis pour action=recuperer)"
            ]
          ]
          "required" => [
            "action"
          ]
        ]
      ]
      [
        "name" => "rdv_lister"
        "description" => "Lister les RDV avec filtres (plage de dates, client), pagination, tri, et regroupement par jour."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "date_from" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "ISO8601 incluse"
            ]
            "date_to" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "ISO8601 exclue"
            ]
            "timezone" => [
              "type" => "string"
              "description" => "IANA TZ (ex: "Asia/Seoul")"
            ]
            "client_id" => [
              "type" => "integer"
              "description" => "Filtrer par client ID"
            ]
            "client_query" => [
              "type" => "string"
              "description" => "Recherche client si pas d’ID"
            ]
            "limit" => [
              "type" => "integer"
              "default" => 50
            ]
            "offset" => [
              "type" => "integer"
              "default" => 0
            ]
            "order" => [
              "type" => "string"
              "enum" => [
                "asc"
                "desc"
              ]
              "default" => "asc"
            ]
            "group_by_day" => [
              "type" => "boolean"
              "default" => false
            ]
            "with_total" => [
              "type" => "boolean"
              "default" => true
            ]
          ]
        ]
      ]
      [
        "name" => "rdv_supprimer"
        "description" => "Supprimer un RDV par ID."
        "input_schema" => [
          "type" => "object"
          "required" => [
            "id"
          ]
          "properties" => [
            "id" => [
              "type" => "integer"
              "description" => "ID du RDV"
            ]
            "confirm" => [
              "type" => "boolean"
              "default" => true
              "description" => "Confirmer la suppression"
            ]
          ]
        ]
      ]
    ]
    "stream" => true
  ]
  "timeout" => 30
  "max_duration" => 300
]
Response 200
[
  "info" => [
    "header_size" => 1060
    "request_size" => 753
    "total_time" => 2.952439
    "namelookup_time" => 0.00089
    "connect_time" => 0.005398
    "pretransfer_time" => 0.05923
    "size_upload" => 8140.0
    "size_download" => 2949.0
    "speed_download" => 998.0
    "speed_upload" => 2757.0
    "upload_content_length" => 8140.0
    "starttransfer_time" => 0.059252
    "primary_ip" => "2607:6bc0::10"
    "primary_port" => 443
    "local_ip" => "2001:41d0:a:3134::1"
    "local_port" => 44610
    "http_version" => 3
    "protocol" => 2
    "scheme" => "HTTPS"
    "appconnect_time_us" => 59135
    "connect_time_us" => 5398
    "namelookup_time_us" => 890
    "pretransfer_time_us" => 59230
    "starttransfer_time_us" => 59252
    "total_time_us" => 2952439
    "effective_method" => "POST"
    "max_duration" => 300.0
    "start_time" => 1758121472.8714
    "original_url" => "https://api.anthropic.com/v1/messages"
    "pause_handler" => Closure(float $duration) {#2332
      class: "Symfony\Component\HttpClient\Response\CurlResponse"
      use: {
        $ch: CurlHandle {#1372 …}
        $multi: Symfony\Component\HttpClient\Internal\CurlClientState {#2426 …}
        $execCounter: -9223372036854775808
      }
    }
    "debug" => """
      *   Trying 2607:6bc0::10:443...\n
      * Connected to api.anthropic.com (2607:6bc0::10) port 443 (#0)\n
      * ALPN, offering h2\n
      * ALPN, offering http/1.1\n
      *  CAfile: /etc/ssl/certs/ca-certificates.crt\n
      *  CApath: /etc/ssl/certs\n
      * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384\n
      * ALPN, server accepted to use h2\n
      * Server certificate:\n
      *  subject: CN=api.anthropic.com\n
      *  start date: Jul 10 07:29:04 2025 GMT\n
      *  expire date: Oct  8 08:29:01 2025 GMT\n
      *  subjectAltName: host "api.anthropic.com" matched cert's "api.anthropic.com"\n
      *  issuer: C=US; O=Google Trust Services; CN=WE1\n
      *  SSL certificate verify ok.\n
      * Using HTTP2, server supports multiplexing\n
      * Connection state changed (HTTP/2 confirmed)\n
      * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0\n
      * Using Stream ID: 1 (easy handle 0x559dd37b0b50)\n
      > POST /v1/messages HTTP/2\r\n
      Host: api.anthropic.com\r\n
      x-api-key: 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\r\n
      anthropic-version: 2023-06-01\r\n
      content-type: application/json\r\n
      accept: */*\r\n
      user-agent: Symfony HttpClient (Curl)\r\n
      accept-encoding: gzip\r\n
      tracestate: 4354935@nr=0-0-4354935-466420805-7541942a6e7b6a02-201c316565d81b93-1-1.422764-1758121472871\r\n
      newrelic: eyJ2IjpbMCwxXSwiZCI6eyJ0eSI6IkFwcCIsImFjIjoiNDM1NDkzNSIsImFwIjoiNDY2NDIwODA1IiwiaWQiOiI3NTQxOTQyYTZlN2I2YTAyIiwidHIiOiIyMDFjMzE2NTY1ZDgxYjkzIiwidHgiOiIyMDFjMzE2NTY1ZDgxYjkzIiwicHIiOjEuNDIyNzYsInNhIjp0cnVlLCJ0aSI6MTc1ODEyMTQ3Mjg3MX19\r\n
      traceparent: 00-0000000000000000201c316565d81b93-7541942a6e7b6a02-01\r\n
      content-length: 8140\r\n
      \r\n
      * We are completely uploaded and fine\n
      * old SSL session ID is stale, removing\n
      < HTTP/2 200 \r\n
      < date: Wed, 17 Sep 2025 15:04:34 GMT\r\n
      < content-type: text/event-stream; charset=utf-8\r\n
      < cf-ray: 98097f25c8a30411-CDG\r\n
      < cache-control: no-cache\r\n
      < anthropic-ratelimit-input-tokens-limit: 30000\r\n
      < anthropic-ratelimit-input-tokens-remaining: 29000\r\n
      < anthropic-ratelimit-input-tokens-reset: 2025-09-17T15:04:36Z\r\n
      < anthropic-ratelimit-output-tokens-limit: 8000\r\n
      < anthropic-ratelimit-output-tokens-remaining: 8000\r\n
      < anthropic-ratelimit-output-tokens-reset: 2025-09-17T15:04:33Z\r\n
      < anthropic-ratelimit-requests-limit: 50\r\n
      < anthropic-ratelimit-requests-remaining: 49\r\n
      < anthropic-ratelimit-requests-reset: 2025-09-17T15:04:34Z\r\n
      < anthropic-ratelimit-tokens-limit: 38000\r\n
      < anthropic-ratelimit-tokens-remaining: 37000\r\n
      < anthropic-ratelimit-tokens-reset: 2025-09-17T15:04:33Z\r\n
      < request-id: req_011CTEBHnGCaLeG1E4Tdcmyh\r\n
      < strict-transport-security: max-age=31536000; includeSubDomains; preload\r\n
      < anthropic-organization-id: c366ace8-f74e-430f-865a-b88482ef56d8\r\n
      < x-envoy-upstream-service-time: 1173\r\n
      < via: 1.1 google\r\n
      < cf-cache-status: DYNAMIC\r\n
      < x-robots-tag: none\r\n
      < server: cloudflare\r\n
      < \r\n
      """
  ]
  "response_headers" => [
    "HTTP/2 200 "
    "date: Wed, 17 Sep 2025 15:04:34 GMT"
    "content-type: text/event-stream; charset=utf-8"
    "cf-ray: 98097f25c8a30411-CDG"
    "cache-control: no-cache"
    "anthropic-ratelimit-input-tokens-limit: 30000"
    "anthropic-ratelimit-input-tokens-remaining: 29000"
    "anthropic-ratelimit-input-tokens-reset: 2025-09-17T15:04:36Z"
    "anthropic-ratelimit-output-tokens-limit: 8000"
    "anthropic-ratelimit-output-tokens-remaining: 8000"
    "anthropic-ratelimit-output-tokens-reset: 2025-09-17T15:04:33Z"
    "anthropic-ratelimit-requests-limit: 50"
    "anthropic-ratelimit-requests-remaining: 49"
    "anthropic-ratelimit-requests-reset: 2025-09-17T15:04:34Z"
    "anthropic-ratelimit-tokens-limit: 38000"
    "anthropic-ratelimit-tokens-remaining: 37000"
    "anthropic-ratelimit-tokens-reset: 2025-09-17T15:04:33Z"
    "request-id: req_011CTEBHnGCaLeG1E4Tdcmyh"
    "strict-transport-security: max-age=31536000; includeSubDomains; preload"
    "anthropic-organization-id: c366ace8-f74e-430f-865a-b88482ef56d8"
    "x-envoy-upstream-service-time: 1173"
    "via: 1.1 google"
    "cf-cache-status: DYNAMIC"
    "x-robots-tag: none"
    "server: cloudflare"
  ]
]
POST https://api.anthropic.com/v1/messages
Request options
[
  "headers" => [
    "x-api-key" => "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"
    "anthropic-version" => "2023-06-01"
    "content-type" => "application/json"
  ]
  "json" => [
    "model" => "claude-sonnet-4-20250514"
    "max_tokens" => 500
    "system" => "Tu es Julia, un assistant IA pour les cliniques. Tu aides les clients à prendre rendez-vous, à obtenir des informations sur les traitements et à gérer leurs soins. Réponds de manière professionnelle et empathique en français."
    "messages" => [
      [
        "role" => "user"
        "content" => [
          [
            "type" => "text"
            "text" => "est ce que vous avez des mécecins compétent la dessus"
          ]
        ]
      ]
      [
        "role" => "assistant"
        "content" => [
          [
            "type" => "text"
            "text" => "Je comprends que vous vous renseignez sur les compétences médicales de notre clinique. Pour vous donner des informations précises sur nos médecins et leurs spécialités, j'aimerais d'abord récupérer les informations de notre établissement."
          ]
          [
            "type" => "tool_use"
            "id" => "toolu_01Ju4F5bvnxSJsJQGtTNHp3i"
            "name" => "gerer_entreprise"
            "input" => [
              "action" => "recuperer"
            ]
          ]
        ]
      ]
      [
        "role" => "user"
        "content" => [
          [
            "type" => "tool_result"
            "tool_use_id" => "toolu_01Ju4F5bvnxSJsJQGtTNHp3i"
            "content" => "❌ Utilisateur non authentifié."
          ]
        ]
      ]
    ]
    "tools" => [
      [
        "name" => "calculer_date"
        "description" => "Calculer une date relative (ex: "dans 3 jours", "ds 2 j", "demain", "J+2") et retourner au format ISO8601."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "expression" => [
              "type" => "string"
              "description" => "Expression relative ("dans 3j", "ds 2 j", "demain", "après-demain", "J+2", "2j")."
            ]
            "raw_user_text" => [
              "type" => "string"
              "description" => "Texte brut du dernier message utilisateur (fallback si expression manquante)."
            ]
            "base_date" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "Date de base ISO8601 (optionnel, défaut: maintenant)"
            ]
            "time" => [
              "type" => "string"
              "description" => "Heure souhaitée HH:MM (optionnel, défaut: 09:00). Peut aussi être implicite (ex: "à 14h")."
              "default" => "09:00"
            ]
            "timezone" => [
              "type" => "string"
              "description" => "Timezone IANA (ex: "Europe/Paris", "Asia/Seoul"). Si non fourni: timezone serveur."
            ]
          ]
        ]
      ]
      [
        "name" => "rdv_creer"
        "description" => "Créer un rendez-vous (RDV) pour un client, à partir d’une date ISO ou d’une expression relative (ex: "dans 3 jours à 14h")."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "subject" => [
              "type" => "string"
              "description" => "Objet du RDV (ex: "Soin botox")."
            ]
            "location" => [
              "type" => "string"
              "description" => "Lieu du RDV (optionnel)."
            ]
            "client_id" => [
              "type" => "integer"
              "description" => "ID du client (recommandé si connu)."
            ]
            "client_query" => [
              "type" => "string"
              "description" => "Recherche client par nom/email/téléphone si client_id non fourni."
            ]
            "date_iso" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "Date/heure absolue ISO8601 (ex: "2025-09-17T14:30:00+09:00")."
            ]
            "expression" => [
              "type" => "string"
              "description" => "Expression relative (ex: "dans 3 jours à 14h", "demain 10h")."
            ]
            "raw_user_text" => [
              "type" => "string"
              "description" => "Texte brut utilisateur (fallback si expression manquante)."
            ]
            "time" => [
              "type" => "string"
              "description" => "Heure HH:MM si non incluse dans l’expression (défaut: 09:00)."
              "default" => "09:00"
            ]
            "timezone" => [
              "type" => "string"
              "description" => "Timezone IANA (ex: "Europe/Paris", "Asia/Seoul"). Défaut: timezone serveur."
            ]
            "base_date" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "Date de base pour une expression relative (défaut: maintenant)."
            ]
          ]
        ]
      ]
      [
        "name" => "rdv_deplacer"
        "description" => "Déplacer (replanifier) un RDV par ID vers une nouvelle date ISO8601."
        "input_schema" => [
          "type" => "object"
          "required" => [
            "id"
            "date_iso"
          ]
          "properties" => [
            "id" => [
              "type" => "integer"
              "description" => "ID du RDV"
            ]
            "date_iso" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "Nouvelle date/heure ISO"
            ]
            "timezone" => [
              "type" => "string"
              "description" => "TZ IANA pour homogénéiser si besoin"
            ]
          ]
        ]
      ]
      [
        "name" => "envoyer_email"
        "description" => "Envoyer un e-mail avec sujet, corps (HTML/texte) et pièces jointes facultatives."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "to" => [
              "type" => "array"
              "items" => [
                "type" => "object"
                "properties" => [
                  "email" => [
                    "type" => "string"
                  ]
                  "name" => [
                    "type" => "string"
                  ]
                ]
                "required" => [
                  "email"
                ]
                "additionalProperties" => false
              ]
              "minItems" => 1
            ]
            "subject" => [
              "type" => "string"
              "minLength" => 1
            ]
            "htmlContent" => [
              "type" => "string"
            ]
            "textContent" => [
              "type" => "string"
            ]
            "from" => [
              "type" => "string"
            ]
            "attachments" => [
              "type" => "array"
              "items" => [
                "type" => "object"
                "properties" => [
                  "path" => [
                    "type" => "string"
                  ]
                  "content" => [
                    "type" => "string"
                    "description" => "base64"
                  ]
                  "filename" => [
                    "type" => "string"
                  ]
                  "mimeType" => [
                    "type" => "string"
                  ]
                ]
                "anyOf" => [
                  [
                    "required" => [
                      "path"
                    ]
                  ]
                  [
                    "required" => [
                      "content"
                      "filename"
                    ]
                  ]
                ]
                "additionalProperties" => false
              ]
            ]
          ]
          "required" => [
            "to"
            "subject"
          ]
        ]
      ]
      [
        "name" => "gerer_client"
        "description" => "Créer / récupérer / mettre à jour un client, lister ses rendez-vous."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "action" => [
              "type" => "string"
              "enum" => [
                "inserer"
                "recuperer"
                "mettre_a_jour"
                "get_rdvs"
              ]
              "description" => "Action à effectuer"
            ]
            "client" => [
              "type" => "object"
              "description" => "Données du client"
              "properties" => [
                "client_id" => [
                  "type" => "integer"
                ]
                "prenom" => [
                  "type" => "string"
                ]
                "nom" => [
                  "type" => "string"
                ]
                "email" => [
                  "type" => "string"
                ]
                "telephone" => [
                  "type" => "string"
                ]
                "adresse" => [
                  "type" => "string"
                ]
                "codePostal" => [
                  "type" => "string"
                ]
                "ville" => [
                  "type" => "string"
                ]
              ]
            ]
          ]
          "required" => [
            "action"
          ]
        ]
      ]
      [
        "name" => "gerer_entreprise"
        "description" => "Créer/mettre à jour/récupérer l'entreprise liée à l'utilisateur courant."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "action" => [
              "type" => "string"
              "enum" => [
                "inserer"
                "recuperer"
                "mettre_a_jour"
              ]
              "description" => "Action à effectuer"
            ]
            "entreprise" => [
              "type" => "object"
              "description" => "Champs de l’entreprise à insérer/mettre à jour"
              "properties" => [
                "nom" => [
                  "type" => "string"
                ]
                "adresse" => [
                  "type" => "string"
                ]
                "codePostal" => [
                  "type" => "string"
                ]
                "ville" => [
                  "type" => "string"
                ]
                "pays" => [
                  "type" => "string"
                ]
                "siret" => [
                  "type" => "string"
                ]
                "tvaIntracom" => [
                  "type" => "string"
                ]
                "email" => [
                  "type" => "string"
                ]
                "telephone" => [
                  "type" => "string"
                ]
                "iban" => [
                  "type" => "string"
                ]
                "bic" => [
                  "type" => "string"
                ]
                "siteWeb" => [
                  "type" => "string"
                ]
                "sector" => [
                  "type" => "string"
                ]
                "doctorSpeciality" => [
                  "type" => "string"
                ]
                "rpps" => [
                  "type" => "string"
                ]
                "amNumber" => [
                  "type" => "string"
                ]
                "medecinParentFirstname" => [
                  "type" => "string"
                ]
                "medecinParentLastname" => [
                  "type" => "string"
                ]
                "medecinParentType" => [
                  "type" => "string"
                ]
                "medecinParentRpps" => [
                  "type" => "string"
                ]
                "isMedecinRemplacant" => [
                  "type" => "boolean"
                ]
                "signatureFile" => [
                  "type" => "string"
                  "description" => "base64"
                ]
                "signatureFilename" => [
                  "type" => "string"
                ]
                "signatureFileSize" => [
                  "type" => "integer"
                ]
              ]
              "additionalProperties" => true
            ]
          ]
          "required" => [
            "action"
          ]
        ]
      ]
      [
        "name" => "gerer_rappel"
        "description" => "Créer ou récupérer un rappel (message, date/heure, type). Pour créer un rappel, utilise action="creer" avec le message et la date/heure."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "action" => [
              "type" => "string"
              "enum" => [
                "creer"
                "recuperer"
              ]
              "description" => "Action à effectuer: "creer" pour créer un nouveau rappel, "recuperer" pour récupérer un rappel existant"
            ]
            "message" => [
              "type" => "string"
              "description" => "Texte du rappel (requis pour action=creer). Ex: "Rappel soin botox""
            ]
            "remind_at" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "Date/heure ISO8601 (ex: 2025-09-16T10:00:00+02:00) pour action=creer"
            ]
            "type" => [
              "type" => "string"
              "enum" => [
                "email"
                "sms"
                "whatsapp"
              ]
              "description" => "Canal de notification (optionnel, défaut: whatsapp)"
              "default" => "whatsapp"
            ]
            "rappel_id" => [
              "type" => "integer"
              "description" => "ID du rappel (requis pour action=recuperer)"
            ]
          ]
          "required" => [
            "action"
          ]
        ]
      ]
      [
        "name" => "rdv_lister"
        "description" => "Lister les RDV avec filtres (plage de dates, client), pagination, tri, et regroupement par jour."
        "input_schema" => [
          "type" => "object"
          "properties" => [
            "date_from" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "ISO8601 incluse"
            ]
            "date_to" => [
              "type" => "string"
              "format" => "date-time"
              "description" => "ISO8601 exclue"
            ]
            "timezone" => [
              "type" => "string"
              "description" => "IANA TZ (ex: "Asia/Seoul")"
            ]
            "client_id" => [
              "type" => "integer"
              "description" => "Filtrer par client ID"
            ]
            "client_query" => [
              "type" => "string"
              "description" => "Recherche client si pas d’ID"
            ]
            "limit" => [
              "type" => "integer"
              "default" => 50
            ]
            "offset" => [
              "type" => "integer"
              "default" => 0
            ]
            "order" => [
              "type" => "string"
              "enum" => [
                "asc"
                "desc"
              ]
              "default" => "asc"
            ]
            "group_by_day" => [
              "type" => "boolean"
              "default" => false
            ]
            "with_total" => [
              "type" => "boolean"
              "default" => true
            ]
          ]
        ]
      ]
      [
        "name" => "rdv_supprimer"
        "description" => "Supprimer un RDV par ID."
        "input_schema" => [
          "type" => "object"
          "required" => [
            "id"
          ]
          "properties" => [
            "id" => [
              "type" => "integer"
              "description" => "ID du RDV"
            ]
            "confirm" => [
              "type" => "boolean"
              "default" => true
              "description" => "Confirmer la suppression"
            ]
          ]
        ]
      ]
    ]
    "stream" => true
  ]
  "timeout" => 30
  "max_duration" => 300
]
Response 200
[
  "info" => [
    "header_size" => 1060
    "request_size" => 753
    "total_time" => 4.744891
    "namelookup_time" => 6.0E-5
    "connect_time" => 6.0E-5
    "pretransfer_time" => 0.000203
    "size_upload" => 8758.0
    "size_download" => 4183.0
    "speed_download" => 881.0
    "speed_upload" => 1845.0
    "upload_content_length" => 8758.0
    "starttransfer_time" => 0.000252
    "primary_ip" => "2607:6bc0::10"
    "primary_port" => 443
    "local_ip" => "2001:41d0:a:3134::1"
    "local_port" => 44610
    "http_version" => 3
    "protocol" => 2
    "scheme" => "HTTPS"
    "appconnect_time_us" => 60
    "connect_time_us" => 60
    "namelookup_time_us" => 60
    "pretransfer_time_us" => 203
    "starttransfer_time_us" => 252
    "total_time_us" => 4744891
    "effective_method" => "POST"
    "max_duration" => 300.0
    "start_time" => 1758121475.8263
    "original_url" => "https://api.anthropic.com/v1/messages"
    "pause_handler" => Closure(float $duration) {#2432
      class: "Symfony\Component\HttpClient\Response\CurlResponse"
      use: {
        $ch: CurlHandle {#2455 …}
        $multi: Symfony\Component\HttpClient\Internal\CurlClientState {#2426 …}
        $execCounter: -9223372036854775768
      }
    }
    "debug" => """
      * Found bundle for host api.anthropic.com: 0x559dd36feac0 [can multiplex]\n
      * Re-using existing connection! (#0) with host api.anthropic.com\n
      * Connected to api.anthropic.com (2607:6bc0::10) port 443 (#0)\n
      * Using Stream ID: 3 (easy handle 0x559dd3297ff0)\n
      > POST /v1/messages HTTP/2\r\n
      Host: api.anthropic.com\r\n
      x-api-key: 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\r\n
      anthropic-version: 2023-06-01\r\n
      content-type: application/json\r\n
      accept: */*\r\n
      user-agent: Symfony HttpClient (Curl)\r\n
      accept-encoding: gzip\r\n
      tracestate: 4354935@nr=0-0-4354935-466420805-18de6ebb04c0ee2d-201c316565d81b93-1-1.422764-1758121475826\r\n
      newrelic: eyJ2IjpbMCwxXSwiZCI6eyJ0eSI6IkFwcCIsImFjIjoiNDM1NDkzNSIsImFwIjoiNDY2NDIwODA1IiwiaWQiOiIxOGRlNmViYjA0YzBlZTJkIiwidHIiOiIyMDFjMzE2NTY1ZDgxYjkzIiwidHgiOiIyMDFjMzE2NTY1ZDgxYjkzIiwicHIiOjEuNDIyNzYsInNhIjp0cnVlLCJ0aSI6MTc1ODEyMTQ3NTgyNn19\r\n
      traceparent: 00-0000000000000000201c316565d81b93-18de6ebb04c0ee2d-01\r\n
      content-length: 8758\r\n
      \r\n
      * We are completely uploaded and fine\n
      < HTTP/2 200 \r\n
      < date: Wed, 17 Sep 2025 15:04:36 GMT\r\n
      < content-type: text/event-stream; charset=utf-8\r\n
      < cf-ray: 98097f37ef6b0411-CDG\r\n
      < cache-control: no-cache\r\n
      < anthropic-ratelimit-input-tokens-limit: 30000\r\n
      < anthropic-ratelimit-input-tokens-remaining: 27000\r\n
      < anthropic-ratelimit-input-tokens-reset: 2025-09-17T15:04:42Z\r\n
      < anthropic-ratelimit-output-tokens-limit: 8000\r\n
      < anthropic-ratelimit-output-tokens-remaining: 8000\r\n
      < anthropic-ratelimit-output-tokens-reset: 2025-09-17T15:04:36Z\r\n
      < anthropic-ratelimit-requests-limit: 50\r\n
      < anthropic-ratelimit-requests-remaining: 49\r\n
      < anthropic-ratelimit-requests-reset: 2025-09-17T15:04:37Z\r\n
      < anthropic-ratelimit-tokens-limit: 38000\r\n
      < anthropic-ratelimit-tokens-remaining: 35000\r\n
      < anthropic-ratelimit-tokens-reset: 2025-09-17T15:04:36Z\r\n
      < request-id: req_011CTEBHzcMdbd23vesT6KSD\r\n
      < strict-transport-security: max-age=31536000; includeSubDomains; preload\r\n
      < anthropic-organization-id: c366ace8-f74e-430f-865a-b88482ef56d8\r\n
      < x-envoy-upstream-service-time: 1066\r\n
      < via: 1.1 google\r\n
      < cf-cache-status: DYNAMIC\r\n
      < x-robots-tag: none\r\n
      < server: cloudflare\r\n
      < \r\n
      """
  ]
  "response_headers" => [
    "HTTP/2 200 "
    "date: Wed, 17 Sep 2025 15:04:36 GMT"
    "content-type: text/event-stream; charset=utf-8"
    "cf-ray: 98097f37ef6b0411-CDG"
    "cache-control: no-cache"
    "anthropic-ratelimit-input-tokens-limit: 30000"
    "anthropic-ratelimit-input-tokens-remaining: 27000"
    "anthropic-ratelimit-input-tokens-reset: 2025-09-17T15:04:42Z"
    "anthropic-ratelimit-output-tokens-limit: 8000"
    "anthropic-ratelimit-output-tokens-remaining: 8000"
    "anthropic-ratelimit-output-tokens-reset: 2025-09-17T15:04:36Z"
    "anthropic-ratelimit-requests-limit: 50"
    "anthropic-ratelimit-requests-remaining: 49"
    "anthropic-ratelimit-requests-reset: 2025-09-17T15:04:37Z"
    "anthropic-ratelimit-tokens-limit: 38000"
    "anthropic-ratelimit-tokens-remaining: 35000"
    "anthropic-ratelimit-tokens-reset: 2025-09-17T15:04:36Z"
    "request-id: req_011CTEBHzcMdbd23vesT6KSD"
    "strict-transport-security: max-age=31536000; includeSubDomains; preload"
    "anthropic-organization-id: c366ace8-f74e-430f-865a-b88482ef56d8"
    "x-envoy-upstream-service-time: 1066"
    "via: 1.1 google"
    "cf-cache-status: DYNAMIC"
    "x-robots-tag: none"
    "server: cloudflare"
  ]
]