hCaptcha

Last updated Apr 21, 2026 The hCaptcha Pages Plugin validates hCaptcha tokens.

Installation

npmyarnpnpmbun

npm i @cloudflare/pages-plugin-hcaptcha
yarn add @cloudflare/pages-plugin-hcaptcha
pnpm add @cloudflare/pages-plugin-hcaptcha
bun add @cloudflare/pages-plugin-hcaptcha

Usage

import hCaptchaPlugin from "@cloudflare/pages-plugin-hcaptcha";

export const onRequestPost: PagesFunction[] = [
    hCaptchaPlugin({
        secret: "0x0000000000000000000000000000000000000000",
        sitekey: "10000000-ffff-ffff-ffff-000000000001",
    }),
    async (context) => {
        // Request has been validated as coming from a human

        const formData = await context.request.formData();

        // Store user credentials

        return new Response("Successfully registered!");
    },
];

This Plugin only exposes a single route. It will be available wherever it is mounted. In the above example, because it is mounted in functions/register.ts, it will validate requests to /register. The Plugin is mounted with a single object parameter with the following properties.

secret ↗︎ (mandatory) and sitekey ↗︎ (optional) can both be found in your hCaptcha dashboard.

response and remoteip are optional strings. response the hCaptcha token to verify (defaults to extracting h-captcha-response from a multipart/form-data request). remoteip should be requester's IP address (defaults to the CF-Connecting-IP header of the request).

onError is an optional function which takes the Pages Function context object and returns a Promise of a Response. By default, it will return a human-readable error Response.

data.hCaptcha will be populated in subsequent Pages Functions (including for the onError function) with the hCaptcha response object ↗︎.

Was this helpful?

YesNo

On this page

hCaptcha - 图1Docs

{"@context":"https://schema.org","@type":"TechArticle","@id":"https://developers.cloudflare.com/pages/functions/plugins/hcaptcha/#page","headline":"hCaptcha","description":"Validate hCaptcha tokens in Pages Functions using the hCaptcha Pages Plugin.","url":"https://developers.cloudflare.com/pages/functions/plugins/hcaptcha/","inLanguage":"en","image":"https://developers.cloudflare.com/pages/functions/plugins/hcaptcha/og.png?v=3ec73e67fe510661","dateModified":"2026-04-21","publisher":{"@type":"Organization","name":"Cloudflare","description":"One platform for your apps, agents, and workforce. Build, secure, and scale without managing infrastructure","url":"https://www.cloudflare.com/","sameAs":["https://github.com/cloudflare","https://www.linkedin.com/company/cloudflare","https://x.com/cloudflare"],"logo":{"@type":"ImageObject","url":"https://developers.cloudflare.com/logo.svg"},"address":{"@type":"PostalAddress","streetAddress":"101 Townsend St","addressLocality":"San Francisco","addressRegion":"CA","postalCode":"94107","addressCountry":"US"},"contactPoint":[{"@type":"ContactPoint","contactType":"Customer Support","url":"https://support.cloudflare.com/","availableLanguage":["English"]},{"@type":"ContactPoint","contactType":"Sales","url":"https://www.cloudflare.com/contact/","availableLanguage":["English"]}]},"isPartOf":{"@type":"WebSite","@id":"https://developers.cloudflare.com/#website","name":"Cloudflare Docs","url":"https://developers.cloudflare.com/"}}


description: Send traces from Pages Functions to Honeycomb for observability using this Plugin. title: Honeycomb image: https://developers.cloudflare.com/pages/functions/plugins/honeycomb/og.png?v=42a7240aab81f0b2


Skip to content

Documentation Index
Fetch the complete documentation index at: https://developers.cloudflare.com/pages/llms.txt
Use this file to discover all available pages before exploring further.