Medium node error : Forbidden - perhaps check your credentials?

Hi Everyone,

First of all, I’m new to this automation world. So, pardon me for my lack of knowledge.

I recently installed N8N on a droplet in order to use the Medium node (triggered by a webhook).

My problem is that I have an error with this Medium node.
ERROR: Forbidden - perhaps check your credentials?

I use the token auth method and it works if I try on my n8n desktop application (OSX). (OAuth seems to not be allowed anymore by sending a mail to access to developper section).

Someone else had the same error here AWS ERROR: Forbidden - perhaps check your credentials? - #2 by jon

But no real solution.

Thanks for your time, and happy to be a new member of the N8N community!

{
  "nodes": [
    {
      "parameters": {},
      "name": "Start",
      "type": "n8n-nodes-base.start",
      "typeVersion": 1,
      "position": [
        240,
        300
      ]
    },
    {
      "parameters": {
        "extractionValues": {
          "values": [
            {
              "key": "titre",
              "cssSelector": ".entry-title"
            },
            {
              "key": "intro",
              "cssSelector": ".intro",
              "returnValue": "html"
            },
            {
              "key": "transcription",
              "cssSelector": ".transcription",
              "returnValue": "html"
            }
          ]
        },
        "options": {}
      },
      "name": "HTML PODCAST",
      "type": "n8n-nodes-base.htmlExtract",
      "typeVersion": 1,
      "position": [
        640,
        300
      ]
    },
    {
      "parameters": {
        "url": "=https://hermits.fr/podcast/071-comment-humaniser-sa-marque/",
        "responseFormat": "string",
        "options": {}
      },
      "name": "HTTP PODCAST",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 1,
      "position": [
        460,
        300
      ]
    },
    {
      "parameters": {
        "title": "={{$json[\"titre\"]}}",
        "contentFormat": "html",
        "content": "={{$json[\"titre\"]}}\n\n{{$json[\"intro\"]}} \n\n{{$json[\"transcription\"]}}",
        "additionalFields": {}
      },
      "name": "Medium",
      "type": "n8n-nodes-base.medium",
      "typeVersion": 1,
      "position": [
        820,
        300
      ],
      "credentials": {
        "mediumApi": {
          "id": "5",
          "name": "Medium account"
        }
      }
    }
  ],
  "connections": {
    "Start": {
      "main": [
        [
          {
            "node": "HTTP PODCAST",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML PODCAST": {
      "main": [
        [
          {
            "node": "Medium",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP PODCAST": {
      "main": [
        [
          {
            "node": "HTML PODCAST",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}```


## Share the output returned by the last node
ERROR: Forbidden - perhaps check your credentials?

<!DOCTYPE html> <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]--> <!--[if IE 7]> <html class="no-js ie7 oldie" lang="en-US"> <![endif]--> <!--[if IE 8]> <html class="no-js ie8 oldie" lang="en-US"> <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]--> <head> <title>Please Wait... | Cloudflare</title> <meta charset="UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta name="robots" content="noindex, nofollow" /> <meta name="viewport" content="width=device-width,initial-scale=1" /> <link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/cf.errors.css" /> <!--[if lt IE 9]><link rel="stylesheet" id='cf_styles-ie-css' href="/cdn-cgi/styles/cf.errors.ie.css" /><![endif]--> <style>body{margin:0;padding:0}</style> <!--[if gte IE 10]><!--> <script> if (!navigator.cookieEnabled) { window.addEventListener('DOMContentLoaded', function () { var cookieEl = document.getElementById('cookie-alert'); cookieEl.style.display = 'block'; }) } </script> <!--<![endif]--> <script> //<![CDATA[ (function(){ window._cf_chl_opt={ cvId: "2", cType: "managed", cNounce: "92485", cRay: "7046dfca5d33979a", cHash: "ff5862fd3a63cc2", cUPMDTk: "\/v1\/me?__cf_chl_tk=iYBxM3BIj3RNjmzv2mM7NPTHktFOhtjvynGVKpNNc1o-1651390880-0-gaNycGzNB6U", cFPWv: "g", cTTimeMs: "1000", cLt: "n", cRq: { ru: "aHR0cHM6Ly9hcGkubWVkaXVtLmNvbS92MS9tZQ==", ra: "YXhpb3MvMC4yMS40", rm: "R0VU", d: "buB5jE4r8o21TVH8KVJVBabEUOZnvjEWTfo72AbCfETIObe46aYBxIR6YxALlsV7976cQWqwGIXbfU1YEWe9xP8OZVg27TFPlTT4JRKIyOiCIvcYpMruzD+MfB8R+rPyzavsvp65cpiPzsexdDLu71PgEj3lhpqtJirJ276aX3jUA76lAagZv6d15M5IC4Y2qk3JMSAwo6IkRhuIJ6zcp3yg221agBRzJIDjVgtC/XKHF8mKn4ZH6UIc8eHZeVZ1+8MY4o7EvCtQIH5cZOr3bc9wqcYOYd2qVYurUW6gdpAo2fBJETUAWo5AsjHcoJXs4Z5TOnn9yqOQsCdE+4fovCg+jYqgVGrTv6Gl14HF9FACNqAQvqbu6Q7lE8qzbeN8CT2MDFn/CYmdehabrTSDNolm5P0Unx/IAd5ei+Vc+jItCuClyY83wfVWisbX6lzfyWuhDFmS7vK/2mS/XswuHVg/9vmzZTDYDco2cD8Z56WWttVdIm5yqdOddBUDMV5WkhLZrLpQryPsVD779BA8Kq71GfY6ZKZIzbgMruqzqEpfptNx/vXzw7Dc2gGIqd8453ZUap16fqUL3+VS9eBd/c3RxBZW4lDuZuy227afoDBGx5zWRD/Ayx98tFPzo23CaCvU9DtCJfNmcBnyt8CfBQ==", t: "MTY1MTM5MDg4MC4zNzYwMDA=", m: "IQ68ep52S436l0puiM9uSzEQj7Oab9EH+2ArjbO7Il8=", i1: "W0546d0NDae85IvJa8qsgA==", i2: "DpRV1/1FJfERNP4auZwBsg==", zh: "Ycgpu9r177LxjbQGFsmz/e0ei9K/7m7t1CDoKCYIB7I=", uh: "2xI+8OKSoP3CnABeI0AAgkHbaDBjcfKYlizy+ORx958=", hh: "anF0+jJ+aLWOhUNoWDZ6C4KZGhtuyVFdEzAtU1jHiDs=", } }; }()); //]]> </script> <style> #cf-wrapper #spinner {width:69px; margin: auto;} #cf-wrapper #cf-please-wait{text-align:center} .attribution {margin-top: 32px;} .bubbles { background-color: #f58220; width:20px; height: 20px; margin:2px; border-radius:100%; display:inline-block; } #cf-wrapper #challenge-form { padding-top:25px; padding-bottom:25px; } #cf-hcaptcha-container { text-align:center;} #cf-hcaptcha-container iframe { display: inline-block;} @keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} } #cf-wrapper #cf-bubbles { width:69px; } @-webkit-keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} } #cf-bubbles > .bubbles { animation: fader 1.6s infinite;} #cf-bubbles > .bubbles:nth-child(2) { animation-delay: .2s;} #cf-bubbles > .bubbles:nth-child(3) { animation-delay: .4s;} </style> </head> <body> <div id="cf-wrapper"> <div class="cf-alert cf-alert-error cf-cookie-error" id="cookie-alert" data-translate="enable_cookies">Please enable cookies.</div> <div id="cf-error-details" class="cf-error-details-wrapper"> <div class="cf-wrapper cf-header cf-error-overview"> <h1 data-translate="managed_challenge_headline">Please wait...</h1> <h2 class="cf-subheadline"><span data-translate="managed_checking_msg">We are checking your browser...</span> api.medium.com</h2> </div> <div class="cf-section cf-highlight cf-captcha-container"> <div class="cf-wrapper"> <div class="cf-columns two"> <div class="cf-column"> <div class="cf-highlight-inverse cf-form-stacked"> <form class="challenge-form managed-form" id="challenge-form" action="/v1/me?__cf_chl_f_tk=iYBxM3BIj3RNjmzv2mM7NPTHktFOhtjvynGVKpNNc1o-1651390880-0-gaNycGzNB6U" method="POST" enctype="application/x-www-form-urlencoded"> <div id='cf-please-wait'> <div id='spinner'> <div id="cf-bubbles"> <div class="bubbles"></div> <div class="bubbles"></div> <div class="bubbles"></div> </div> </div> <p data-translate="please_wait" id="cf-spinner-please-wait">Please stand by, while we are checking your browser...</p> <p data-translate="redirecting" id="cf-spinner-redirecting" style="display:none">Redirecting...</p> </div> <input type="hidden" name="md" value="i4z4973n67S428XdNrp.frVYLwRGotGC2Rml2pzOrBU-1651390880-0-AWyMUBU8twcVIkkNRSbEc-FB8Z2VtlCBPv4g-Uzhl68vIxOtMN3iAMa-B8Y5pdrocKckUS2DKrWJiG12xVoDppful7ImxiVhZmb_qxhS016cuRw3BwVtq0zCBEmZOu-ecNHV3lT-Z8T70ETrQvboZnAIdSJNLt2HL7yi2vB7Q9rrGoJxuAwzFmZIYpqctEyGNVohkC1RIE2LutaFisdp_ryzFwWpvgDV97SgrjnYld2D3CwnwplLcBB3_Spnz6raDPcvd358_lTPSxIZFeiIoJ1NPRKD3_vNm28Dnj1T061YWLEgJ7WFFt4jrOgHlENWudO_G1S8LOjBmkyrzQ7OJ9tqXkPk2qxle9jOh6djlZMsdVFe6C2_JWYBV3dEbzYsxHei3uzEAiLOteHlbXht6QVZBiThM91nnkAsHYh2ZB5ccMlTqwxYud3VCbsP_KiHNo10FTufyvFMTW6QVGUEzI_P32qyz47sEqJ0qB9JIKaIxkcSyVeiw5ZMitFZNip9HENV0HbO1FKVWb10-dBDo8QSEoyP76AKLLYyloGfh_KLwMZMh43hI2l1NaXzIWBTlAc8uSMNGcqziNg96yq4X0mMbFbRGJASf3H--0GJafiPVz4aD07VuAhfpx6lg_wLicUfCsg3dTtGKlmZ4bwN6JvrCZXTwC3AZHxCVsYaWJ2KnP2x7ccNc5epehxZseApTwt0NkqqrNZeM95ccOnLSK3_eMmT2iOPq3iYPflV7r376YbV-_R9sqyxCWImt81cUDzKzO9-g2M5YXk7i0sw8M0Eo4lfUHKPVjwcqrdS7mKMwUbfIEtUJav3JLULb0uut7-xHwUOFLhEzZva3NfXNQQlAz7zbNd1dN8qbcrtN_wv" /> <input type="hidden" name="r" value="3csuUQYISY6Wn4RXJn8yx7XaFatNEAOFo_OVEkAW5ug-1651390880-0-ATix+ZFxDsom5LrwQsfTWy4qo0mEB0PUjouCLEW8SI+0eT7o+wKZIBW7MX1JSmiDs8aKBkZKxaS821PAeq7b0I3ljzkJpPpYkyC5jjQwuS+ac9ZLbL1hXzf/ix1ifu0V2+UOti0uV4V+7vsM/eVMMdTuXOQjagSJ65yFUQ5yeCLw84wfO3GYNg4DLqceKTZqMs9gIbpNvXLll3UiMCKwx6/fjAAs783WnfGfJUcrkArtRB0Q7LJE/1F1SdlOdIUz5OdHrKXuJ4SF6jcpRQ3aWGKe4fr5sNNtUq77NLpoFM/YmVQ9aaH+zoMCjLpJBoMY36u0+n8RrkQURMlXapbQuC7bghVwXg+vhLYoEUUpsniwfGoRj+DWSBhqvhpJgUpeXuo4UCB6s4votP4pNwK7B3WC0d/WbQaMu3UiIGACCz8YsIRnH89/NvAGd0FYRtv1blkkUIDZfr5wE5UJC+PRRIHzUlE/GREk8FYkUL+ymhvcf/0kHFedHEgzhnvpwwiWJHYILboTv2qxjmO5qwUOCin/JqNqUJ651PRtEbcwtfZV/Rf7DxNk8E0chSeHne+GkCx3qfeuxqwNZb6VrbEjO6T3oZw6/J9uybMCOfHXCi3Gp2GP0W+c7K6Rz2l/NGhaIpzVV/y5l2SdEfHZ+3PggGFfygXB+icHUU5oYD8PqquJmEY3JKDbjH2GyWVwkQFr4NSn8aXu7P0L6paP/8ZuPX44cb5B80A0fmn1ZI7n2RabxSV6Pd44/Dzroz4BBxZTTjVWFM5Ggv/45bYnj8pOZgQnleiLgPGQaScpny4gFFAkvTYrJPEMmUdBS+g9zIPOQO1HZDrZoOlxuLUAgoNi8h2JlnwXJ7DrYGPzxUxW9Bj9VgBknN7A5lE/ta6aX54xcMyY0kjDfWEA7KCYbH/UVnNQ8kH5cz3zAhMvEnjKnOpBC7xIzLvYynLgzyM+r6TF+9OTBjJj7/rBvAcWxZ9ZdtTESW4pwECHUOkioOTK7xGdO1Kqx1byKDd8TCV2ebBurFfh19yvSSYf5plLW8Q/GyrmaYqQuv7t/7rrw3qlzVdCOqhlMWzjylo7l/rI6aqjWbEMA/S6/PWtVJWvHvm2dFyodhiE6iljif/Hmo4uNgPpy0FCWgwJVVMuZrO5jdewhswpmvX9ccDYT02SJyyploI/I7Bgc9CqcJmc3EKmyfyY9aVhfXwVE03rmvVC2jc6Sqjpqy7wqL3jbvxVJXL65utvtE5zu8lVHtTKRqBr5GKyh5G2tOV6HaCHcercABRKgblbc3IHJqG/npr+IFBavbDGIDnGuTI/7SimDuJVJTe5YHR4m2fWIQwOfzd3UcBzriEwunu+hAjJE7c/Uk9P6vbdm5dHZ0XHVFpxbTCO9ve8HK1YENDwJE358T32fC5sAPMrmH+KBWNqk3/ZtSSwZDIfglxB/XDyk3Vc5WRI1+F4hTknvTHxSvktlYnpimUwtRKhkDA4WcAacJ57kBAw1oAISuea6qqNf6gxaJ4MLHlnOm13yXfoyxIAMPBWs3NEzZDeXuVCs9IbS5tyLueWHjvEAscWkqqWjwZX/a/6rlGe8m+SauxmvSskcJyJm5z4mEt8y0X1Vc7IB6nntUB4U/1BEgexKPAsNPT2D1R3K5EXyzQ4ypKARY4sKdJgKph7zkx9+rbo6u1LfqtgJ53f7BmyAHM1swTixhpuEVA6QVYc5RJzLB5CL6MWZXPJHWA4EdkduLIo10iZRQ73YQxXxg6Hm0ny/JlXpNAfsy8OE4wFSRIN86IoTrDnwD3aEnlRQ2wLT1x98gQA+3z6860fdX6PFhePqilTVXPprwe7VZb84F330kJhibFatJ9SNz575pF7AZEPztD1s8/tABXdQWwJSp5GhQO1GDetyGJ/Srs/"> <input type="hidden" name="vc" value="fa4935594bc8bc99d57943819a6d36a7"> <noscript id="cf-captcha-bookmark" class="cf-captcha-info"> <h1 data-translate="turn_on_js" style="color:#bd2426;">Please turn JavaScript on and reload the page.</h1> </noscript> <div id="no-cookie-warning" class="cookie-warning" data-translate="turn_on_cookies" style="display:none"> <p data-translate="turn_on_cookies" style="color:#bd2426;">Please enable Cookies and reload the page.</p> </div> <script> //<![CDATA[ var a = function() {try{return !!window.addEventListener} catch(e) {return !1} }, b = function(b, c) {a() ? document.addEventListener("DOMContentLoaded", b, c) : document.attachEvent("onreadystatechange", b)}; b(function(){ var cookiesEnabled=(navigator.cookieEnabled)? true : false; if(!cookiesEnabled){ var q = document.getElementById('no-cookie-warning');q.style.display = 'block'; } }); //]]> </script> <div id="trk_captcha_js" style="background-image:url('/cdn-cgi/images/trace/captcha/nojs/h/transparent.gif?ray=7046dfca5d33979a')"></div> </form> <script> //<![CDATA[ (function(){ var isIE = /(MSIE|Trident\/|Edge\/)/i.test(window.navigator.userAgent); var trkjs = isIE ? new Image() : document.createElement('img'); trkjs.setAttribute("src", "/cdn-cgi/images/trace/managed/js/transparent.gif?ray=7046dfca5d33979a"); trkjs.id = "trk_managed_js"; trkjs.setAttribute("alt", ""); document.body.appendChild(trkjs); var cpo=document.createElement('script'); cpo.type='text/javascript'; cpo.src="/cdn-cgi/challenge-platform/h/g/orchestrate/managed/v1?ray=7046dfca5d33979a"; window._cf_chl_opt.cOgUQuery = location.search === '' && location.href.indexOf('?') !== -1 ? '?' : location.search; window._cf_chl_opt.cOgUHash = location.hash === '' && location.href.indexOf('#') !== -1 ? '#' : location.hash; if (window._cf_chl_opt.cUPMDTk && window.history && window.history.replaceState) { var ogU = location.pathname + window._cf_chl_opt.cOgUQuery + window._cf_chl_opt.cOgUHash; history.replaceState(null, null, "\/v1\/me?__cf_chl_rt_tk=iYBxM3BIj3RNjmzv2mM7NPTHktFOhtjvynGVKpNNc1o-1651390880-0-gaNycGzNB6U" + window._cf_chl_opt.cOgUHash); cpo.onload = function() { history.replaceState(null, null, ogU); }; } document.getElementsByTagName('head')[0].appendChild(cpo); }()); //]]> </script> </div> </div> <div class="cf-column"> <div class="cf-screenshot-container"> <span class="cf-no-screenshot"></span> </div> </div> </div> </div> </div> <div class="cf-section cf-wrapper"> <div class="cf-columns two"> <div class="cf-column"> <h2 data-translate="why_captcha_headline">Why do I have to complete a CAPTCHA?</h2> <p data-translate="why_captcha_detail">Completing the CAPTCHA proves you are a human and gives you temporary access to the web property.</p> </div> <div class="cf-column"> <h2 data-translate="resolve_captcha_headline">What can I do to prevent this in the future?</h2> <p data-translate="resolve_captcha_antivirus">If you are on a personal connection, like at home, you can run an anti-virus scan on your device to make sure it is not infected with malware.</p> <p data-translate="resolve_captcha_network">If you are at an office or shared network, you can ask the network administrator to run a scan across the network looking for misconfigured or infected devices.</p> </div> </div> </div> <div class="cf-error-footer cf-wrapper w-240 lg:w-full py-10 sm:py-4 sm:px-8 mx-auto text-center sm:text-left border-solid border-0 border-t border-gray-300"> <p class="text-13"> <span class="cf-footer-item sm:block sm:mb-1">Cloudflare Ray ID: <strong class="font-semibold">7046dfca5d33979a</strong></span> <span class="cf-footer-separator sm:hidden">&bull;</span> <span class="cf-footer-item sm:block sm:mb-1"><span>Your IP</span>: 188.166.99.208</span> <span class="cf-footer-separator sm:hidden">&bull;</span> <span class="cf-footer-item sm:block sm:mb-1"><span>Performance &amp; security by</span> <a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing" id="brand_link" target="_blank">Cloudflare</a></span> </p> </div><!-- /.error-footer --> </div> </div> <script> window._cf_translation = {}; </script> </body> </html>

Details


## Information on your n8n setup
- **n8n version: 0.174.0**
- **Database you're using (default: SQLite):**
- **Running n8n with the execution process [own(default), main]:**
- **Running n8n via [Docker]:**

Hey @Mickael_C, welcome to the community!

I am sorry to hear you’re having trouble here. I just gave this a go on my end with a fresh Medium account and didn’t run into any trouble creating a new post via n8n:

The post appears on Medium as expected:

I assume you have already double-checked your token doesn’t contain a typo (or whitespace at the start or end)?

Are you by any chance trying to submit a large number of posts in a short period of time? The response coming from Medium which you have shared includes a Captcha text (“Why do I have to complete a CAPTCHA? (…)”), suggesting that Medium might not like the frequency with which your are sending data. You might want to try and wait for a bit and then submitting only one post at a time if that’s the case.

Hi @MutedJam ,

Thank you very much for your answer. Yes I had some issues with posting multiple times in order to test the node. But on my desktop app, it works… And my API key is correct, it works on my desktop app too.

I tried with a fresh Medium account, same error.

And I have another problem today that might help us to understand this issue. In an another workflow, I have a RSS feed wich sends me new articles through telegram. And today, only with medium, there’s a 403 error. Maybe an problem with my droplet instance? Is my droplet IP banned?

Thank you very much again for your time and patience.

Hey @Mickael_C,

It looks like it might be a temporary thing, The error you shared shows that Cloudflare has seen too many requests and wants you to complete a captcha.

It could be that if you log into your account in the browser there will be an option but other than that it would be a case of waiting or reaching out to Medium support as we have no control over that part of the process.

Hello @Jon ,

Thank you for your answer. It makes sens to me, you’re right. But why does it works on my desktop app (IOS)? Is it about my droplet IP? I’ll wait some days and tell you if my problem persist.

Thanks again, N8N has a great community!

Hey @Mickael_C,

Yeah it will be the droplet IP that has triggered it, What has happened is Cloudflare appears to have jumped in because it thinks you are attacking Medium with all the requests.

In theory you could just make an image from your droplet and deploy that on a new instance and that would give a new IP you can use… or export everything and set it up again.

Oh ok @Jon , that seems to be a great idea, I’ll try it now. Do you have a link to achieve an image? Thanks

Hey @Mickael_C,

I don’t but you called it a droplet so I assumed you are using Digital Ocean. I think it is just an option in the management portal.

@Jon I did a snapshot and deployed it on a new droplet, same error… It’s weird. New IP, new medium account.

That is odd, I wish I had another answer for you but it is sadly out of our control.

Has it started working today or do you still get an error about needing to perform a captcha?

@Jon It’s really weird. Everything works fine, but Medium… I still have this error. Even if I use getAll node function.

Is it a defeat for us?

Thanks again for your time.

Hey @Mickael_C,

It all depends on what the error message says, if it is still the cloudflare response I am not sure what we can do so that would be worth a ticket or question to Medium or Cloudflare.

If you are still making a lot of requests though you will keep getting blocked so it could be a case of putting a pause in the workflow.

It’s still about the captcha. And I have only one post request in my workflow. I’ll try to find a solution. Thank you @Jon

1 Like