Jira Rest API: can't exchange authorization code for access token

I want to make API requests to Jira Rest API to automize creating and deleting of jira users. But to make this request I need to overcome OAuth 2.0 (3LO) to get needed coudId. I’m trying to reproduce steps mentioned here: link, but I can’t exchange authorization code for access token. I just have { error: ‘access_denied’, error_description: ‘Unauthorized’ }.
I have my requests in my backend service:

 `  async getAccessToken(ctx) {
    const { authCode } = ctx.params
    const accessCode = await fetch('https://auth.atlassian.com/oauth/token',
      {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        data: {
          grant_type: 'authorization_code',
          client_id: 'mFbNAVGwiHgZQj79YUHDvQ07BVIJboUx',
          client_secret: 'gJAz6PQYnQp-lHzMfFAcKPnSJQwOsM0as4PwJ1CQP9iFlBxKpvzJ1djNJ8gBf--t',
          code: authCode,
          redirect_uri: 'http://localhost:3201/courses/june_2020_manual_qa_technical_support?',
        },
      },
    ).then(data => data.json()).catch(e => console.log(e.message))
  }
  async getAuthorizationCode(ctx) {
    const YOUR_USER_BOUND_VALUE = 1230989
    const authorizationCode = await fetch(`https://auth.atlassian.com/authorize?audience=api.atlassian.com&client_id=mFbNAVGwiHgZQj79YUHDvQ07BVIJboUx&scope=read%3Ajira-user%20read%3Ajira-work%20manage%3Ajira-project%20manage%3Ajira-configuration%20write%3Ajira-work%20manage%3Ajira-webhook%20manage%3Ajira-data-provider&redirect_uri=http%3A%2F%2Flocalhost%3A3201%2Fcourses%2Fjune_2020_manual_qa_technical_support%3F&state=${YOUR_USER_BOUND_VALUE}&response_type=code&prompt=consent`,
      {
        method: 'GET',
      },
    ).then(data => data.json()).catch(e => console.log(e.message))
  }`       

and I trigger this request on my frontend part, where I pass my authCode (authorization code):

  useEffect(() => {
    API.getJiraAuthCode();
  }, []);

  if (authCode) {
    API.getJiraAccessCode(authCode).catch(e => console.log(e.message));
  }