{"id":19026528,"date":"2026-09-22T17:33:27","date_gmt":"2026-09-22T17:33:27","guid":{"rendered":"https:\/\/wordpress.org\/support\/topic\/auto-connect-fails-api-returns-401-unauthorized\/"},"modified":"2026-09-22T17:33:27","modified_gmt":"2026-09-22T17:33:27","slug":"auto-connect-fails-api-returns-401-unauthorized","status":"publish","type":"topic","link":"https:\/\/wordpress.org\/support\/topic\/auto-connect-fails-api-returns-401-unauthorized\/","title":{"rendered":"Auto-connect fails: API returns 401 &#8220;Unauthorized.&#8221;"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hi threadi,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">plugin 1.1.4 on WordPress 7.1.2 \/ PHP 8.3, ProvenExpert Premium account. Auto-connect never completes. I traced it:<\/p>\n\n\n\n<ul>\n<li>The callback <code>\/provenexpertplugin\/&lt;hash&gt;\/?pluginId=\u2026&amp;setupToken=\u2026&amp;clientId=\u2026<\/code> reaches <code>Setup::check_for_setup_return<\/code> fine (rewrite rule and query var are registered).<\/li>\n\n\n\n<li><code>Api::connect()<\/code> then POSTs <code>{\"setupToken\":\u2026}<\/code> to <code>https:\/\/www.provenexpert.com\/restapi\/v1\/plugins\/&lt;pluginId&gt;\/connect<\/code> and gets <strong>HTTP 401<\/strong> <code>{\"status\":\"error\",\"errors\":[\"Unauthorized.\"]}<\/code>, no WWW-Authenticate header. Logged 6 times on 21\/22 Sep 2026 in <code>wp_provenexpert_logs<\/code>.<\/li>\n\n\n\n<li>Outbound HTTP works, no <code>http_request_args<\/code>\/<code>pre_http_request<\/code> filters touch provenexpert.com.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">One thing I noticed in <code>Request::send()<\/code>: the body is JSON-encoded but no <code>Content-Type: application\/json<\/code> header is set, so WP sends it as form-urlencoded. Could that be what the connect endpoint rejects? Or does the endpoint require something else (Basic auth, clientId)?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;ve also contacted ProvenExpert support with the pluginId. Happy to test a patch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Thanks!<\/p>\n","protected":false},"template":"","class_list":["post-19026528","topic","type-topic","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic\/19026528","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic"}],"about":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/types\/topic"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic\/19026528\/revisions"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/media?parent=19026528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}