POST https://review-564-fix-mc-e1i3yp.sx1.dev/mcp/tools/createCourseOutline

HTTP Client

1 Total requests
1 HTTP errors

Clients

http_client 1

Requests

POST https://api.openai.com/v1/chat/completions
Request options
[
  "headers" => [
    "Authorization" => "Bearer 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"
    "Content-Type" => "application/json"
  ]
  "json" => [
    "model" => "gpt-4o"
    "temperature" => 0.3
    "max_tokens" => null
    "top_p" => null
    "frequency_penalty" => null
    "presence_penalty" => null
    "messages" => [
      [
        "role" => "user"
        "content" => """
          You are an expert corporate training curriculum designer. Your task is to parse raw course notes and ideas into a fully structured course document.\n
          \n
          ---\n
          \n
          ## Raw Course Notes:\n
          Tailored SharePoint for Owners and Power Automate 1 day training course for University of Nottingham\n
          \n
          Creating a New Site\n
          - Create a Site\n
          - Design Your SharePoint Site\n
          \n
          Adding and Configuring Libraries\n
          - Configure a Document Library for a Team Site\n
          - Configure the Site Assets Library for a Site\n
          - Add a Wiki to Your Site\n
          \n
          Adding and Configuring Lists\n
          - Add an Announcement List\n
          - Add a Task List\n
          - Add Contact and Calendar Lists\n
          - Add a Blog\n
          - Add a Custom List\n
          \n
          Configuring Site Settings\n
          - Configure Site Search Options\n
          - Configure Site Administration Settings\n
          - Configure Site Navigation Settings\n
          \n
          Assigning Permission and Access Rights\n
          - Configure Site Permissions and Security Options\n
          \n
          Introduction to Power Automate\n
          - Creating an approval Automation\n
          - Creating a time triggered Automation\n
          \n
          ## Customer:\n
          University of Nottingham\n
          \n
          ---\n
          \n
          ## Instructions:\n
          \n
          1. **Extract or infer the course title** from the notes. It should be professional and concise (max 80 characters).\n
          2. **Determine the duration** in days (minimum 0.5, typically 1-3 days for corporate training).\n
          3. **Identify the level**: Introduction, Intermediate, or Advanced based on the content complexity.\n
          4. **Define the target audience** (2-3 bullet points describing who this course is for).\n
          5. **Create 4-8 learning outcomes** that describe what participants will be able to do after completing the course.\n
          6. **Generate a structured outline** with sections and topics in YAML format suitable for the course.\n
          7. **Write a brief description** (1-2 paragraphs) suitable for marketing the course.\n
          8. **Write course information** covering format, prerequisites, and what participants should expect.\n
          \n
          ---\n
          \n
          ## Output Format:\n
          \n
          Return a JSON object with the following structure:\n
          \n
          ```json\n
          {\n
            "title": "Course Title (max 80 chars)",\n
            "headLine": "Hero subheading for the course page (max 160 chars)",\n
            "duration": 1.0,\n
            "level": "Introduction",\n
            "targetAudience": [\n
              "Business professionals who want to...",\n
              "Team leaders looking to...",\n
              "Anyone interested in..."\n
            ],\n
            "learningOutcomes": [\n
              "Understand the fundamentals of...",\n
              "Apply practical techniques for...",\n
              "Create and manage...",\n
              "Analyze and interpret..."\n
            ],\n
            "description": "A comprehensive course covering...",\n
            "courseInformation": "This course is delivered... Prerequisites include...",\n
            "outline": "- title : Section Title\n  topics :\n    - title : Topic 1\n    - title : Topic 2\n    - title : Topic 3\n- title : Another Section\n  topics :\n    - title : Topic A\n    - title : Topic B"\n
          }\n
          ```\n
          \n
          The `outline` field MUST be in YAML format matching this exact structure:\n
          ```yaml\n
          - title : Section Title\n
            topics :\n
              - title : Topic 1\n
              - title : Topic 2\n
              - title : Topic 3\n
          - title : Another Section\n
            topics :\n
              - title : Topic A\n
              - title : Topic B\n
          ```\n
          \n
          Each section has a `title` key and a `topics` array. Each topic has a `title` key. Use spaces around colons (` : `) as shown.\n
          \n
          Parse the notes and generate the structured course now:\n
          """
      ]
    ]
  ]
]
Response 401
[
  "info" => [
    "header_size" => 1707
    "request_size" => 378
    "total_time" => 0.172546
    "namelookup_time" => 0.003265
    "connect_time" => 0.004649
    "pretransfer_time" => 0.009973
    "size_upload" => 3668.0
    "size_download" => 413.0
    "speed_download" => 2393.0
    "speed_upload" => 21258.0
    "download_content_length" => 413.0
    "upload_content_length" => 3668.0
    "starttransfer_time" => 0.00998
    "primary_ip" => "172.66.0.243"
    "primary_port" => 443
    "local_ip" => "10.1.0.125"
    "local_port" => 39370
    "http_version" => 3
    "protocol" => 2
    "scheme" => "HTTPS"
    "appconnect_time_us" => 9889
    "connect_time_us" => 4649
    "namelookup_time_us" => 3265
    "pretransfer_time_us" => 9973
    "starttransfer_time_us" => 9980
    "total_time_us" => 172546
    "effective_method" => "POST"
    "start_time" => 1771326378.8675
    "original_url" => "https://api.openai.com/v1/chat/completions"
    "pause_handler" => Closure(float $duration) {#1466
      class: "Symfony\Component\HttpClient\Response\CurlResponse"
      use: {
        $ch: CurlHandle {#1469 …}
        $multi: Symfony\Component\HttpClient\Internal\CurlClientState {#757 …}
        $execCounter: -9223372036854775808
      }
    }
    "debug" => """
      *   Trying 172.66.0.243:443...\n
      * Connected to api.openai.com (172.66.0.243) port 443 (#0)\n
      * ALPN: offers h2,http/1.1\n
      *  CAfile: /etc/ssl/certs/ca-certificates.crt\n
      *  CApath: none\n
      * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384\n
      * ALPN: server accepted h2\n
      * Server certificate:\n
      *  subject: CN=api.openai.com\n
      *  start date: Jan 12 00:39:15 2026 GMT\n
      *  expire date: Apr 12 01:39:13 2026 GMT\n
      *  subjectAltName: host "api.openai.com" matched cert's "api.openai.com"\n
      *  issuer: C=US; O=Google Trust Services; CN=WE1\n
      *  SSL certificate verify ok.\n
      * using HTTP/2\n
      * h2h3 [:method: POST]\n
      * h2h3 [:path: /v1/chat/completions]\n
      * h2h3 [:scheme: https]\n
      * h2h3 [:authority: api.openai.com]\n
      * h2h3 [authorization: Bearer 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]\n
      * h2h3 [content-type: application/json]\n
      * h2h3 [accept: */*]\n
      * h2h3 [user-agent: Symfony HttpClient (Curl)]\n
      * h2h3 [accept-encoding: gzip]\n
      * h2h3 [content-length: 3668]\n
      * Using Stream ID: 1 (easy handle 0x7fc687576ad0)\n
      > POST /v1/chat/completions HTTP/2\r\n
      Host: api.openai.com\r\n
      authorization: Bearer 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\r\n
      content-type: application/json\r\n
      accept: */*\r\n
      user-agent: Symfony HttpClient (Curl)\r\n
      accept-encoding: gzip\r\n
      content-length: 3668\r\n
      \r\n
      * We are completely uploaded and fine\n
      * old SSL session ID is stale, removing\n
      < HTTP/2 401 \r\n
      < date: Tue, 17 Feb 2026 11:06:19 GMT\r\n
      < content-type: text/plain\r\n
      < content-length: 413\r\n
      < x-openai-ide-error-code: invalid_api_key\r\n
      < x-openai-authorization-error: 401\r\n
      < x-error-json: ewogICJlcnJvciI6IHsKICAgICJtZXNzYWdlIjogIkluY29ycmVjdCBBUEkga2V5IHByb3ZpZGVkOiBzay1zdmNhYyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqRTJNQS4gWW91IGNhbiBmaW5kIHlvdXIgQVBJIGtleSBhdCBodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vYWNjb3VudC9hcGkta2V5cy4iLAogICAgInR5cGUiOiAiaW52YWxpZF9yZXF1ZXN0X2Vycm9yIiwKICAgICJjb2RlIjogImludmFsaWRfYXBpX2tleSIsCiAgICAicGFyYW0iOiBudWxsCiAgfSwKICAic3RhdHVzIjogNDAxCn0=\r\n
      < x-request-id: req_b91c06732113466391721ca6b736d66c\r\n
      < x-datadog-trace-id: 6274008177632592561\r\n
      < x-datadog-parent-id: 11414616362409944036\r\n
      < x-datadog-sampling-priority: 0\r\n
      < x-openai-internal-caller: unknown_through_ide\r\n
      < x-openai-proxy-wasm: v0.1\r\n
      < server: cloudflare\r\n
      < cf-cache-status: DYNAMIC\r\n
      * Added cookie __cf_bm="mgLayzMqDQHxFBhV0No6ypgmw2e98pm8FXakzKTxT7M-1771326378.8782551-1.0.1.1-GT4aZr6wgiTJIwXAErnlwz4F8SyMPI4TAkHVgqQwL0DeNBJbM75Z4WCssLsMTUheQecI.MT65uEq7CdCTDj7IrIeV2_OPz9K6bJgYtJxShA.PzthMWzp0UW7H5rA_cuf" for domain api.openai.com, path /, expire 1771328179\n
      < set-cookie: __cf_bm=mgLayzMqDQHxFBhV0No6ypgmw2e98pm8FXakzKTxT7M-1771326378.8782551-1.0.1.1-GT4aZr6wgiTJIwXAErnlwz4F8SyMPI4TAkHVgqQwL0DeNBJbM75Z4WCssLsMTUheQecI.MT65uEq7CdCTDj7IrIeV2_OPz9K6bJgYtJxShA.PzthMWzp0UW7H5rA_cuf; HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Tue, 17 Feb 2026 11:36:19 GMT\r\n
      * Added cookie _cfuvid="kRTM.6piVjNugEhfKZ5ZhXOomGHu.CURkAsIGIXkMGU-1771326378.8782551-1.0.1.1-BkxbI9_mhkdTlooznzgl5tqnbI_EIx2jWwdmdNc8knk" for domain api.openai.com, path /, expire 0\n
      < set-cookie: _cfuvid=kRTM.6piVjNugEhfKZ5ZhXOomGHu.CURkAsIGIXkMGU-1771326378.8782551-1.0.1.1-BkxbI9_mhkdTlooznzgl5tqnbI_EIx2jWwdmdNc8knk; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com\r\n
      < strict-transport-security: max-age=31536000; includeSubDomains; preload\r\n
      < x-content-type-options: nosniff\r\n
      < cf-ray: 9cf4d08bfe714e1a-LHR\r\n
      < alt-svc: h3=":443"; ma=86400\r\n
      < \r\n
      """
  ]
  "response_headers" => [
    "HTTP/2 401 "
    "date: Tue, 17 Feb 2026 11:06:19 GMT"
    "content-type: text/plain"
    "content-length: 413"
    "x-openai-ide-error-code: invalid_api_key"
    "x-openai-authorization-error: 401"
    "x-error-json: ewogICJlcnJvciI6IHsKICAgICJtZXNzYWdlIjogIkluY29ycmVjdCBBUEkga2V5IHByb3ZpZGVkOiBzay1zdmNhYyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqRTJNQS4gWW91IGNhbiBmaW5kIHlvdXIgQVBJIGtleSBhdCBodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vYWNjb3VudC9hcGkta2V5cy4iLAogICAgInR5cGUiOiAiaW52YWxpZF9yZXF1ZXN0X2Vycm9yIiwKICAgICJjb2RlIjogImludmFsaWRfYXBpX2tleSIsCiAgICAicGFyYW0iOiBudWxsCiAgfSwKICAic3RhdHVzIjogNDAxCn0="
    "x-request-id: req_b91c06732113466391721ca6b736d66c"
    "x-datadog-trace-id: 6274008177632592561"
    "x-datadog-parent-id: 11414616362409944036"
    "x-datadog-sampling-priority: 0"
    "x-openai-internal-caller: unknown_through_ide"
    "x-openai-proxy-wasm: v0.1"
    "server: cloudflare"
    "cf-cache-status: DYNAMIC"
    "set-cookie: __cf_bm=mgLayzMqDQHxFBhV0No6ypgmw2e98pm8FXakzKTxT7M-1771326378.8782551-1.0.1.1-GT4aZr6wgiTJIwXAErnlwz4F8SyMPI4TAkHVgqQwL0DeNBJbM75Z4WCssLsMTUheQecI.MT65uEq7CdCTDj7IrIeV2_OPz9K6bJgYtJxShA.PzthMWzp0UW7H5rA_cuf; HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Tue, 17 Feb 2026 11:36:19 GMT"
    "set-cookie: _cfuvid=kRTM.6piVjNugEhfKZ5ZhXOomGHu.CURkAsIGIXkMGU-1771326378.8782551-1.0.1.1-BkxbI9_mhkdTlooznzgl5tqnbI_EIx2jWwdmdNc8knk; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com"
    "strict-transport-security: max-age=31536000; includeSubDomains; preload"
    "x-content-type-options: nosniff"
    "cf-ray: 9cf4d08bfe714e1a-LHR"
    "alt-svc: h3=":443"; ma=86400"
  ]
  "response_json" => [
    "error" => [
      "message" => "Incorrect API key provided: sk-svcac***********************************************************************************************************************************************************E2MA. You can find your API key at https://platform.openai.com/account/api-keys."
      "type" => "invalid_request_error"
      "code" => "invalid_api_key"
      "param" => null
    ]
    "status" => 401
  ]
]