Google Recaptcha v2 not working as expected for Netlify Forms on Gatsby site

I always get a 200 response when post the Netlify form with or without Google Recaptcha v2 completed. I don’t get the 303 response others have gotten for not passing the captcha. Is this the expected behavior?

If the recaptcha is completed I see the submission in my Netlify account as it should be. When the recaptcha is not completed and ‘g-recaptcha-response’ is equal to null I’m still getting a 200 response on the post request, even though I can’t view the submission in my Netlify account.

When I login into the Google admin console I can’t see any of the recaptcha results instantly but days later the results appear. Is this the expected behavior?

I would prefer to get the 303 response others have described when the recaptcha is null or fails to pass.

Site name: https://serene-mestorf-cb06d7.netlify.app/

the post route:

          fetch("/", {
      method: "POST",
      headers: { "Content-Type": "application/x-www-form-urlencoded" },
      body: encode({
        "form-name": "contact",
        'g-recaptcha': RECAPTCHA_KEY,
        "g-recaptcha-response": value,
        ...formPkg,
      }),
    })

first question - does the work without a recaptcha? worth ruling out first.

Thank you for the response! I receive a 200 status code, but the submission doesn’t show up in my forms in Netlify. Any help is appreciated!

<FormGrid
        name="contact"
        method="post"
        data-netlify="true"
        data-netlify-recaptcha="true"
        onSubmit={e => handleSubmit(e)}
      >
        <noscript>
          <p>This form won’t work with Javascript disabled</p>
        </noscript>
        <Row small={sm}>
          <input type="hidden" name="form-name" value="contact" />
          <input type="hidden" name="message" value={message} />
          <Column>
            <Input name="email" type="email" required />
            <Label htmlFor="email">Email</Label>
          </Column>
          <Column>
            <Input name="first" required />
            <Label htmlFor="first">Name</Label>
          </Column>
        </Row>
        <Column end="true">
          <Label htmlFor="message">Message</Label>
          <TextArea
            value={message}
            onChange={e => setMessage(e.target.value)}
            small={sm}
            required
          />
          <Recaptcha ref={recaptchaRef} sitekey={RECAPTCHA_KEY} />
          <StyledResponse success={success}>
            {err ? err : ""}
          </StyledResponse>
          <ButtonRow type="submit">
            <StyledH style={{ marginRight: "10px" }}>Submit</StyledH>
            <FontAwesomeIcon icon={faPaperPlane} size="lg" />
          </ButtonRow>
        </Column>
      </FormGrid>

Hey there,
I just tried to create a test submission to your form, but it seems like you’ve made the reCAPTCHA a required field? Nice workaround! Though I’m still puzzled by the missing 303, as you are. If it happens again, it would be great if you could send an x-nf-request-id for the 200 POST so we can check our logs for any clues.