{
"errors": [
"The previous signing secret is still within its rotation window."
]
}
Webhooks
Rotate a webhook endpoint secret
Generates a new signing secret for the endpoint and returns it. The response is the only time the new secret appears in plaintext — store it securely.
To avoid dropping deliveries mid-rollout, the previous secret keeps verifying until the overlap window closes (the endpoint’s previous_secret_expires_at). During the window every delivery is signed with both secrets, so the X-Kit-Signature header carries two v1 entries — see secret rotation.
Rotating again while a previous rotation’s window is still open returns 409; pass force: true to rotate anyway and immediately expire the older secret. Once you’ve switched over, you can close the window early with Revoke the previous secret.
Rotating again while a previous rotation's overlap window is still open returns 409 (see the responses below). Pass true to rotate anyway, immediately expiring the older secret.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Kit Developer Documentation","colors":{"primary":"#44B1FF","light":"#F2EFE9","dark":"#1E1E1E"},"logo":{"light":"https://mintcdn.com/kit-314e57c1/7adJHuc_n17cs81K/logo/kit-logo-soft-black.svg?fit=max\u0026auto=format\u0026n=7adJHuc_n17cs81K\u0026q=85\u0026s=f8b2597b9e12c38f282a39af1e827443","dark":"https://mintcdn.com/kit-314e57c1/7adJHuc_n17cs81K/logo/kit-logo-warm-white.svg?fit=max\u0026auto=format\u0026n=7adJHuc_n17cs81K\u0026q=85\u0026s=4aa6d3d2cd08c65d6286c611a21e8321"},"favicon":"https://mintcdn.com/kit-314e57c1/e9nHA3E-BCD6lL7Q/logo/kit-favicon-dark.png?fit=max\u0026auto=format\u0026n=e9nHA3E-BCD6lL7Q\u0026q=85\u0026s=9183688d8f368eaade3cd6386335038b","api":{"examples":{"languages":["curl","ruby","javascript","go","php","python"]}},"background":{"color":{"light":"#FFFFFF","dark":"#1E1E1E"}},"navbar":{"links":[{"href":"https://app.kit.com/users/login","label":"Log in"}],"primary":{"type":"button","label":"Start free trial","href":"https://app.kit.com/users/signup?plan=1k"}},"footer":{"socials":{"x":"https://x.com/kit","github":"https://github.com/kit","linkedin":"https://www.linkedin.com/company/kit.com/posts"}},"seo":{"metatags":{"og:title":"Kit Developer Documentation","og:image":"/images/kit-hero.png","twitter:image":"/images/kit-hero.png"},"indexing":"all"},"fonts":{"heading":{"family":"KitSansBold","weight":400,"source":"https://cdn.kit.com/assets/fonts/KitSansBold.woff","format":"woff"},"body":{"family":"Libre Franklin","weight":400,"source":"https://fonts.gstatic.com/s/librefranklin/v18/jizOREVItHgc8qDIbSTKq4XkRg8T88bjFuXOnduhLsWkANDJTedX18mE.woff2","format":"woff2"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Kit","icon":"house","href":"https://kit.com"},{"anchor":"Developer Community","icon":"slack","href":"https://kit.typeform.com/to/f8urvmPe"},{"anchor":"Blog","icon":"newspaper","href":"https://kit.com/resources"},{"anchor":"Support","icon":"messages-question","href":"https://kit.com/support"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"kit-314e57c1","hasAudioNarration":false,"actualSubdomain":"kit-314e57c1","customDomains":["developers.kit.com"],"gitSource":{"type":"github","owner":"kit","repo":"developer-documentation","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae08f01854bb5a1e92a97f0","collectionId":"19cde08a-ce05-4849-9179-30abee9cb0f7","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae08f01854bb5a1e92a97f0"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae08f01854bb5a1e92a97f0","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"API Reference","count":117},{"language":"default","tag":"Endpoints","count":94},{"language":"default","tag":"Plugins","count":35},{"language":"default","tag":"Building plugins","count":32},{"language":"default","tag":"Webhooks","count":17},{"language":"default","tag":"Plugin component library","count":15},{"language":"default","tag":"Subscribers","count":12},{"language":"default","tag":"Tags","count":12},{"language":"default","tag":"Kit App Store","count":11},{"language":"default","tag":"Content blocks","count":11}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUS2zcLig.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUb2zcLig.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUQ2zcLig.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUR2zcLig.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUf2zc.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUS2zcLig.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUb2zcLig.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUQ2zcLig.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUR2zcLig.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUf2zc.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUS2zcLig.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUb2zcLig.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUQ2zcLig.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUR2zcLig.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Libre Franklin';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/librefranklin/v20/jizDREVItHgc8qDIbSTKq4XkRiUf2zc.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\nstrong{font-weight:600!important}.prose a:not(.not-prose):not(.not-prose a):not(.card-group a){text-decoration-line:underline;text-decoration-style:solid;text-decoration-thickness:1px;text-underline-offset:2px;border:0;font-weight:600}.prose a:not(.not-prose):not(.not-prose a):not(.card-group a):hover{--tw-text-opacity:1;color:rgb(106 110 114/var(--tw-text-opacity, 1))}#navigation-items h5{font-family:\"Libre Franklin\"}.dark li[id=topbar-cta-button]>a>div>span,li[id=topbar-cta-button]>a>div>span{color:#000!important;font-weight:600!important}li[id=topbar-cta-button]>a>div>svg>path{stroke:#000!important;font-weight:700!important}li[id=topbar-cta-button]>a>span{background:#44b1ff!important}h1,h2,h3,h4,h5{letter-spacing:0!important}h2,h3,h4,h5,h6{font-family:\"Libre Franklin\"!important}#topbar-cta-button svg{display:none!important}#topbar-cta-button a{padding:6px 12px!important}#topbar-cta-button a>span{border-radius:8px!important;transition:all .2s ease!important}"}],"page":{"pagePath":"api-reference/webhooks/rotate-a-webhook-endpoint-secret","slug":"/api-reference/webhooks/rotate-a-webhook-endpoint-secret","pageMetadata":{"title":"Rotate a webhook endpoint secret","description":"Generates a new signing secret for the endpoint and returns it. **The response is the only time the new `secret` appears in plaintext** — store it securely.\n\nTo avoid dropping deliveries mid-rollout, the previous secret keeps verifying until the overlap window closes (the endpoint's `previous_secret_expires_at`). During the window every delivery is signed with both secrets, so the `X-Kit-Signature` header carries two `v1` entries — see [secret rotation](/webhooks/verifying-signatures#secret-rotation).\n\nRotating again while a previous rotation's window is still open returns `409`; pass `force: true` to rotate anyway and immediately expire the older secret. Once you've switched over, you can close the window early with [Revoke the previous secret](/api-reference/webhooks/revoke-the-previous-webhook-endpoint-secret).","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/webhook_endpoints/{id}/rotate_secret","href":"/api-reference/webhooks/rotate-a-webhook-endpoint-secret","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Generates a new signing secret for the endpoint and returns it. \", _jsxs(_components.strong, {\n children: [\"The response is the only time the new \", _jsx(_components.code, {\n children: \"secret\"\n }), \" appears in plaintext\"]\n }), \" — store it securely.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"To avoid dropping deliveries mid-rollout, the previous secret keeps verifying until the overlap window closes (the endpoint’s \", _jsx(_components.code, {\n children: \"previous_secret_expires_at\"\n }), \"). During the window every delivery is signed with both secrets, so the \", _jsx(_components.code, {\n children: \"X-Kit-Signature\"\n }), \" header carries two \", _jsx(_components.code, {\n children: \"v1\"\n }), \" entries — see \", _jsx(_components.a, {\n href: \"/webhooks/verifying-signatures#secret-rotation\",\n children: \"secret rotation\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Rotating again while a previous rotation’s window is still open returns \", _jsx(_components.code, {\n children: \"409\"\n }), \"; pass \", _jsx(_components.code, {\n children: \"force: true\"\n }), \" to rotate anyway and immediately expire the older secret. Once you’ve switched over, you can close the window early with \", _jsx(_components.a, {\n href: \"/api-reference/webhooks/revoke-the-previous-webhook-endpoint-secret\",\n children: \"Revoke the previous secret\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Rotate a webhook endpoint secret","description":"Generates a new signing secret for the endpoint and returns it. **The response is the only time the new `secret` appears in plaintext** — store it securely.\n\nTo avoid dropping deliveries mid-rollout, the previous secret keeps verifying until the overlap window closes (the endpoint's `previous_secret_expires_at`). During the window every delivery is signed with both secrets, so the `X-Kit-Signature` header carries two `v1` entries — see [secret rotation](/webhooks/verifying-signatures#secret-rotation).\n\nRotating again while a previous rotation's window is still open returns `409`; pass `force: true` to rotate anyway and immediately expire the older secret. Once you've switched over, you can close the window early with [Revoke the previous secret](/api-reference/webhooks/revoke-the-previous-webhook-endpoint-secret).","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/webhook_endpoints/{id}/rotate_secret","href":"/api-reference/webhooks/rotate-a-webhook-endpoint-secret","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Rotate a webhook endpoint secret","description":"Generates a new signing secret for the endpoint and returns it. **The response is the only time the new `secret` appears in plaintext** — store it securely.\n\nTo avoid dropping deliveries mid-rollout, the previous secret keeps verifying until the overlap window closes (the endpoint's `previous_secret_expires_at`). During the window every delivery is signed with both secrets, so the `X-Kit-Signature` header carries two `v1` entries — see [secret rotation](/webhooks/verifying-signatures#secret-rotation).\n\nRotating again while a previous rotation's window is still open returns `409`; pass `force: true` to rotate anyway and immediately expire the older secret. Once you've switched over, you can close the window early with [Revoke the previous secret](/api-reference/webhooks/revoke-the-previous-webhook-endpoint-secret).","tags":["Webhooks"],"security":["c59a1e9a-ffe7-46d0-b80a-e3d00825823b","5d1c0c42-af0c-45d5-96de-f07c4834310e"],"parameters":["6d3bf082-7c47-401c-80db-38faca081e6c"],"requestBody":"0e4645e9-8450-4bd8-8e65-a78c08e2152a","responses":{"200":"72626d2e-d556-4cfb-833b-ba03df5b51d5","404":"758a27ad-588c-4a58-8382-ede9e297c4bf","409":"593a9459-8bb5-40b5-a428-97df8c4aa9fe"},"x-mcp":{"enabled":true},"method":"post","type":"path","servers":["765d9b1f-ea66-4ad1-bf83-807396f77fdf"],"path":"/v4/webhook_endpoints/{id}/rotate_secret","baseUrlOptions":["https://api.kit.com"],"title":"Rotate a webhook endpoint secret","codeSamples":[],"requestExampleLanguages":["bash","ruby","javascript","go","php","python"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"6d3bf082-7c47-401c-80db-38faca081e6c":{"name":"id","in":"path","required":true,"schema":{"type":"integer","isRequired":true,"uniqueKey":"","typeLabel":"integer"},"example":78}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"force":{"type":"boolean","description":"Rotating again while a previous rotation's overlap window is still open returns `409` (see the responses below). Pass `true` to rotate anyway, immediately expiring the older secret.","uniqueKey":"force","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"example":{"force":false},"examples":{"Example":{"title":"Example","value":{"force":false}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"72626d2e-d556-4cfb-833b-ba03df5b51d5":{"description":"Rotates the secret and returns the new one","content":{"application/json":{"schema":{"type":"object","properties":{"webhook_endpoint":{"type":"object","properties":{"id":{"type":"integer","isRequired":true,"uniqueKey":"webhook_endpoint.id","typeLabel":"integer"},"name":{"type":"string","isRequired":true,"uniqueKey":"webhook_endpoint.name","typeLabel":"string"},"url":{"type":"string","isRequired":true,"uniqueKey":"webhook_endpoint.url","typeLabel":"string"},"events":{"type":"array","items":{"type":"string","uniqueKey":"webhook_endpoint.events.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"webhook_endpoint.events","typeLabel":"string[]"},"status":{"type":"string","isRequired":true,"uniqueKey":"webhook_endpoint.status","typeLabel":"string"},"source":{"type":"string","isRequired":true,"uniqueKey":"webhook_endpoint.source","typeLabel":"string"},"description":{"type":"string","isRequired":true,"uniqueKey":"webhook_endpoint.description","typeLabel":"string"},"created_by_app":{"oneOf":[{"isRequired":true},{"type":"null","isRequired":true,"uniqueKey":"webhook_endpoint.created_by_app.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"webhook_endpoint.created_by_app","typeLabel":"null"},"created_at":{"type":"string","isRequired":true,"uniqueKey":"webhook_endpoint.created_at","typeLabel":"string"},"previous_secret_expires_at":{"type":"string","isRequired":true,"uniqueKey":"webhook_endpoint.previous_secret_expires_at","typeLabel":"string"},"secret":{"type":"string","description":"The new signing secret (`whsec_` prefix). **Returned only in this response** — store it securely. The previous secret keeps verifying deliveries until `previous_secret_expires_at`.","isRequired":true,"uniqueKey":"webhook_endpoint.secret","typeLabel":"string"}},"required":["id","name","url","events","status","source","description","created_by_app","created_at","previous_secret_expires_at","secret"],"isRequired":true,"uniqueKey":"webhook_endpoint","typeLabel":"object"}},"required":["webhook_endpoint"],"uniqueKey":"","typeLabel":"object"},"example":{"webhook_endpoint":{"id":66,"name":"My webhook","url":"https://hooks.example.com/incoming","events":["subscriber.created"],"status":"active","source":"creator","description":"A test webhook","created_by_app":null,"created_at":"2023-02-17T11:43:55Z","previous_secret_expires_at":"2023-02-18T11:43:55Z","secret":"whsec_YOUR_SIGNING_SECRET_HERE"}},"examples":{"Example":{"title":"Example","value":{"webhook_endpoint":{"id":66,"name":"My webhook","url":"https://hooks.example.com/incoming","events":["subscriber.created"],"status":"active","source":"creator","description":"A test webhook","created_by_app":null,"created_at":"2023-02-17T11:43:55Z","previous_secret_expires_at":"2023-02-18T11:43:55Z","secret":"whsec_YOUR_SIGNING_SECRET_HERE"}}}},"exampleType":"examples"}},"exampleType":"examples"},"758a27ad-588c-4a58-8382-ede9e297c4bf":{"description":"Returns a 404 when the provided id does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"string","uniqueKey":"errors.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"errors","typeLabel":"string[]"}},"required":["errors"],"uniqueKey":"","typeLabel":"object"},"example":{"errors":["Not Found"]},"examples":{"Example":{"title":"Example","value":{"errors":["Not Found"]}}},"exampleType":"examples"}},"exampleType":"examples"},"593a9459-8bb5-40b5-a428-97df8c4aa9fe":{"description":"Returns 409 when the previous rotation's overlap window is still open","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"string","uniqueKey":"errors.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"errors","typeLabel":"string[]"}},"required":["errors"],"uniqueKey":"","typeLabel":"object"},"example":{"errors":["The previous signing secret is still within its rotation window."]},"examples":{"Example":{"title":"Example","value":{"errors":["The previous signing secret is still within its rotation window."]}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"c59a1e9a-ffe7-46d0-b80a-e3d00825823b":{"API Key":{"description":"Authenticate API requests via an API Key","type":"apiKey","in":"header","name":"X-Kit-Api-Key","scopes":[],"schemeName":"API Key"}},"5d1c0c42-af0c-45d5-96de-f07c4834310e":{"OAuth2":{"description":"Authenticate API requests via an OAuth token","type":"oauth2","flows":{"authorizationCode":{"authorizationUrl":"https://api.kit.com/v4/oauth/authorize","tokenUrl":"https://api.kit.com/v4/oauth/token","refreshUrl":"https://api.kit.com/v4/oauth/token","scopes":{"read":"Read access to Kit API v4","write":"Write access to Kit API v4"}}},"scopes":[],"schemeName":"OAuth2"}}},"servers":{"765d9b1f-ea66-4ad1-bf83-807396f77fdf":{"url":"https://api.kit.com"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"description":"Authenticate API requests via an API Key","type":"apiKey","in":"header","name":"X-Kit-Api-Key","scopes":[],"schemeName":"API Key"},"schema":{"title":"X-Kit-Api-Key","type":"string","description":"Authenticate API requests via an API Key","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"API Key","name":"X-Kit-Api-Key"}],"title":"API Key"},{"schemes":[{"scheme":{"description":"Authenticate API requests via an OAuth token","type":"oauth2","flows":{"authorizationCode":{"authorizationUrl":"https://api.kit.com/v4/oauth/authorize","tokenUrl":"https://api.kit.com/v4/oauth/token","refreshUrl":"https://api.kit.com/v4/oauth/token","scopes":{"read":"Read access to Kit API v4","write":"Write access to Kit API v4"}}},"scopes":[],"schemeName":"OAuth2"},"schema":{"title":"OAuth2 Auth","type":"string","isRequired":true,"description":"Authenticate API requests via an OAuth token","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"OAuth2","name":"Authorization"}],"title":"OAuth2"}]},"originalFileLocation":"api-reference/v4.json"},"subdomain":"kit-314e57c1","siteName":"Kit Developer Documentation","title":"Kit Developer Documentation","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{"API 4.0":{"href":"/api-reference/webhooks/rotate-a-webhook-endpoint-secret","matchLevel":0},"API 3.0 (legacy)":{"href":"/api-reference/v3/account","matchLevel":2}},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T11:46:16.963Z","originalFileLocation":"api-reference/webhooks/rotate-a-webhook-endpoint-secret.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Generates a new signing secret for the endpoint and returns it. The response is the only time the new secret appears in plaintext — store it securely. To avoid dropping deliveries mid-rollout, the previous secret keeps verifying until the overlap window closes (the endpoint\u0026#x27;s previous_secret_expires_at). During the window every delivery is signed with both secrets, so the X-Kit-Signature header carries two v1 entries — see secret rotation. Rotating again while a previous rotation\u0026#x27;s window is still open returns 409; pass force: true to rotate anyway and immediately expire the older secret. Once you\u0026#x27;ve switched over, you can close the window early with Revoke the previous secret.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Kit Developer Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kit-314e57c1/Pkdyit4Q00bMDtMW/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/kit-314e57c1/Pkdyit4Q00bMDtMW/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kit-314e57c1/Pkdyit4Q00bMDtMW/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kit-314e57c1/Pkdyit4Q00bMDtMW/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kit-314e57c1/Pkdyit4Q00bMDtMW/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kit-314e57c1/Pkdyit4Q00bMDtMW/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kit-314e57c1/Pkdyit4Q00bMDtMW/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kit-314e57c1/Pkdyit4Q00bMDtMW/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kit-314e57c1/Pkdyit4Q00bMDtMW/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Kit Developer Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Generates a new signing secret for the endpoint and returns it. The response is the only time the new secret appears in plaintext — store it securely. To avoid dropping deliveries mid-rollout, the previous secret keeps verifying until the overlap window closes (the endpoint\u0026#x27;s previous_secret_expires_at). During the window every delivery is signed with both secrets, so the X-Kit-Signature header carries two v1 entries — see secret rotation. Rotating again while a previous rotation\u0026#x27;s window is still open returns 409; pass force: true to rotate anyway and immediately expire the older secret. Once you\u0026#x27;ve switched over, you can close the window early with Revoke the previous secret.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Kit Developer Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.kit.com/api-reference/webhooks/rotate-a-webhook-endpoint-secret\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://kit-314e57c1.mintlify.app/images/kit-hero.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Kit Developer Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Generates a new signing secret for the endpoint and returns it. The response is the only time the new secret appears in plaintext — store it securely. To avoid dropping deliveries mid-rollout, the previous secret keeps verifying until the overlap window closes (the endpoint\u0026#x27;s previous_secret_expires_at). During the window every delivery is signed with both secrets, so the X-Kit-Signature header carries two v1 entries — see secret rotation. Rotating again while a previous rotation\u0026#x27;s window is still open returns 409; pass force: true to rotate anyway and immediately expire the older secret. Once you\u0026#x27;ve switched over, you can close the window early with Revoke the previous secret.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kit-314e57c1.mintlify.app/images/kit-hero.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/kit-314e57c1/Pkdyit4Q00bMDtMW/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Kit Developer Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#44B1FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.kit.com/api-reference/webhooks/rotate-a-webhook-endpoint-secret\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/webhooks/rotate-a-webhook-endpoint-secret.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.kit.com/#organization\",\"name\":\"Kit Developer Documentation\",\"url\":\"https://developers.kit.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/kit-314e57c1/7adJHuc_n17cs81K/logo/kit-logo-soft-black.svg?fit=max\u0026auto=format\u0026n=7adJHuc_n17cs81K\u0026q=85\u0026s=f8b2597b9e12c38f282a39af1e827443\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.kit.com#website\",\"name\":\"Kit Developer Documentation\",\"url\":\"https://developers.kit.com\",\"publisher\":{\"@id\":\"https://developers.kit.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.kit.com/api-reference/webhooks/rotate-a-webhook-endpoint-secret#webpage\",\"url\":\"https://developers.kit.com/api-reference/webhooks/rotate-a-webhook-endpoint-secret\",\"name\":\"Rotate a webhook endpoint secret\",\"description\":\"Generates a new signing secret for the endpoint and returns it. The response is the only time the new secret appears in plaintext — store it securely. To avoid dropping deliveries mid-rollout, the previous secret keeps verifying until the overlap window closes (the endpoint's previous_secret_expires_at). During the window every delivery is signed with both secrets, so the X-Kit-Signature header carries two v1 entries — see secret rotation. Rotating again while a previous rotation's window is still open returns 409; pass force: true to rotate anyway and immediately expire the older secret. Once you've switched over, you can close the window early with Revoke the previous secret.\",\"dateModified\":\"2026-10-27T11:46:16.963Z\",\"isPartOf\":{\"@id\":\"https://developers.kit.com#website\"},\"breadcrumb\":{\"@id\":\"https://developers.kit.com/api-reference/webhooks/rotate-a-webhook-endpoint-secret#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.kit.com/api-reference/webhooks/rotate-a-webhook-endpoint-secret#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://developers.kit.com/api-reference/accounts/get-current-account\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Webhooks\",\"item\":\"https://developers.kit.com/api-reference/webhooks/list-webhook-endpoints\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Rotate a webhook endpoint secret\",\"item\":\"https://developers.kit.com/api-reference/webhooks/rotate-a-webhook-endpoint-secret\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developers.kit.com/api-reference/webhooks/rotate-a-webhook-endpoint-secret#apireference\",\"headline\":\"Rotate a webhook endpoint secret\",\"name\":\"Rotate a webhook endpoint secret\",\"description\":\"Generates a new signing secret for the endpoint and returns it. The response is the only time the new secret appears in plaintext — store it securely. To avoid dropping deliveries mid-rollout, the previous secret keeps verifying until the overlap window closes (the endpoint's previous_secret_expires_at). During the window every delivery is signed with both secrets, so the X-Kit-Signature header carries two v1 entries — see secret rotation. Rotating again while a previous rotation's window is still open returns 409; pass force: true to rotate anyway and immediately expire the older secret. Once you've switched over, you can close the window early with Revoke the previous secret.\",\"url\":\"https://developers.kit.com/api-reference/webhooks/rotate-a-webhook-endpoint-secret\",\"mainEntityOfPage\":{\"@id\":\"https://developers.kit.com/api-reference/webhooks/rotate-a-webhook-endpoint-secret#webpage\"},\"image\":\"https://developers.kit.com/images/kit-hero.png\",\"dateModified\":\"2026-10-27T11:46:16.963Z\",\"publisher\":{\"@id\":\"https://developers.kit.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.kit.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Kit Developer Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Kit Developer Documentation","nav":{"global":{"anchors":[{"anchor":"Kit","icon":"house","href":"https://kit.com"},{"anchor":"Developer Community","icon":"slack","href":"https://kit.typeform.com/to/f8urvmPe"},{"anchor":"Blog","icon":"newspaper","href":"https://kit.com/resources"},{"anchor":"Support","icon":"messages-question","href":"https://kit.com/support"}]},"tabs":[{"tab":"Welcome","pages":[{"title":"Welcome","href":"/welcome"}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/mcp/overview"}]},{"tab":"Kit App Store","pages":[{"title":"Kit App Store","href":"/kit-app-store/overview"}]},{"tab":"Plugins","pages":[{"title":"Plugins","href":"/plugins/overview"}]},{"tab":"API Reference","versions":[{"version":"API 4.0","groups":[{"group":"Getting started","boost":3,"pages":[{"title":"API Overview","sidebarTitle":"Overview","mode":"wide","href":"/api-reference/overview"},{"title":"API Authentication","sidebarTitle":"Authentication","href":"/api-reference/authentication"}]},{"group":"Guides","pages":[{"group":"OAuth guides","pages":[{"title":"OAuth refresh token flow","href":"/api-reference/oauth-refresh-token-flow"},{"title":"Proof Key for Code Exchange (PKCE) flow","href":"/api-reference/oauth-proof-key-for-code-exchange-flow"},{"title":"OAuth token revocation","href":"/api-reference/oauth-token-revocation"}]},{"title":"Upgrading to V4","href":"/api-reference/upgrading-to-v4"},{"title":"Pagination","href":"/api-reference/pagination"},{"title":"Bulk \u0026 async processing","href":"/api-reference/bulk-and-async-processing"},{"title":"Eventual consistency","href":"/api-reference/eventual-consistency"},{"title":"Dates","href":"/api-reference/dates"},{"title":"Email data retention","href":"/api-reference/email-data-retention"},{"title":"API response codes","sidebarTitle":"Response codes","href":"/api-reference/response-codes"}]},{"group":"Webhooks","pages":[{"title":"Webhooks overview","sidebarTitle":"Overview","href":"/webhooks/overview"},{"title":"Getting started with webhooks","sidebarTitle":"Getting started","href":"/webhooks/getting-started"},{"title":"Delivery format","sidebarTitle":"Delivery format","href":"/webhooks/delivery-format"},{"title":"Event types","sidebarTitle":"Event types","href":"/webhooks/event-types"},{"title":"Verifying signatures","sidebarTitle":"Verifying signatures","href":"/webhooks/verifying-signatures"},{"title":"Retries","sidebarTitle":"Retries","href":"/webhooks/retries"},{"title":"Delivery history","sidebarTitle":"Delivery history","href":"/webhooks/delivery-history"},{"title":"Errors and gating","sidebarTitle":"Errors","href":"/webhooks/errors"}]},{"group":"Endpoints","pages":[{"group":"Accounts","pages":[{"title":"Get current account","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/account","href":"/api-reference/accounts/get-current-account"},{"title":"List colors","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/account/colors","href":"/api-reference/accounts/list-colors"},{"title":"Update colors","deprecated":null,"version":null,"openapi":"/api-reference/v4.json put /v4/account/colors","href":"/api-reference/accounts/update-colors"},{"title":"Get Creator Profile","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/account/creator_profile","href":"/api-reference/accounts/get-creator-profile"},{"title":"Get email stats","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/account/email_stats","href":"/api-reference/accounts/get-email-stats"},{"title":"Get growth stats","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/account/growth_stats","href":"/api-reference/accounts/get-growth-stats"}]},{"group":"Broadcasts","pages":[{"title":"List broadcasts","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/broadcasts","href":"/api-reference/broadcasts/list-broadcasts"},{"title":"Create a broadcast","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/broadcasts","href":"/api-reference/broadcasts/create-a-broadcast"},{"title":"Get stats for a list of broadcasts","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/broadcasts/stats","href":"/api-reference/broadcasts/get-stats-for-a-list-of-broadcasts"},{"title":"Get link clicks for a broadcast","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/broadcasts/{broadcast_id}/clicks","href":"/api-reference/broadcasts/get-link-clicks-for-a-broadcast"},{"title":"Get stats for a broadcast","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/broadcasts/{broadcast_id}/stats","href":"/api-reference/broadcasts/get-stats-for-a-broadcast"},{"title":"Get a broadcast","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/broadcasts/{id}","href":"/api-reference/broadcasts/get-a-broadcast"},{"title":"Update a broadcast","deprecated":null,"version":null,"openapi":"/api-reference/v4.json put /v4/broadcasts/{id}","href":"/api-reference/broadcasts/update-a-broadcast"},{"title":"Delete a broadcast","deprecated":null,"version":null,"openapi":"/api-reference/v4.json delete /v4/broadcasts/{id}","href":"/api-reference/broadcasts/delete-a-broadcast"}]},{"group":"Custom Fields","pages":[{"title":"Bulk create custom fields","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/bulk/custom_fields","href":"/api-reference/custom-fields/bulk-create-custom-fields"},{"title":"Bulk update subscriber custom field values","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/bulk/custom_fields/subscribers","href":"/api-reference/custom-fields/bulk-update-subscriber-custom-field-values"},{"title":"List custom fields","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/custom_fields","href":"/api-reference/custom-fields/list-custom-fields"},{"title":"Create a custom field","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/custom_fields","href":"/api-reference/custom-fields/create-a-custom-field"},{"title":"Update a custom field","deprecated":null,"version":null,"openapi":"/api-reference/v4.json put /v4/custom_fields/{id}","href":"/api-reference/custom-fields/update-a-custom-field"},{"title":"Delete custom field","deprecated":null,"version":null,"openapi":"/api-reference/v4.json delete /v4/custom_fields/{id}","href":"/api-reference/custom-fields/delete-custom-field"}]},{"group":"Email Templates","pages":[{"title":"List email templates","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/email_templates","href":"/api-reference/email-templates/list-email-templates"}]},{"group":"Forms","pages":[{"title":"Bulk add subscribers to forms","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/bulk/forms/subscribers","href":"/api-reference/forms/bulk-add-subscribers-to-forms"},{"title":"List forms","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/forms","href":"/api-reference/forms/list-forms"},{"title":"List subscribers for a form","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/forms/{form_id}/subscribers","href":"/api-reference/forms/list-subscribers-for-a-form"},{"title":"Add subscriber to form by email address","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/forms/{form_id}/subscribers","href":"/api-reference/forms/add-subscriber-to-form-by-email-address"},{"title":"Add subscriber to form","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/forms/{form_id}/subscribers/{id}","href":"/api-reference/forms/add-subscriber-to-form"}]},{"group":"Posts","pages":[{"title":"List posts","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/posts","href":"/api-reference/posts/list-posts"},{"title":"Get a post","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/posts/{id}","href":"/api-reference/posts/get-a-post"}]},{"group":"Purchases","pages":[{"title":"List purchases","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/purchases","href":"/api-reference/purchases/list-purchases"},{"title":"Create a purchase","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/purchases","href":"/api-reference/purchases/create-a-purchase"},{"title":"Get a purchase","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/purchases/{id}","href":"/api-reference/purchases/get-a-purchase"}]},{"group":"Segments","pages":[{"title":"List segments","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/segments","href":"/api-reference/segments/list-segments"}]},{"group":"Sequence Emails","pages":[{"title":"List sequence emails","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/sequences/{sequence_id}/emails","href":"/api-reference/sequence-emails/list-sequence-emails"},{"title":"Create a sequence email","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/sequences/{sequence_id}/emails","href":"/api-reference/sequence-emails/create-a-sequence-email"},{"title":"Get a sequence email","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/sequences/{sequence_id}/emails/{id}","href":"/api-reference/sequence-emails/get-a-sequence-email"},{"title":"Update a sequence email","deprecated":null,"version":null,"openapi":"/api-reference/v4.json put /v4/sequences/{sequence_id}/emails/{id}","href":"/api-reference/sequence-emails/update-a-sequence-email"},{"title":"Delete a sequence email","deprecated":null,"version":null,"openapi":"/api-reference/v4.json delete /v4/sequences/{sequence_id}/emails/{id}","href":"/api-reference/sequence-emails/delete-a-sequence-email"}]},{"group":"Sequences","pages":[{"title":"List sequences","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/sequences","href":"/api-reference/sequences/list-sequences"},{"title":"Create a sequence","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/sequences","href":"/api-reference/sequences/create-a-sequence"},{"title":"Get a sequence","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/sequences/{id}","href":"/api-reference/sequences/get-a-sequence"},{"title":"Update a sequence","deprecated":null,"version":null,"openapi":"/api-reference/v4.json put /v4/sequences/{id}","href":"/api-reference/sequences/update-a-sequence"},{"title":"Delete a sequence","deprecated":null,"version":null,"openapi":"/api-reference/v4.json delete /v4/sequences/{id}","href":"/api-reference/sequences/delete-a-sequence"},{"title":"List subscribers for a sequence","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/sequences/{sequence_id}/subscribers","href":"/api-reference/sequences/list-subscribers-for-a-sequence"},{"title":"Add subscriber to sequence by email address","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/sequences/{sequence_id}/subscribers","href":"/api-reference/sequences/add-subscriber-to-sequence-by-email-address"},{"title":"Add subscriber to sequence","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/sequences/{sequence_id}/subscribers/{id}","href":"/api-reference/sequences/add-subscriber-to-sequence"}]},{"group":"Snippets","pages":[{"title":"List snippets","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/snippets","href":"/api-reference/snippets/list-snippets"},{"title":"Create a snippet","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/snippets","href":"/api-reference/snippets/create-a-snippet"},{"title":"Get a snippet","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/snippets/{id}","href":"/api-reference/snippets/get-a-snippet"},{"title":"Update a snippet","deprecated":null,"version":null,"openapi":"/api-reference/v4.json put /v4/snippets/{id}","href":"/api-reference/snippets/update-a-snippet"}]},{"group":"Subscribers","pages":[{"title":"Bulk create subscribers","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/bulk/subscribers","href":"/api-reference/subscribers/bulk-create-subscribers"},{"title":"List subscribers","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/subscribers","href":"/api-reference/subscribers/list-subscribers"},{"title":"Create a subscriber","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/subscribers","href":"/api-reference/subscribers/create-a-subscriber"},{"title":"Filter subscribers by engagement, sign-up date, state, and tags","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/subscribers/filter","href":"/api-reference/subscribers/filter-subscribers-by-engagement-sign-up-date-state-and-tags"},{"title":"Get a subscriber","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/subscribers/{id}","href":"/api-reference/subscribers/get-a-subscriber"},{"title":"Update a subscriber","deprecated":null,"version":null,"openapi":"/api-reference/v4.json put /v4/subscribers/{id}","href":"/api-reference/subscribers/update-a-subscriber"},{"title":"Unsubscribe subscriber","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/subscribers/{id}/unsubscribe","href":"/api-reference/subscribers/unsubscribe-subscriber"},{"title":"Pin a subscriber's location","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/subscribers/{subscriber_id}/location","href":"/api-reference/subscribers/pin-a-subscribers-location"},{"title":"Delete a subscriber's location","deprecated":null,"version":null,"openapi":"/api-reference/v4.json delete /v4/subscribers/{subscriber_id}/location","href":"/api-reference/subscribers/delete-a-subscribers-location"},{"title":"Update a subscriber's pinned location","deprecated":null,"version":null,"openapi":"/api-reference/v4.json patch /v4/subscribers/{subscriber_id}/location","href":"/api-reference/subscribers/update-a-subscribers-pinned-location"},{"title":"List stats for a subscriber","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/subscribers/{subscriber_id}/stats","href":"/api-reference/subscribers/list-stats-for-a-subscriber"},{"title":"List tags for a subscriber","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/subscribers/{subscriber_id}/tags","href":"/api-reference/subscribers/list-tags-for-a-subscriber"}]},{"group":"Tags","pages":[{"title":"Bulk create tags","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/bulk/tags","href":"/api-reference/tags/bulk-create-tags"},{"title":"Bulk delete tags","deprecated":null,"version":null,"openapi":"/api-reference/v4.json delete /v4/bulk/tags","href":"/api-reference/tags/bulk-delete-tags"},{"title":"Bulk tag subscribers","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/bulk/tags/subscribers","href":"/api-reference/tags/bulk-tag-subscribers"},{"title":"Bulk remove tags from subscribers","deprecated":null,"version":null,"openapi":"/api-reference/v4.json delete /v4/bulk/tags/subscribers","href":"/api-reference/tags/bulk-remove-tags-from-subscribers"},{"title":"List tags","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/tags","href":"/api-reference/tags/list-tags"},{"title":"Create a tag","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/tags","href":"/api-reference/tags/create-a-tag"},{"title":"Update tag name","deprecated":null,"version":null,"openapi":"/api-reference/v4.json put /v4/tags/{id}","href":"/api-reference/tags/update-tag-name"},{"title":"List subscribers for a tag","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/tags/{tag_id}/subscribers","href":"/api-reference/tags/list-subscribers-for-a-tag"},{"title":"Tag a subscriber by email address","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/tags/{tag_id}/subscribers","href":"/api-reference/tags/tag-a-subscriber-by-email-address"},{"title":"Remove tag from subscriber by email address","deprecated":null,"version":null,"openapi":"/api-reference/v4.json delete /v4/tags/{tag_id}/subscribers","href":"/api-reference/tags/remove-tag-from-subscriber-by-email-address"},{"title":"Tag a subscriber","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/tags/{tag_id}/subscribers/{id}","href":"/api-reference/tags/tag-a-subscriber"},{"title":"Remove tag from subscriber","deprecated":null,"version":null,"openapi":"/api-reference/v4.json delete /v4/tags/{tag_id}/subscribers/{id}","href":"/api-reference/tags/remove-tag-from-subscriber"}]},{"group":"Webhooks","pages":[{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/webhook_endpoints","href":"/api-reference/webhooks/list-webhook-endpoints"},{"title":"Create a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/webhook_endpoints","href":"/api-reference/webhooks/create-a-webhook-endpoint"},{"title":"Get a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/webhook_endpoints/{id}","href":"/api-reference/webhooks/get-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/v4.json delete /v4/webhook_endpoints/{id}","href":"/api-reference/webhooks/delete-a-webhook-endpoint"},{"title":"Update a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/v4.json patch /v4/webhook_endpoints/{id}","href":"/api-reference/webhooks/update-a-webhook-endpoint"},{"title":"List webhook deliveries","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/webhook_endpoints/{id}/deliveries","href":"/api-reference/webhooks/list-webhook-deliveries"},{"title":"Get webhook delivery details","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/webhook_endpoints/{id}/deliveries/{delivery_id}","href":"/api-reference/webhooks/get-webhook-delivery-details"},{"title":"Revoke the previous webhook endpoint secret","description":"Closes a [rotation's](/api-reference/webhooks/rotate-a-webhook-endpoint-secret) overlap window early: the previous secret stops verifying immediately, leaving only the current secret valid. Call this once you've fully switched to the new secret, rather than waiting for `previous_secret_expires_at` to pass.\n\nSubsequent deliveries are signed with the current secret only, so the `X-Kit-Signature` header goes back to carrying a single `v1` entry.","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/webhook_endpoints/{id}/revoke_previous_secret","href":"/api-reference/webhooks/revoke-the-previous-webhook-endpoint-secret"},{"title":"Rotate a webhook endpoint secret","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/webhook_endpoints/{id}/rotate_secret","href":"/api-reference/webhooks/rotate-a-webhook-endpoint-secret"}]},{"group":"Webhooks (Legacy)","pages":[{"title":"List webhooks","description":"**Legacy:** This is the previous generation of Kit webhooks. It keeps working and there are no plans to remove it, but it's superseded by [webhook endpoints](/api-reference/webhooks/list-webhook-endpoints), which support many event types per endpoint, signed deliveries, and automatic retries — use those for new integrations. See the [webhooks guides](/webhooks/overview).\n\nWebhooks are automations that will receive subscriber data when a subscriber event is triggered, such as when a subscriber completes a sequence.\u003cbr/>\u003cbr/>When a webhook is triggered, a `POST` request will be made to your URL with a JSON payload.","deprecated":null,"version":null,"openapi":"/api-reference/v4.json get /v4/webhooks","href":"/api-reference/webhooks-legacy/list-webhooks"},{"title":"Create a webhook","deprecated":null,"version":null,"openapi":"/api-reference/v4.json post /v4/webhooks","href":"/api-reference/webhooks-legacy/create-a-webhook"},{"title":"Delete a webhook","deprecated":null,"version":null,"openapi":"/api-reference/v4.json delete /v4/webhooks/{id}","href":"/api-reference/webhooks-legacy/delete-a-webhook"}]}]}]},{"version":"API 3.0 (legacy)","pages":[{"title":"API 3.0 (legacy)","href":"/api-reference/v3/account"}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"title":"Kit Developer Documentation","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-WRhTSUDL.js","utils-ChMov4Kr.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-_REmC2bI.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp6nVRCu.js","snippetPresets-DZadmXoU.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CY2WdoTl.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DwYG-Q4l.js","shallow-BXQIGwv4.js","getApiPlaygroundDisplay-CK5nK5B9.js","CodeSnippet-TH4a2aGW.js","CodeSnippets-DwsQiOFS.js","Page-R3M_BF4L.js","getPastedJson-DD7kUzi_.js","icon-holE3QoJ.js","MethodPill-DUW0T8us.js","DuplicateIcon-CI_p4be-.js","createIcon-BdbRvavb.js","DynamicMarkdown-DN96a4Ur.js","SectionHeading-SCu36A9d.js","axios-vUo_bRtp.js","Markdown-CCeGv-zI.js","clsx-BGBGWFTt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-Cv_O2fky.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-2C5OB2eV.js"]}