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

HTTP Client

4 Total requests
0 HTTP errors

Clients

http_client 4

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" => "Disponibilités pour un peeling cette semaine"
          ]
        ]
      ]
    ]
    "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.865999
    "namelookup_time" => 0.151396
    "connect_time" => 0.157023
    "pretransfer_time" => 0.250565
    "size_upload" => 8126.0
    "size_download" => 4120.0
    "speed_download" => 1437.0
    "speed_upload" => 2835.0
    "upload_content_length" => 8126.0
    "starttransfer_time" => 0.250597
    "primary_ip" => "2607:6bc0::10"
    "primary_port" => 443
    "local_ip" => "2001:41d0:a:3134::1"
    "local_port" => 40482
    "http_version" => 3
    "protocol" => 2
    "scheme" => "HTTPS"
    "appconnect_time_us" => 250430
    "connect_time_us" => 157023
    "namelookup_time_us" => 151396
    "pretransfer_time_us" => 250565
    "starttransfer_time_us" => 250597
    "total_time_us" => 2865999
    "effective_method" => "POST"
    "max_duration" => 300.0
    "start_time" => 1758121344.464
    "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 0x559dd3858960)\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-48be331a1d0982b8-53293263b8481ba9-1-1.277222-1758121344464\r\n
      newrelic: eyJ2IjpbMCwxXSwiZCI6eyJ0eSI6IkFwcCIsImFjIjoiNDM1NDkzNSIsImFwIjoiNDY2NDIwODA1IiwiaWQiOiI0OGJlMzMxYTFkMDk4MmI4IiwidHIiOiI1MzI5MzI2M2I4NDgxYmE5IiwidHgiOiI1MzI5MzI2M2I4NDgxYmE5IiwicHIiOjEuMjc3MjIsInNhIjp0cnVlLCJ0aSI6MTc1ODEyMTM0NDQ2NH19\r\n
      traceparent: 00-000000000000000053293263b8481ba9-48be331a1d0982b8-01\r\n
      content-length: 8126\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:02:26 GMT\r\n
      < content-type: text/event-stream; charset=utf-8\r\n
      < cf-ray: 98097c047d97b6b4-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:02:27Z\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:02:24Z\r\n
      < anthropic-ratelimit-requests-limit: 50\r\n
      < anthropic-ratelimit-requests-remaining: 49\r\n
      < anthropic-ratelimit-requests-reset: 2025-09-17T15:02:26Z\r\n
      < anthropic-ratelimit-tokens-limit: 38000\r\n
      < anthropic-ratelimit-tokens-remaining: 37000\r\n
      < anthropic-ratelimit-tokens-reset: 2025-09-17T15:02:24Z\r\n
      < request-id: req_011CTEB8L47dr8YQ4vEDx5EY\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: 1257\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:02:26 GMT"
    "content-type: text/event-stream; charset=utf-8"
    "cf-ray: 98097c047d97b6b4-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:02:27Z"
    "anthropic-ratelimit-output-tokens-limit: 8000"
    "anthropic-ratelimit-output-tokens-remaining: 8000"
    "anthropic-ratelimit-output-tokens-reset: 2025-09-17T15:02:24Z"
    "anthropic-ratelimit-requests-limit: 50"
    "anthropic-ratelimit-requests-remaining: 49"
    "anthropic-ratelimit-requests-reset: 2025-09-17T15:02:26Z"
    "anthropic-ratelimit-tokens-limit: 38000"
    "anthropic-ratelimit-tokens-remaining: 37000"
    "anthropic-ratelimit-tokens-reset: 2025-09-17T15:02:24Z"
    "request-id: req_011CTEB8L47dr8YQ4vEDx5EY"
    "strict-transport-security: max-age=31536000; includeSubDomains; preload"
    "anthropic-organization-id: c366ace8-f74e-430f-865a-b88482ef56d8"
    "x-envoy-upstream-service-time: 1257"
    "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" => "Disponibilités pour un peeling cette semaine"
          ]
        ]
      ]
      [
        "role" => "assistant"
        "content" => [
          [
            "type" => "text"
            "text" => "Je vais vérifier les disponibilités pour un peeling cette semaine en consultant le planning des rendez-vous."
          ]
          [
            "type" => "tool_use"
            "id" => "toolu_01RxWcVxwuJepj4zHxU1upTo"
            "name" => "calculer_date"
            "input" => [
              "expression" => "cette semaine"
              "raw_user_text" => "Disponibilités pour un peeling cette semaine"
            ]
          ]
        ]
      ]
      [
        "role" => "user"
        "content" => [
          [
            "type" => "tool_result"
            "tool_use_id" => "toolu_01RxWcVxwuJepj4zHxU1upTo"
            "content" => "{"error":"Expression non reconnue: cette semaine","success":false,"help":"Exemples: \"dans 2 jours\", \"ds 2 j\", \"demain\", \"après-demain\", \"dans 3 semaines\", \"J+2\", \"2j\", \"dans 1 mois\", \"à 14h\"."}"
          ]
        ]
      ]
    ]
    "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.420724
    "namelookup_time" => 5.7E-5
    "connect_time" => 5.8E-5
    "pretransfer_time" => 0.000204
    "size_upload" => 8981.0
    "size_download" => 2981.0
    "speed_download" => 1231.0
    "speed_upload" => 3710.0
    "upload_content_length" => 8981.0
    "starttransfer_time" => 0.000263
    "primary_ip" => "2607:6bc0::10"
    "primary_port" => 443
    "local_ip" => "2001:41d0:a:3134::1"
    "local_port" => 40482
    "http_version" => 3
    "protocol" => 2
    "scheme" => "HTTPS"
    "appconnect_time_us" => 58
    "connect_time_us" => 58
    "namelookup_time_us" => 57
    "pretransfer_time_us" => 204
    "starttransfer_time_us" => 263
    "total_time_us" => 2420724
    "effective_method" => "POST"
    "max_duration" => 300.0
    "start_time" => 1758121347.3328
    "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: -9223372036854775727
      }
    }
    "debug" => """
      * Found bundle for host api.anthropic.com: 0x559dd39eff60 [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 0x559dd383f090)\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-46dae59575794341-53293263b8481ba9-1-1.277222-1758121347332\r\n
      newrelic: eyJ2IjpbMCwxXSwiZCI6eyJ0eSI6IkFwcCIsImFjIjoiNDM1NDkzNSIsImFwIjoiNDY2NDIwODA1IiwiaWQiOiI0NmRhZTU5NTc1Nzk0MzQxIiwidHIiOiI1MzI5MzI2M2I4NDgxYmE5IiwidHgiOiI1MzI5MzI2M2I4NDgxYmE5IiwicHIiOjEuMjc3MjIsInNhIjp0cnVlLCJ0aSI6MTc1ODEyMTM0NzMzMn19\r\n
      traceparent: 00-000000000000000053293263b8481ba9-46dae59575794341-01\r\n
      content-length: 8981\r\n
      \r\n
      * We are completely uploaded and fine\n
      < HTTP/2 200 \r\n
      < date: Wed, 17 Sep 2025 15:02:28 GMT\r\n
      < content-type: text/event-stream; charset=utf-8\r\n
      < cf-ray: 98097c14ddf5b6b4-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:02:34Z\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:02:28Z\r\n
      < anthropic-ratelimit-requests-limit: 50\r\n
      < anthropic-ratelimit-requests-remaining: 49\r\n
      < anthropic-ratelimit-requests-reset: 2025-09-17T15:02:28Z\r\n
      < anthropic-ratelimit-tokens-limit: 38000\r\n
      < anthropic-ratelimit-tokens-remaining: 35000\r\n
      < anthropic-ratelimit-tokens-reset: 2025-09-17T15:02:28Z\r\n
      < request-id: req_011CTEB8XJHWdDsTfVGoH29y\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: 1180\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:02:28 GMT"
    "content-type: text/event-stream; charset=utf-8"
    "cf-ray: 98097c14ddf5b6b4-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:02:34Z"
    "anthropic-ratelimit-output-tokens-limit: 8000"
    "anthropic-ratelimit-output-tokens-remaining: 8000"
    "anthropic-ratelimit-output-tokens-reset: 2025-09-17T15:02:28Z"
    "anthropic-ratelimit-requests-limit: 50"
    "anthropic-ratelimit-requests-remaining: 49"
    "anthropic-ratelimit-requests-reset: 2025-09-17T15:02:28Z"
    "anthropic-ratelimit-tokens-limit: 38000"
    "anthropic-ratelimit-tokens-remaining: 35000"
    "anthropic-ratelimit-tokens-reset: 2025-09-17T15:02:28Z"
    "request-id: req_011CTEB8XJHWdDsTfVGoH29y"
    "strict-transport-security: max-age=31536000; includeSubDomains; preload"
    "anthropic-organization-id: c366ace8-f74e-430f-865a-b88482ef56d8"
    "x-envoy-upstream-service-time: 1180"
    "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" => "Disponibilités pour un peeling cette semaine"
          ]
        ]
      ]
      [
        "role" => "assistant"
        "content" => [
          [
            "type" => "text"
            "text" => "Je vais vérifier les disponibilités pour un peeling cette semaine en consultant le planning des rendez-vous."
          ]
          [
            "type" => "tool_use"
            "id" => "toolu_01RxWcVxwuJepj4zHxU1upTo"
            "name" => "calculer_date"
            "input" => [
              "expression" => "cette semaine"
              "raw_user_text" => "Disponibilités pour un peeling cette semaine"
            ]
          ]
        ]
      ]
      [
        "role" => "user"
        "content" => [
          [
            "type" => "tool_result"
            "tool_use_id" => "toolu_01RxWcVxwuJepj4zHxU1upTo"
            "content" => "{"error":"Expression non reconnue: cette semaine","success":false,"help":"Exemples: \"dans 2 jours\", \"ds 2 j\", \"demain\", \"après-demain\", \"dans 3 semaines\", \"J+2\", \"2j\", \"dans 1 mois\", \"à 14h\"."}"
          ]
        ]
      ]
      [
        "role" => "assistant"
        "content" => [
          [
            "type" => "text"
            "text" => "Laissez-moi calculer les dates pour cette semaine et vérifier les créneaux disponibles :"
          ]
          [
            "type" => "tool_use"
            "id" => "toolu_01VYagApZGNqHT63qN6w1SSR"
            "name" => "calculer_date"
            "input" => [
              "expression" => "lundi"
              "time" => "09:00"
            ]
          ]
        ]
      ]
      [
        "role" => "user"
        "content" => [
          [
            "type" => "tool_result"
            "tool_use_id" => "toolu_01VYagApZGNqHT63qN6w1SSR"
            "content" => "{"error":"Expression non reconnue: lundi","success":false,"help":"Exemples: \"dans 2 jours\", \"ds 2 j\", \"demain\", \"après-demain\", \"dans 3 semaines\", \"J+2\", \"2j\", \"dans 1 mois\", \"à 14h\"."}"
          ]
        ]
      ]
    ]
    "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.768918
    "namelookup_time" => 5.6E-5
    "connect_time" => 5.6E-5
    "pretransfer_time" => 0.000202
    "size_upload" => 9747.0
    "size_download" => 3615.0
    "speed_download" => 1305.0
    "speed_upload" => 3520.0
    "upload_content_length" => 9747.0
    "starttransfer_time" => 0.000264
    "primary_ip" => "2607:6bc0::10"
    "primary_port" => 443
    "local_ip" => "2001:41d0:a:3134::1"
    "local_port" => 40482
    "http_version" => 3
    "protocol" => 2
    "scheme" => "HTTPS"
    "appconnect_time_us" => 56
    "connect_time_us" => 56
    "namelookup_time_us" => 56
    "pretransfer_time_us" => 202
    "starttransfer_time_us" => 264
    "total_time_us" => 2768918
    "effective_method" => "POST"
    "max_duration" => 300.0
    "start_time" => 1758121349.7555
    "original_url" => "https://api.anthropic.com/v1/messages"
    "pause_handler" => Closure(float $duration) {#2433
      class: "Symfony\Component\HttpClient\Response\CurlResponse"
      use: {
        $ch: CurlHandle {#2328 …}
        $multi: Symfony\Component\HttpClient\Internal\CurlClientState {#2426 …}
        $execCounter: -9223372036854775708
      }
    }
    "debug" => """
      * Found bundle for host api.anthropic.com: 0x559dd39eff60 [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: 5 (easy handle 0x559dd3a66f00)\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-ccbb86390b705165-53293263b8481ba9-1-1.277222-1758121349755\r\n
      newrelic: eyJ2IjpbMCwxXSwiZCI6eyJ0eSI6IkFwcCIsImFjIjoiNDM1NDkzNSIsImFwIjoiNDY2NDIwODA1IiwiaWQiOiJjY2JiODYzOTBiNzA1MTY1IiwidHIiOiI1MzI5MzI2M2I4NDgxYmE5IiwidHgiOiI1MzI5MzI2M2I4NDgxYmE5IiwicHIiOjEuMjc3MjIsInNhIjp0cnVlLCJ0aSI6MTc1ODEyMTM0OTc1NX19\r\n
      traceparent: 00-000000000000000053293263b8481ba9-ccbb86390b705165-01\r\n
      content-length: 9747\r\n
      \r\n
      * We are completely uploaded and fine\n
      < HTTP/2 200 \r\n
      < date: Wed, 17 Sep 2025 15:02:31 GMT\r\n
      < content-type: text/event-stream; charset=utf-8\r\n
      < cf-ray: 98097c23ff2fb6b4-CDG\r\n
      < cache-control: no-cache\r\n
      < anthropic-ratelimit-input-tokens-limit: 30000\r\n
      < anthropic-ratelimit-input-tokens-remaining: 23000\r\n
      < anthropic-ratelimit-input-tokens-reset: 2025-09-17T15:02:44Z\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:02:30Z\r\n
      < anthropic-ratelimit-requests-limit: 50\r\n
      < anthropic-ratelimit-requests-remaining: 48\r\n
      < anthropic-ratelimit-requests-reset: 2025-09-17T15:02:32Z\r\n
      < anthropic-ratelimit-tokens-limit: 38000\r\n
      < anthropic-ratelimit-tokens-remaining: 31000\r\n
      < anthropic-ratelimit-tokens-reset: 2025-09-17T15:02:30Z\r\n
      < request-id: req_011CTEB8hedyJRogzbmruEur\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: 1726\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:02:31 GMT"
    "content-type: text/event-stream; charset=utf-8"
    "cf-ray: 98097c23ff2fb6b4-CDG"
    "cache-control: no-cache"
    "anthropic-ratelimit-input-tokens-limit: 30000"
    "anthropic-ratelimit-input-tokens-remaining: 23000"
    "anthropic-ratelimit-input-tokens-reset: 2025-09-17T15:02:44Z"
    "anthropic-ratelimit-output-tokens-limit: 8000"
    "anthropic-ratelimit-output-tokens-remaining: 8000"
    "anthropic-ratelimit-output-tokens-reset: 2025-09-17T15:02:30Z"
    "anthropic-ratelimit-requests-limit: 50"
    "anthropic-ratelimit-requests-remaining: 48"
    "anthropic-ratelimit-requests-reset: 2025-09-17T15:02:32Z"
    "anthropic-ratelimit-tokens-limit: 38000"
    "anthropic-ratelimit-tokens-remaining: 31000"
    "anthropic-ratelimit-tokens-reset: 2025-09-17T15:02:30Z"
    "request-id: req_011CTEB8hedyJRogzbmruEur"
    "strict-transport-security: max-age=31536000; includeSubDomains; preload"
    "anthropic-organization-id: c366ace8-f74e-430f-865a-b88482ef56d8"
    "x-envoy-upstream-service-time: 1726"
    "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" => "Disponibilités pour un peeling cette semaine"
          ]
        ]
      ]
      [
        "role" => "assistant"
        "content" => [
          [
            "type" => "text"
            "text" => "Je vais vérifier les disponibilités pour un peeling cette semaine en consultant le planning des rendez-vous."
          ]
          [
            "type" => "tool_use"
            "id" => "toolu_01RxWcVxwuJepj4zHxU1upTo"
            "name" => "calculer_date"
            "input" => [
              "expression" => "cette semaine"
              "raw_user_text" => "Disponibilités pour un peeling cette semaine"
            ]
          ]
        ]
      ]
      [
        "role" => "user"
        "content" => [
          [
            "type" => "tool_result"
            "tool_use_id" => "toolu_01RxWcVxwuJepj4zHxU1upTo"
            "content" => "{"error":"Expression non reconnue: cette semaine","success":false,"help":"Exemples: \"dans 2 jours\", \"ds 2 j\", \"demain\", \"après-demain\", \"dans 3 semaines\", \"J+2\", \"2j\", \"dans 1 mois\", \"à 14h\"."}"
          ]
        ]
      ]
      [
        "role" => "assistant"
        "content" => [
          [
            "type" => "text"
            "text" => "Laissez-moi calculer les dates pour cette semaine et vérifier les créneaux disponibles :"
          ]
          [
            "type" => "tool_use"
            "id" => "toolu_01VYagApZGNqHT63qN6w1SSR"
            "name" => "calculer_date"
            "input" => [
              "expression" => "lundi"
              "time" => "09:00"
            ]
          ]
        ]
      ]
      [
        "role" => "user"
        "content" => [
          [
            "type" => "tool_result"
            "tool_use_id" => "toolu_01VYagApZGNqHT63qN6w1SSR"
            "content" => "{"error":"Expression non reconnue: lundi","success":false,"help":"Exemples: \"dans 2 jours\", \"ds 2 j\", \"demain\", \"après-demain\", \"dans 3 semaines\", \"J+2\", \"2j\", \"dans 1 mois\", \"à 14h\"."}"
          ]
        ]
      ]
      [
        "role" => "assistant"
        "content" => [
          [
            "type" => "tool_use"
            "id" => "toolu_01GVghWiui14oVWp2oKwbgWM"
            "name" => "rdv_lister"
            "input" => [
              "date_from" => "2025-01-27T00:00:00"
              "date_to" => "2025-02-03T00:00:00"
              "group_by_day" => true
              "order" => "asc"
            ]
          ]
        ]
      ]
      [
        "role" => "user"
        "content" => [
          [
            "type" => "tool_result"
            "tool_use_id" => "toolu_01GVghWiui14oVWp2oKwbgWM"
            "content" => "{"success":true,"range":{"from":"2025-01-27T00:00:00+00:00","to":"2025-02-03T00:00:00+00:00","timezone":"UTC"},"count":0,"total":0,"days":[]}"
          ]
        ]
      ]
    ]
    "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" => 1059
    "request_size" => 754
    "total_time" => 6.238952
    "namelookup_time" => 6.2E-5
    "connect_time" => 6.2E-5
    "pretransfer_time" => 0.000239
    "size_upload" => 10330.0
    "size_download" => 5974.0
    "speed_download" => 957.0
    "speed_upload" => 1655.0
    "upload_content_length" => 10330.0
    "starttransfer_time" => 0.000293
    "primary_ip" => "2607:6bc0::10"
    "primary_port" => 443
    "local_ip" => "2001:41d0:a:3134::1"
    "local_port" => 40482
    "http_version" => 3
    "protocol" => 2
    "scheme" => "HTTPS"
    "appconnect_time_us" => 62
    "connect_time_us" => 62
    "namelookup_time_us" => 62
    "pretransfer_time_us" => 239
    "starttransfer_time_us" => 293
    "total_time_us" => 6238952
    "effective_method" => "POST"
    "max_duration" => 300.0
    "start_time" => 1758121352.5624
    "original_url" => "https://api.anthropic.com/v1/messages"
    "pause_handler" => Closure(float $duration) {#2493
      class: "Symfony\Component\HttpClient\Response\CurlResponse"
      use: {
        $ch: CurlHandle {#2381 …}
        $multi: Symfony\Component\HttpClient\Internal\CurlClientState {#2426 …}
        $execCounter: -9223372036854775669
      }
    }
    "debug" => """
      * Found bundle for host api.anthropic.com: 0x559dd39eff60 [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: 7 (easy handle 0x559dd3aa10c0)\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-4482c278998eb2ba-53293263b8481ba9-1-1.277222-1758121352562\r\n
      newrelic: eyJ2IjpbMCwxXSwiZCI6eyJ0eSI6IkFwcCIsImFjIjoiNDM1NDkzNSIsImFwIjoiNDY2NDIwODA1IiwiaWQiOiI0NDgyYzI3ODk5OGViMmJhIiwidHIiOiI1MzI5MzI2M2I4NDgxYmE5IiwidHgiOiI1MzI5MzI2M2I4NDgxYmE5IiwicHIiOjEuMjc3MjIsInNhIjp0cnVlLCJ0aSI6MTc1ODEyMTM1MjU2Mn19\r\n
      traceparent: 00-000000000000000053293263b8481ba9-4482c278998eb2ba-01\r\n
      content-length: 10330\r\n
      \r\n
      * We are completely uploaded and fine\n
      < HTTP/2 200 \r\n
      < date: Wed, 17 Sep 2025 15:02:33 GMT\r\n
      < content-type: text/event-stream; charset=utf-8\r\n
      < cf-ray: 98097c358e75b6b4-CDG\r\n
      < cache-control: no-cache\r\n
      < anthropic-ratelimit-input-tokens-limit: 30000\r\n
      < anthropic-ratelimit-input-tokens-remaining: 19000\r\n
      < anthropic-ratelimit-input-tokens-reset: 2025-09-17T15:02:55Z\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:02:32Z\r\n
      < anthropic-ratelimit-requests-limit: 50\r\n
      < anthropic-ratelimit-requests-remaining: 49\r\n
      < anthropic-ratelimit-requests-reset: 2025-09-17T15:02:33Z\r\n
      < anthropic-ratelimit-tokens-limit: 38000\r\n
      < anthropic-ratelimit-tokens-remaining: 27000\r\n
      < anthropic-ratelimit-tokens-reset: 2025-09-17T15:02:32Z\r\n
      < request-id: req_011CTEB8ubizeVPrnyVbgU6M\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: 910\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:02:33 GMT"
    "content-type: text/event-stream; charset=utf-8"
    "cf-ray: 98097c358e75b6b4-CDG"
    "cache-control: no-cache"
    "anthropic-ratelimit-input-tokens-limit: 30000"
    "anthropic-ratelimit-input-tokens-remaining: 19000"
    "anthropic-ratelimit-input-tokens-reset: 2025-09-17T15:02:55Z"
    "anthropic-ratelimit-output-tokens-limit: 8000"
    "anthropic-ratelimit-output-tokens-remaining: 8000"
    "anthropic-ratelimit-output-tokens-reset: 2025-09-17T15:02:32Z"
    "anthropic-ratelimit-requests-limit: 50"
    "anthropic-ratelimit-requests-remaining: 49"
    "anthropic-ratelimit-requests-reset: 2025-09-17T15:02:33Z"
    "anthropic-ratelimit-tokens-limit: 38000"
    "anthropic-ratelimit-tokens-remaining: 27000"
    "anthropic-ratelimit-tokens-reset: 2025-09-17T15:02:32Z"
    "request-id: req_011CTEB8ubizeVPrnyVbgU6M"
    "strict-transport-security: max-age=31536000; includeSubDomains; preload"
    "anthropic-organization-id: c366ace8-f74e-430f-865a-b88482ef56d8"
    "x-envoy-upstream-service-time: 910"
    "via: 1.1 google"
    "cf-cache-status: DYNAMIC"
    "x-robots-tag: none"
    "server: cloudflare"
  ]
]