{
"error": {
"code": "INVALID_REQUEST",
"message": "The request was invalid.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#bad-request",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
{
"error": {
"code": "UNAUTHORIZED",
"message": "No valid API key provided.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#unauthorized",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
{
"error": {
"code": "FORBIDDEN",
"message": "The API key doesn’t have permissions to perform the request.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#forbidden",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "The requested resource was not found.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#not-found",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
{
"error": {
"code": "IDEMPOTENCY_REQUEST_IN_PROGRESS",
"message": "A request with the same Idempotency-Key is still being processed. Retry once it has completed.",
"documentationUrl": "https://developer.folk.app/api-reference/idempotency#errors",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
{
"error": {
"code": "UNPROCESSABLE_ENTITY",
"message": "Invalid query parameters",
"documentationUrl": "https://developer.folk.app/api-reference/errors#unprocessable-entity",
"details": {
"issues": [
{
"code": "too_small",
"minimum": 1,
"type": "number",
"inclusive": true,
"exact": false,
"message": "Number must be greater than or equal to 1",
"path": [
"limit"
]
}
]
},
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "The service is currently unavailable.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#service-unavailable",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
Campaigns
(Beta) Stop a campaign
Stop a scheduled or sending campaign, or only some of its recipients. Messages already sent stay sent; those not sent yet are not sent, with notSentReason: "stopped".
Without a body, the whole campaign becomes cancelled: a scheduled campaign sends nothing, and a sending one sends none of its next steps. Stopping a cancelled campaign again leaves it unchanged. A campaign whose last step is already sending can only be stopped for some recipients.
With recipientIds, the campaign keeps its status. Merged contacts are resolved, and ids that are not recipients of the campaign or have nothing left to send are listed in warnings.
A campaign still processing its messages answers 409 with a Retry-After header. A campaign that is not launched, finished or failed answers 409: delete a draft or in_review campaign instead.
This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.
{
"error": {
"code": "INVALID_REQUEST",
"message": "The request was invalid.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#bad-request",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
{
"error": {
"code": "UNAUTHORIZED",
"message": "No valid API key provided.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#unauthorized",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
{
"error": {
"code": "FORBIDDEN",
"message": "The API key doesn’t have permissions to perform the request.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#forbidden",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "The requested resource was not found.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#not-found",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
{
"error": {
"code": "IDEMPOTENCY_REQUEST_IN_PROGRESS",
"message": "A request with the same Idempotency-Key is still being processed. Retry once it has completed.",
"documentationUrl": "https://developer.folk.app/api-reference/idempotency#errors",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
{
"error": {
"code": "UNPROCESSABLE_ENTITY",
"message": "Invalid query parameters",
"documentationUrl": "https://developer.folk.app/api-reference/errors#unprocessable-entity",
"details": {
"issues": [
{
"code": "too_small",
"minimum": 1,
"type": "number",
"inclusive": true,
"exact": false,
"message": "Number must be greater than or equal to 1",
"path": [
"limit"
]
}
]
},
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "The service is currently unavailable.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#service-unavailable",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}
A unique key, such as a UUID, that makes retrying this request safe: a retry with the same key and body returns the original response without running the operation again. Keys are kept for 24 hours after the request completes.
Stop only these people or companies, at most 100: every message of theirs not sent yet, in every step, is not sent. The campaign keeps its status and its other recipients still receive their messages. Omit to stop the whole campaign.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Folk Developer Portal","description":"Developer portal and API reference of folk","colors":{"primary":"#000000","light":"#ffffff","dark":"#222222"},"logo":{"light":"https://mintcdn.com/folk-cf968f5e/I7wFhRmtMuOvy2tG/assets/logo-light.svg?fit=max\u0026auto=format\u0026n=I7wFhRmtMuOvy2tG\u0026q=85\u0026s=08eda1dcbb1eefceac8ca5fea9c103d8","dark":"https://mintcdn.com/folk-cf968f5e/I7wFhRmtMuOvy2tG/assets/logo-dark.svg?fit=max\u0026auto=format\u0026n=I7wFhRmtMuOvy2tG\u0026q=85\u0026s=f7a85c0692d36cf4ae95ba0cb3a13827"},"favicon":{"light":"https://mintcdn.com/folk-cf968f5e/HcSGFJR-HRVkFe3E/assets/favicon-light.svg?fit=max\u0026auto=format\u0026n=HcSGFJR-HRVkFe3E\u0026q=85\u0026s=f507f5945e391292cf6679ecee54f2a0","dark":"https://mintcdn.com/folk-cf968f5e/HcSGFJR-HRVkFe3E/assets/favicon-dark.svg?fit=max\u0026auto=format\u0026n=HcSGFJR-HRVkFe3E\u0026q=85\u0026s=26f07b15afad6f7a4467054d25a0f955"},"api":{"playground":{"display":"interactive"},"examples":{"defaults":"all","languages":["curl","javascript","python","ruby","go","php"]}},"navbar":{"links":[{"href":"intercom://show","label":"Chat with support"},{"href":"https://www.folk.app/contact-sales","label":"Get a demo"}],"primary":{"type":"button","label":"Open app","href":"https://app.folk.app"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/folkhq","x":"https://twitter.com/folkhq","youtube":"https://www.youtube.com/channel/UCs3bswOUZvkouum7Rdx4i5w"}},"integrations":{"intercom":{"appId":"rn8e78eq"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"folk-cf968f5e","hasAudioNarration":false,"actualSubdomain":"folk-cf968f5e","customDomains":["developer.folk.app"],"gitSource":{"type":"github","owner":"folkapp-mintlify-prod","repo":"api-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae31dbecf19676b2b588155","collectionId":"b1d6ec05-19ff-4249-bf07-5b84084cabd6","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae31dbecf19676b2b588155"},"entitlements":{},"buildId":"6ae3b69e7dc0e59b2ea20910","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"API Reference","count":92},{"language":"default","tag":"Available endpoints","count":81},{"language":"default","tag":"Guides","count":16},{"language":"default","tag":"Introduction","count":11},{"language":"default","tag":"Campaigns","count":10},{"language":"default","tag":"Webhooks","count":9},{"language":"default","tag":"Core concepts","count":9},{"language":"default","tag":"Companies","count":8},{"language":"default","tag":"Custom objects","count":8},{"language":"default","tag":"People","count":8}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"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":"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":"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":"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}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"/* vietnamese */\n@font-face {\n font-family: 'Bricolage Grotesque';\n font-style: normal;\n font-weight: 200 800;\n font-stretch: 100%;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/bricolagegrotesque/v9/3y9K6as8bTXq_nANBjzKo3IeZx8z6up5BeSl9D4dj_x9PpZBMlGHInHEVA.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: 'Bricolage Grotesque';\n font-style: normal;\n font-weight: 200 800;\n font-stretch: 100%;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/bricolagegrotesque/v9/3y9K6as8bTXq_nANBjzKo3IeZx8z6up5BeSl9D4dj_x9PpZBMlGGInHEVA.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: 'Bricolage Grotesque';\n font-style: normal;\n font-weight: 200 800;\n font-stretch: 100%;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/bricolagegrotesque/v9/3y9K6as8bTXq_nANBjzKo3IeZx8z6up5BeSl9D4dj_x9PpZBMlGIInE.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:root{--font-family-headings-custom:'Bricolage Grotesque', sans-serif}h1,h2,h3,h4,h5,h6{font-optical-sizing:auto;font-weight:600;font-style:normal;font-variation-settings:'wdth' 100}.dark{--background-dark:25 25 25}#home-cta-button,.dark #topbar-cta-button>a>span{border:1px solid rgb(var(--gray-800))}.prose :where(a):not(:where([class~='not-prose'], [class~='not-prose'] *)){border-color:rgb(var(--primary-dark))}.dark .prose :where(a):not(:where([class~='not-prose'], [class~='not-prose'] *)){border-color:rgb(var(--primary-light))}.nav-tag-pill-text{font-weight:500!important;text-shadow:none;color:#fff!important;background-color:#2563eb!important}.dark .nav-tag-pill-text{background-color:#3b82f6!important}"}],"page":{"pagePath":"api-reference/campaigns/stop-a-campaign","slug":"/api-reference/campaigns/stop-a-campaign","pageMetadata":{"title":"(Beta) Stop a campaign","description":"Stop a scheduled or sending campaign, or only some of its recipients. Messages already sent stay sent; those not sent yet are not sent, with `notSentReason: \"stopped\"`.\n\nWithout a body, the whole campaign becomes `cancelled`: a scheduled campaign sends nothing, and a sending one sends none of its next steps. Stopping a cancelled campaign again leaves it unchanged. A campaign whose last step is already sending can only be stopped for some recipients.\n\nWith `recipientIds`, the campaign keeps its status. Merged contacts are resolved, and ids that are not recipients of the campaign or have nothing left to send are listed in `warnings`.\n\nA campaign still `processing` its messages answers 409 with a `Retry-After` header. A campaign that is not launched, finished or failed answers 409: delete a `draft` or `in_review` campaign instead.\u003cbr/>\u003cWarning>This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\u003c/Warning>","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"Stop a campaign","openapi":"/schemas/2025-06-09.json post /v1/campaigns/{campaignId}/stop","href":"/api-reference/campaigns/stop-a-campaign","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 code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n }, {Warning} = _components;\n if (!Warning) _missingMdxReference(\"Warning\", true);\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Stop a scheduled or sending campaign, or only some of its recipients. Messages already sent stay sent; those not sent yet are not sent, with \", _jsx(_components.code, {\n children: \"notSentReason: \\\"stopped\\\"\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Without a body, the whole campaign becomes \", _jsx(_components.code, {\n children: \"cancelled\"\n }), \": a scheduled campaign sends nothing, and a sending one sends none of its next steps. Stopping a cancelled campaign again leaves it unchanged. A campaign whose last step is already sending can only be stopped for some recipients.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"With \", _jsx(_components.code, {\n children: \"recipientIds\"\n }), \", the campaign keeps its status. Merged contacts are resolved, and ids that are not recipients of the campaign or have nothing left to send are listed in \", _jsx(_components.code, {\n children: \"warnings\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A campaign still \", _jsx(_components.code, {\n children: \"processing\"\n }), \" its messages answers 409 with a \", _jsx(_components.code, {\n children: \"Retry-After\"\n }), \" header. A campaign that is not launched, finished or failed answers 409: delete a \", _jsx(_components.code, {\n children: \"draft\"\n }), \" or \", _jsx(_components.code, {\n children: \"in_review\"\n }), \" campaign instead.\", _jsx(\"br\", {}), _jsx(Warning, {\n children: \"This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\"\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};\nfunction _missingMdxReference(id, component) {\n throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\");\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":"(Beta) Stop a campaign","description":"Stop a scheduled or sending campaign, or only some of its recipients. Messages already sent stay sent; those not sent yet are not sent, with `notSentReason: \"stopped\"`.\n\nWithout a body, the whole campaign becomes `cancelled`: a scheduled campaign sends nothing, and a sending one sends none of its next steps. Stopping a cancelled campaign again leaves it unchanged. A campaign whose last step is already sending can only be stopped for some recipients.\n\nWith `recipientIds`, the campaign keeps its status. Merged contacts are resolved, and ids that are not recipients of the campaign or have nothing left to send are listed in `warnings`.\n\nA campaign still `processing` its messages answers 409 with a `Retry-After` header. A campaign that is not launched, finished or failed answers 409: delete a `draft` or `in_review` campaign instead.\u003cbr/>\u003cWarning>This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\u003c/Warning>","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"Stop a campaign","openapi":"/schemas/2025-06-09.json post /v1/campaigns/{campaignId}/stop","href":"/api-reference/campaigns/stop-a-campaign","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/folk-cf968f5e/c239747596c4df94/intercom.js"],"openApiReferenceData":{"operation":{"security":["cba1a238-feee-481d-a47c-0574bac94faa"],"x-mint":{"metadata":{"tag":"Beta","title":"(Beta) Stop a campaign","sidebarTitle":"Stop a campaign"}},"operationId":"stopCampaign","summary":"Stop a campaign","description":"Stop a scheduled or sending campaign, or only some of its recipients. Messages already sent stay sent; those not sent yet are not sent, with `notSentReason: \"stopped\"`.\n\nWithout a body, the whole campaign becomes `cancelled`: a scheduled campaign sends nothing, and a sending one sends none of its next steps. Stopping a cancelled campaign again leaves it unchanged. A campaign whose last step is already sending can only be stopped for some recipients.\n\nWith `recipientIds`, the campaign keeps its status. Merged contacts are resolved, and ids that are not recipients of the campaign or have nothing left to send are listed in `warnings`.\n\nA campaign still `processing` its messages answers 409 with a `Retry-After` header. A campaign that is not launched, finished or failed answers 409: delete a `draft` or `in_review` campaign instead.\u003cbr/>\u003cWarning>This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\u003c/Warning>","tags":["Campaigns"],"parameters":["ccbec4f7-7352-486c-a13e-68fa0326c9e7","a2e2ba68-d09c-49b5-a50f-0779082a6e21"],"requestBody":"859902e2-24b9-47cd-9fdb-ee1d0cb3ff27","responses":{"200":"1623a3f7-3815-4a7a-875c-5fb0bcb0659b","400":"d0ed84a2-31dc-4796-b57a-ae423736462e","401":"8f8223fd-1ef5-46eb-b67a-2cca1d9755a1","403":"2057055e-f33f-4d85-b7fc-2b5048235200","404":"d959d8c7-9718-45d5-9b72-d09b976392f7","409":"c8dd3ef7-a326-4a49-8c9c-3d07ae9ed3e2","422":"a9103e36-c308-428d-9c2f-a924760ad924","429":"86021e0e-6f51-47c7-ab1e-84009c72be40","500":"5276f05c-c43b-4e90-81c3-22cdfc6b0ed6","503":"580ba6e9-8e10-491b-b53a-ba4b9ddafac4"},"method":"post","type":"path","servers":["705c1e19-6504-45e0-8cad-d9892d2fa301"],"path":"/v1/campaigns/{campaignId}/stop","baseUrlOptions":["https://api.folk.app"],"title":"Stop a campaign","codeSamples":[],"requestExampleLanguages":["bash","javascript","python","ruby","go","php"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"ccbec4f7-7352-486c-a13e-68fa0326c9e7":{"schema":{"type":"string","minLength":40,"maxLength":40,"isRequired":true,"description":"The ID of the campaign.","uniqueKey":"","typeLabel":"string"},"required":true,"description":"The ID of the campaign.","name":"campaignId","in":"path"},"a2e2ba68-d09c-49b5-a50f-0779082a6e21":{"schema":{"type":"string","maxLength":255,"description":"A unique key, such as a UUID, that makes retrying this request safe: a retry with the same key and body returns the original response without running the operation again. Keys are kept for 24 hours after the request completes.","example":"8e03978e-40d5-43e8-bc93-6894a57f9324","isRequired":false,"uniqueKey":"","typeLabel":"string"},"required":false,"name":"Idempotency-Key","in":"header"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"recipientIds":{"type":"array","items":{"type":"string","minLength":40,"maxLength":40,"uniqueKey":"recipientIds.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":100,"description":"Stop only these people or companies, at most 100: every message of theirs not sent yet, in every step, is not sent. The campaign keeps its status and its other recipients still receive their messages. Omit to stop the whole campaign.","example":["per_55175e81-9a52-4ac3-930e-82792c23499b"],"uniqueKey":"recipientIds","typeLabel":"string[]"}},"default":{},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"1623a3f7-3815-4a7a-875c-5fb0bcb0659b":{"description":"The campaign, once stopped.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer","example":1000},"description":"The maximum number of requests that you can make in the current rate limit window."},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":998},"description":"The number of requests remaining in the current rate limit window."},"X-RateLimit-Reset":{"schema":{"type":"integer","example":1747322958},"description":"The time at which the current rate limit window resets, in UTC epoch seconds."},"X-RateLimit-Limit-Burst":{"schema":{"type":"integer","example":20},"description":"The maximum number of requests that you can make in the current burst rate limit window."},"X-RateLimit-Remaining-Burst":{"schema":{"type":"integer","example":18},"description":"The number of requests remaining in the current burst rate limit window."},"X-RateLimit-Reset-Burst":{"schema":{"type":"integer","example":1747322902},"description":"The time at which the current burst rate limit window resets, in UTC epoch seconds."},"RateLimit-Policy":{"schema":{"type":"string","example":"\"default\";q=600;w=60, \"burst\";q=20;w=2"},"description":"The rate limit policies applied to the request, as defined by the IETF RateLimit header fields draft. `q` is the number of requests allowed per window and `w` the window length in seconds."},"RateLimit":{"schema":{"type":"string","example":"\"default\";r=598;t=42, \"burst\";r=18;t=1"},"description":"The current usage of each rate limit policy, as defined by the IETF RateLimit header fields draft. `r` is the number of requests remaining and `t` the number of seconds until the window resets."},"Retry-After":{"schema":{"type":"integer","example":60},"description":"The number of seconds to wait before making a new request after hitting the rate limit."}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"data.id","typeLabel":"string"},"name":{"type":"string","description":"The name of the campaign.","example":"Q3 outreach","isRequired":true,"uniqueKey":"data.name","typeLabel":"string"},"status":{"type":"string","enum":["draft","processing","in_review","scheduled","sending","finished","cancelled","failed"],"description":"The status of the campaign. One of: draft, processing, in_review, scheduled, sending, finished, cancelled, failed. `processing` means messages are being generated: poll until `in_review`.","example":"draft","isRequired":true,"uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"groupId":{"oneOf":[{"type":"string","description":"The group the campaign was created from, or null for a campaign created from a selection of contacts, or whose group was deleted since.","example":"grp_bc984b3f-0386-434d-82d7-a91eb6badd71","isRequired":true,"uniqueKey":"data.groupId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The group the campaign was created from, or null for a campaign created from a selection of contacts, or whose group was deleted since.","example":"grp_bc984b3f-0386-434d-82d7-a91eb6badd71","isRequired":true,"uniqueKey":"data.groupId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.groupId","typeLabel":"string | null"},"entityType":{"type":"string","enum":["person","company"],"description":"Whether the recipients are people or companies.","example":"person","isRequired":true,"uniqueKey":"data.entityType","typeLabel":"enum\u003cstring>"},"steps":{"type":"array","items":{"type":"object","properties":{"position":{"type":"integer","minimum":1,"description":"The 1-based position of the step in the campaign. Steps are addressed by position.","example":1,"isRequired":true,"uniqueKey":"data.steps.items.[INDEX].position","typeLabel":"integer"},"sender":{"oneOf":[{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"The ID of the sender, or null once it was deleted. `email` and `displayName` are then those the email was set up with.","example":"snd_4c3b2a19-8f7e-4d6c-9b5a-1e2f3d4c5b6a","isRequired":true,"uniqueKey":"data.steps.items.[INDEX].sender.oneOf.0.id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The ID of the sender, or null once it was deleted. `email` and `displayName` are then those the email was set up with.","example":"snd_4c3b2a19-8f7e-4d6c-9b5a-1e2f3d4c5b6a","isRequired":true,"uniqueKey":"data.steps.items.[INDEX].sender.oneOf.0.id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.steps.items.[INDEX].sender.oneOf.0.id","typeLabel":"string | null"},"email":{"type":"string","description":"The email address the email is sent from.","example":"john.doe@example.com","isRequired":true,"uniqueKey":"data.steps.items.[INDEX].sender.oneOf.0.email","typeLabel":"string"},"displayName":{"oneOf":[{"type":"string","description":"The name the email is sent under.","example":"John Doe","isRequired":true,"uniqueKey":"data.steps.items.[INDEX].sender.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"The name the email is sent under.","example":"John Doe","isRequired":true,"uniqueKey":"data.steps.items.[INDEX].sender.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.steps.items.[INDEX].sender.oneOf.0.displayName","typeLabel":"string | null"}},"required":["id","email","displayName"],"description":"Who the step is sent from. Each step has its own sender. `id` is null once the sender was deleted; `email` and `displayName` are then those the step was set up with. Null when the step has no sender.","isRequired":true,"uniqueKey":"data.steps.items.[INDEX].sender.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"id":{"oneOf":[{"type":"string","description":"The ID of the sender, or null once it was deleted. `email` and `displayName` are then those the email was set up with.","example":"snd_4c3b2a19-8f7e-4d6c-9b5a-1e2f3d4c5b6a"},{"type":"null","description":"The ID of the sender, or null once it was deleted. `email` and `displayName` are then those the email was set up with.","example":"snd_4c3b2a19-8f7e-4d6c-9b5a-1e2f3d4c5b6a"}]},"email":{"type":"string","description":"The email address the email is sent from.","example":"john.doe@example.com"},"displayName":{"oneOf":[{"type":"string","description":"The name the email is sent under.","example":"John Doe"},{"type":"null","description":"The name the email is sent under.","example":"John Doe"}]}},"required":["id","email","displayName"],"description":"Who the step is sent from. Each step has its own sender. `id` is null once the sender was deleted; `email` and `displayName` are then those the step was set up with. Null when the step has no sender.","isRequired":true,"uniqueKey":"data.steps.items.[INDEX].sender.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.steps.items.[INDEX].sender","typeLabel":"object | null"},"subject":{"type":"string","description":"The subject template, in plain text with `{{variables}}`. Literal `{{` is written `\\{{`.","example":"Quick question, {{firstName}}","isRequired":true,"uniqueKey":"data.steps.items.[INDEX].subject","typeLabel":"string"},"body":{"type":"string","description":"The body template, in HTML with `{{variables}}`. Always HTML, whatever format it was written in. A signed body ends with `\u003cp>{{signature}}\u003c/p>`; an unsubscribe link is `\u003ca href=\"{{unsubscribeLink}}\">`.","example":"\u003cp>Hi {{firstName}},\u003c/p>\u003cp>{{signature}}\u003c/p>","isRequired":true,"uniqueKey":"data.steps.items.[INDEX].body","typeLabel":"string"},"cc":{"type":"array","items":{"type":"string","uniqueKey":"data.steps.items.[INDEX].cc.items.[INDEX]","typeLabel":"string"},"description":"Email addresses copied on every message.","example":[],"isRequired":true,"uniqueKey":"data.steps.items.[INDEX].cc","typeLabel":"string[]"},"bcc":{"type":"array","items":{"type":"string","uniqueKey":"data.steps.items.[INDEX].bcc.items.[INDEX]","typeLabel":"string"},"description":"Email addresses blind-copied on every message.","example":[],"isRequired":true,"uniqueKey":"data.steps.items.[INDEX].bcc","typeLabel":"string[]"},"delayDays":{"type":"integer","minimum":0,"description":"Days to wait after the previous step before sending this one. 0 for the first step.","example":0,"isRequired":true,"uniqueKey":"data.steps.items.[INDEX].delayDays","typeLabel":"integer"},"sameThread":{"type":"boolean","description":"Whether the step is sent as a reply in the first step's thread, with its subject.","example":false,"isRequired":true,"uniqueKey":"data.steps.items.[INDEX].sameThread","typeLabel":"boolean"},"status":{"type":"string","enum":["draft","processing","in_review","scheduled","sending","sent","cancelled","failed"],"description":"The status of the step. One of: draft, processing, in_review, scheduled, sending, sent, cancelled, failed. `scheduled` means the campaign is scheduled or sending, and the step waits for its send date.","example":"draft","isRequired":true,"uniqueKey":"data.steps.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"messageCount":{"type":"integer","description":"The number of messages generated for this step.","example":0,"isRequired":true,"uniqueKey":"data.steps.items.[INDEX].messageCount","typeLabel":"integer"},"sentCount":{"type":"integer","description":"The number of messages of this step that were sent.","example":0,"isRequired":true,"uniqueKey":"data.steps.items.[INDEX].sentCount","typeLabel":"integer"},"notSentCount":{"type":"integer","description":"The number of messages of this step that were not sent.","example":0,"isRequired":true,"uniqueKey":"data.steps.items.[INDEX].notSentCount","typeLabel":"integer"}},"required":["position","sender","subject","body","cc","bcc","delayDays","sameThread","status","messageCount","sentCount","notSentCount"],"description":"A step of a campaign: the email template, with `{{variables}}`, sent to every recipient after the delay that follows the previous step. Each recipient gets their own message of the step, with the variables filled in.","uniqueKey":"data.steps.items.[INDEX]","typeLabel":"object"},"description":"The steps of the campaign, by position. A campaign that sends a single email has one step.","isRequired":true,"uniqueKey":"data.steps","typeLabel":"object[]"},"stopOnReply":{"type":"boolean","description":"Whether the remaining steps stop for a recipient who replied.","example":true,"isRequired":true,"uniqueKey":"data.stopOnReply","typeLabel":"boolean"},"recipientCount":{"type":"integer","description":"The number of recipients of the campaign.","example":12,"isRequired":true,"uniqueKey":"data.recipientCount","typeLabel":"integer"},"createdBy":{"type":"string","description":"The ID of the user who created the campaign.","example":"usr_bc984b3f-0386-434d-82d7-a91eb6badd71","isRequired":true,"uniqueKey":"data.createdBy","typeLabel":"string"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.updatedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.updatedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.updatedAt","typeLabel":"string\u003cdate-time> | null"},"scheduledAt":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.scheduledAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.scheduledAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.scheduledAt","typeLabel":"string\u003cdate-time> | null"},"startedAt":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.startedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.startedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.startedAt","typeLabel":"string\u003cdate-time> | null"},"finishedAt":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.finishedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.finishedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.finishedAt","typeLabel":"string\u003cdate-time> | null"},"error":{"oneOf":[{"type":"string","enum":["spam_detected","not_enough_credits","send_failed",null],"description":"Why the campaign failed, when its status is `failed`. One of: spam_detected, not_enough_credits, send_failed.","example":null,"isRequired":true,"uniqueKey":"data.error.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["spam_detected","not_enough_credits","send_failed",null],"description":"Why the campaign failed, when its status is `failed`. One of: spam_detected, not_enough_credits, send_failed.","example":null,"isRequired":true,"uniqueKey":"data.error.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.error","typeLabel":"enum\u003cstring> | null"}},"required":["id","name","status","groupId","entityType","steps","stopOnReply","recipientCount","createdBy","createdAt","updatedAt","scheduledAt","startedAt","finishedAt","error"],"description":"A campaign: one or more emails, each a step, sent to a list of people or companies.","example":{"id":"cmp_9b2f1c1e-2b8a-4d1e-8f5a-3c2d1e0f9a8b","name":"Q3 outreach","status":"draft","groupId":"grp_bc984b3f-0386-434d-82d7-a91eb6badd71","entityType":"person","steps":[{"position":1,"sender":{"id":"snd_4c3b2a19-8f7e-4d6c-9b5a-1e2f3d4c5b6a","email":"john.doe@example.com","displayName":"John Doe"},"subject":"Quick question, {{firstName}}","body":"\u003cp>Hi {{firstName}},\u003c/p>\u003cp>{{signature}}\u003c/p>","cc":[],"bcc":[],"delayDays":0,"sameThread":false,"status":"draft","messageCount":0,"sentCount":0,"notSentCount":0},{"position":2,"sender":{"id":"snd_4c3b2a19-8f7e-4d6c-9b5a-1e2f3d4c5b6a","email":"john.doe@example.com","displayName":"John Doe"},"subject":"","body":"\u003cp>Following up on my last email, {{firstName}}.\u003c/p>\u003cp>{{signature}}\u003c/p>","cc":[],"bcc":[],"delayDays":3,"sameThread":true,"status":"draft","messageCount":0,"sentCount":0,"notSentCount":0}],"stopOnReply":true,"recipientCount":12,"createdBy":"usr_bc984b3f-0386-434d-82d7-a91eb6badd71","createdAt":"2025-07-17T09:00:00.000Z","updatedAt":"2025-07-17T09:00:00.000Z","scheduledAt":null,"startedAt":null,"finishedAt":null,"error":null},"isRequired":true,"uniqueKey":"data","typeLabel":"object"},"deprecations":{"type":"array","items":{"type":"string","uniqueKey":"deprecations.items.[INDEX]","typeLabel":"string"},"example":["This field is deprecated"],"uniqueKey":"deprecations","typeLabel":"string[]"}},"required":["data"],"uniqueKey":"","typeLabel":"object"},"example":{"data":{"id":"cmp_9b2f1c1e-2b8a-4d1e-8f5a-3c2d1e0f9a8b","name":"Q3 outreach","status":"draft","groupId":"grp_bc984b3f-0386-434d-82d7-a91eb6badd71","entityType":"person","steps":[{"position":1,"sender":{"id":"snd_4c3b2a19-8f7e-4d6c-9b5a-1e2f3d4c5b6a","email":"john.doe@example.com","displayName":"John Doe"},"subject":"Quick question, {{firstName}}","body":"\u003cp>Hi {{firstName}},\u003c/p>\u003cp>{{signature}}\u003c/p>","cc":[],"bcc":[],"delayDays":0,"sameThread":false,"status":"draft","messageCount":0,"sentCount":0,"notSentCount":0},{"position":2,"sender":{"id":"snd_4c3b2a19-8f7e-4d6c-9b5a-1e2f3d4c5b6a","email":"john.doe@example.com","displayName":"John Doe"},"subject":"","body":"\u003cp>Following up on my last email, {{firstName}}.\u003c/p>\u003cp>{{signature}}\u003c/p>","cc":[],"bcc":[],"delayDays":3,"sameThread":true,"status":"draft","messageCount":0,"sentCount":0,"notSentCount":0}],"stopOnReply":true,"recipientCount":12,"createdBy":"usr_bc984b3f-0386-434d-82d7-a91eb6badd71","createdAt":"2025-07-17T09:00:00.000Z","updatedAt":"2025-07-17T09:00:00.000Z","scheduledAt":null,"startedAt":null,"finishedAt":null,"error":null}},"examples":{"Example":{"title":"Example","value":{"data":{"id":"cmp_9b2f1c1e-2b8a-4d1e-8f5a-3c2d1e0f9a8b","name":"Q3 outreach","status":"draft","groupId":"grp_bc984b3f-0386-434d-82d7-a91eb6badd71","entityType":"person","steps":[{"position":1,"sender":{"id":"snd_4c3b2a19-8f7e-4d6c-9b5a-1e2f3d4c5b6a","email":"john.doe@example.com","displayName":"John Doe"},"subject":"Quick question, {{firstName}}","body":"\u003cp>Hi {{firstName}},\u003c/p>\u003cp>{{signature}}\u003c/p>","cc":[],"bcc":[],"delayDays":0,"sameThread":false,"status":"draft","messageCount":0,"sentCount":0,"notSentCount":0},{"position":2,"sender":{"id":"snd_4c3b2a19-8f7e-4d6c-9b5a-1e2f3d4c5b6a","email":"john.doe@example.com","displayName":"John Doe"},"subject":"","body":"\u003cp>Following up on my last email, {{firstName}}.\u003c/p>\u003cp>{{signature}}\u003c/p>","cc":[],"bcc":[],"delayDays":3,"sameThread":true,"status":"draft","messageCount":0,"sentCount":0,"notSentCount":0}],"stopOnReply":true,"recipientCount":12,"createdBy":"usr_bc984b3f-0386-434d-82d7-a91eb6badd71","createdAt":"2025-07-17T09:00:00.000Z","updatedAt":"2025-07-17T09:00:00.000Z","scheduledAt":null,"startedAt":null,"finishedAt":null,"error":null}}}},"exampleType":"examples"}},"exampleType":"examples"},"d0ed84a2-31dc-4796-b57a-ae423736462e":{"description":"The request was unacceptable, often due to missing an invalid parameter.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer","example":1000},"description":"The maximum number of requests that you can make in the current rate limit window."},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":998},"description":"The number of requests remaining in the current rate limit window."},"X-RateLimit-Reset":{"schema":{"type":"integer","example":1747322958},"description":"The time at which the current rate limit window resets, in UTC epoch seconds."},"X-RateLimit-Limit-Burst":{"schema":{"type":"integer","example":20},"description":"The maximum number of requests that you can make in the current burst rate limit window."},"X-RateLimit-Remaining-Burst":{"schema":{"type":"integer","example":18},"description":"The number of requests remaining in the current burst rate limit window."},"X-RateLimit-Reset-Burst":{"schema":{"type":"integer","example":1747322902},"description":"The time at which the current burst rate limit window resets, in UTC epoch seconds."},"RateLimit-Policy":{"schema":{"type":"string","example":"\"default\";q=600;w=60, \"burst\";q=20;w=2"},"description":"The rate limit policies applied to the request, as defined by the IETF RateLimit header fields draft. `q` is the number of requests allowed per window and `w` the window length in seconds."},"RateLimit":{"schema":{"type":"string","example":"\"default\";r=598;t=42, \"burst\";r=18;t=1"},"description":"The current usage of each rate limit policy, as defined by the IETF RateLimit header fields draft. `r` is the number of requests remaining and `t` the number of seconds until the window resets."},"Retry-After":{"schema":{"type":"integer","example":60},"description":"The number of seconds to wait before making a new request after hitting the rate limit."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"TOO_MANY_REQUESTS","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"You have exceeded your rate limit.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"documentationUrl":{"type":"string","format":"uri","example":"https://developer.folk.app/api-reference/errors#rate-limiting","isRequired":true,"uniqueKey":"error.documentationUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string\u003cuuid>"},"timestamp":{"type":"string","format":"date-time","example":"2025-10-01T12:00:00Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"details":{"type":"object","additionalProperties":true,"example":{"policy":"burst","limit":20,"remaining":0,"windowSeconds":2,"retryAfter":"2025-10-01T12:00:02.000Z"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","documentationUrl","requestId","timestamp"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Error response containing error details.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"INVALID_REQUEST","message":"The request was invalid.","documentationUrl":"https://developer.folk.app/api-reference/errors#bad-request","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"INVALID_REQUEST","message":"The request was invalid.","documentationUrl":"https://developer.folk.app/api-reference/errors#bad-request","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"8f8223fd-1ef5-46eb-b67a-2cca1d9755a1":{"description":"No valid API key provided.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer","example":1000},"description":"The maximum number of requests that you can make in the current rate limit window."},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":998},"description":"The number of requests remaining in the current rate limit window."},"X-RateLimit-Reset":{"schema":{"type":"integer","example":1747322958},"description":"The time at which the current rate limit window resets, in UTC epoch seconds."},"X-RateLimit-Limit-Burst":{"schema":{"type":"integer","example":20},"description":"The maximum number of requests that you can make in the current burst rate limit window."},"X-RateLimit-Remaining-Burst":{"schema":{"type":"integer","example":18},"description":"The number of requests remaining in the current burst rate limit window."},"X-RateLimit-Reset-Burst":{"schema":{"type":"integer","example":1747322902},"description":"The time at which the current burst rate limit window resets, in UTC epoch seconds."},"RateLimit-Policy":{"schema":{"type":"string","example":"\"default\";q=600;w=60, \"burst\";q=20;w=2"},"description":"The rate limit policies applied to the request, as defined by the IETF RateLimit header fields draft. `q` is the number of requests allowed per window and `w` the window length in seconds."},"RateLimit":{"schema":{"type":"string","example":"\"default\";r=598;t=42, \"burst\";r=18;t=1"},"description":"The current usage of each rate limit policy, as defined by the IETF RateLimit header fields draft. `r` is the number of requests remaining and `t` the number of seconds until the window resets."},"Retry-After":{"schema":{"type":"integer","example":60},"description":"The number of seconds to wait before making a new request after hitting the rate limit."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"TOO_MANY_REQUESTS","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"You have exceeded your rate limit.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"documentationUrl":{"type":"string","format":"uri","example":"https://developer.folk.app/api-reference/errors#rate-limiting","isRequired":true,"uniqueKey":"error.documentationUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string\u003cuuid>"},"timestamp":{"type":"string","format":"date-time","example":"2025-10-01T12:00:00Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"details":{"type":"object","additionalProperties":true,"example":{"policy":"burst","limit":20,"remaining":0,"windowSeconds":2,"retryAfter":"2025-10-01T12:00:02.000Z"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","documentationUrl","requestId","timestamp"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Error response containing error details.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"UNAUTHORIZED","message":"No valid API key provided.","documentationUrl":"https://developer.folk.app/api-reference/errors#unauthorized","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UNAUTHORIZED","message":"No valid API key provided.","documentationUrl":"https://developer.folk.app/api-reference/errors#unauthorized","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"2057055e-f33f-4d85-b7fc-2b5048235200":{"description":"The API key doesn’t have permissions to perform the request.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer","example":1000},"description":"The maximum number of requests that you can make in the current rate limit window."},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":998},"description":"The number of requests remaining in the current rate limit window."},"X-RateLimit-Reset":{"schema":{"type":"integer","example":1747322958},"description":"The time at which the current rate limit window resets, in UTC epoch seconds."},"X-RateLimit-Limit-Burst":{"schema":{"type":"integer","example":20},"description":"The maximum number of requests that you can make in the current burst rate limit window."},"X-RateLimit-Remaining-Burst":{"schema":{"type":"integer","example":18},"description":"The number of requests remaining in the current burst rate limit window."},"X-RateLimit-Reset-Burst":{"schema":{"type":"integer","example":1747322902},"description":"The time at which the current burst rate limit window resets, in UTC epoch seconds."},"RateLimit-Policy":{"schema":{"type":"string","example":"\"default\";q=600;w=60, \"burst\";q=20;w=2"},"description":"The rate limit policies applied to the request, as defined by the IETF RateLimit header fields draft. `q` is the number of requests allowed per window and `w` the window length in seconds."},"RateLimit":{"schema":{"type":"string","example":"\"default\";r=598;t=42, \"burst\";r=18;t=1"},"description":"The current usage of each rate limit policy, as defined by the IETF RateLimit header fields draft. `r` is the number of requests remaining and `t` the number of seconds until the window resets."},"Retry-After":{"schema":{"type":"integer","example":60},"description":"The number of seconds to wait before making a new request after hitting the rate limit."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"TOO_MANY_REQUESTS","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"You have exceeded your rate limit.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"documentationUrl":{"type":"string","format":"uri","example":"https://developer.folk.app/api-reference/errors#rate-limiting","isRequired":true,"uniqueKey":"error.documentationUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string\u003cuuid>"},"timestamp":{"type":"string","format":"date-time","example":"2025-10-01T12:00:00Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"details":{"type":"object","additionalProperties":true,"example":{"policy":"burst","limit":20,"remaining":0,"windowSeconds":2,"retryAfter":"2025-10-01T12:00:02.000Z"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","documentationUrl","requestId","timestamp"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Error response containing error details.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"FORBIDDEN","message":"The API key doesn’t have permissions to perform the request.","documentationUrl":"https://developer.folk.app/api-reference/errors#forbidden","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"FORBIDDEN","message":"The API key doesn’t have permissions to perform the request.","documentationUrl":"https://developer.folk.app/api-reference/errors#forbidden","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"d959d8c7-9718-45d5-9b72-d09b976392f7":{"description":"The requested resource doesn’t exist.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer","example":1000},"description":"The maximum number of requests that you can make in the current rate limit window."},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":998},"description":"The number of requests remaining in the current rate limit window."},"X-RateLimit-Reset":{"schema":{"type":"integer","example":1747322958},"description":"The time at which the current rate limit window resets, in UTC epoch seconds."},"X-RateLimit-Limit-Burst":{"schema":{"type":"integer","example":20},"description":"The maximum number of requests that you can make in the current burst rate limit window."},"X-RateLimit-Remaining-Burst":{"schema":{"type":"integer","example":18},"description":"The number of requests remaining in the current burst rate limit window."},"X-RateLimit-Reset-Burst":{"schema":{"type":"integer","example":1747322902},"description":"The time at which the current burst rate limit window resets, in UTC epoch seconds."},"RateLimit-Policy":{"schema":{"type":"string","example":"\"default\";q=600;w=60, \"burst\";q=20;w=2"},"description":"The rate limit policies applied to the request, as defined by the IETF RateLimit header fields draft. `q` is the number of requests allowed per window and `w` the window length in seconds."},"RateLimit":{"schema":{"type":"string","example":"\"default\";r=598;t=42, \"burst\";r=18;t=1"},"description":"The current usage of each rate limit policy, as defined by the IETF RateLimit header fields draft. `r` is the number of requests remaining and `t` the number of seconds until the window resets."},"Retry-After":{"schema":{"type":"integer","example":60},"description":"The number of seconds to wait before making a new request after hitting the rate limit."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"TOO_MANY_REQUESTS","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"You have exceeded your rate limit.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"documentationUrl":{"type":"string","format":"uri","example":"https://developer.folk.app/api-reference/errors#rate-limiting","isRequired":true,"uniqueKey":"error.documentationUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string\u003cuuid>"},"timestamp":{"type":"string","format":"date-time","example":"2025-10-01T12:00:00Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"details":{"type":"object","additionalProperties":true,"example":{"policy":"burst","limit":20,"remaining":0,"windowSeconds":2,"retryAfter":"2025-10-01T12:00:02.000Z"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","documentationUrl","requestId","timestamp"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Error response containing error details.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","documentationUrl":"https://developer.folk.app/api-reference/errors#not-found","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","documentationUrl":"https://developer.folk.app/api-reference/errors#not-found","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"c8dd3ef7-a326-4a49-8c9c-3d07ae9ed3e2":{"description":"A request with the same `Idempotency-Key` is still being processed, or the resource is in a state that does not allow the operation.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer","example":1000},"description":"The maximum number of requests that you can make in the current rate limit window."},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":998},"description":"The number of requests remaining in the current rate limit window."},"X-RateLimit-Reset":{"schema":{"type":"integer","example":1747322958},"description":"The time at which the current rate limit window resets, in UTC epoch seconds."},"X-RateLimit-Limit-Burst":{"schema":{"type":"integer","example":20},"description":"The maximum number of requests that you can make in the current burst rate limit window."},"X-RateLimit-Remaining-Burst":{"schema":{"type":"integer","example":18},"description":"The number of requests remaining in the current burst rate limit window."},"X-RateLimit-Reset-Burst":{"schema":{"type":"integer","example":1747322902},"description":"The time at which the current burst rate limit window resets, in UTC epoch seconds."},"RateLimit-Policy":{"schema":{"type":"string","example":"\"default\";q=600;w=60, \"burst\";q=20;w=2"},"description":"The rate limit policies applied to the request, as defined by the IETF RateLimit header fields draft. `q` is the number of requests allowed per window and `w` the window length in seconds."},"RateLimit":{"schema":{"type":"string","example":"\"default\";r=598;t=42, \"burst\";r=18;t=1"},"description":"The current usage of each rate limit policy, as defined by the IETF RateLimit header fields draft. `r` is the number of requests remaining and `t` the number of seconds until the window resets."},"Retry-After":{"schema":{"type":"integer","example":5},"description":"When the conflict resolves on its own, the number of seconds to wait before retrying."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"TOO_MANY_REQUESTS","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"You have exceeded your rate limit.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"documentationUrl":{"type":"string","format":"uri","example":"https://developer.folk.app/api-reference/errors#rate-limiting","isRequired":true,"uniqueKey":"error.documentationUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string\u003cuuid>"},"timestamp":{"type":"string","format":"date-time","example":"2025-10-01T12:00:00Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"details":{"type":"object","additionalProperties":true,"example":{"policy":"burst","limit":20,"remaining":0,"windowSeconds":2,"retryAfter":"2025-10-01T12:00:02.000Z"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","documentationUrl","requestId","timestamp"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Error response containing error details.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"IDEMPOTENCY_REQUEST_IN_PROGRESS","message":"A request with the same Idempotency-Key is still being processed. Retry once it has completed.","documentationUrl":"https://developer.folk.app/api-reference/idempotency#errors","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"IDEMPOTENCY_REQUEST_IN_PROGRESS","message":"A request with the same Idempotency-Key is still being processed. Retry once it has completed.","documentationUrl":"https://developer.folk.app/api-reference/idempotency#errors","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"a9103e36-c308-428d-9c2f-a924760ad924":{"description":"The request was unacceptable, often due to missing or invalid parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer","example":1000},"description":"The maximum number of requests that you can make in the current rate limit window."},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":998},"description":"The number of requests remaining in the current rate limit window."},"X-RateLimit-Reset":{"schema":{"type":"integer","example":1747322958},"description":"The time at which the current rate limit window resets, in UTC epoch seconds."},"X-RateLimit-Limit-Burst":{"schema":{"type":"integer","example":20},"description":"The maximum number of requests that you can make in the current burst rate limit window."},"X-RateLimit-Remaining-Burst":{"schema":{"type":"integer","example":18},"description":"The number of requests remaining in the current burst rate limit window."},"X-RateLimit-Reset-Burst":{"schema":{"type":"integer","example":1747322902},"description":"The time at which the current burst rate limit window resets, in UTC epoch seconds."},"RateLimit-Policy":{"schema":{"type":"string","example":"\"default\";q=600;w=60, \"burst\";q=20;w=2"},"description":"The rate limit policies applied to the request, as defined by the IETF RateLimit header fields draft. `q` is the number of requests allowed per window and `w` the window length in seconds."},"RateLimit":{"schema":{"type":"string","example":"\"default\";r=598;t=42, \"burst\";r=18;t=1"},"description":"The current usage of each rate limit policy, as defined by the IETF RateLimit header fields draft. `r` is the number of requests remaining and `t` the number of seconds until the window resets."},"Retry-After":{"schema":{"type":"integer","example":60},"description":"The number of seconds to wait before making a new request after hitting the rate limit."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"TOO_MANY_REQUESTS","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"You have exceeded your rate limit.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"documentationUrl":{"type":"string","format":"uri","example":"https://developer.folk.app/api-reference/errors#rate-limiting","isRequired":true,"uniqueKey":"error.documentationUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string\u003cuuid>"},"timestamp":{"type":"string","format":"date-time","example":"2025-10-01T12:00:00Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"details":{"type":"object","additionalProperties":true,"example":{"policy":"burst","limit":20,"remaining":0,"windowSeconds":2,"retryAfter":"2025-10-01T12:00:02.000Z"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","documentationUrl","requestId","timestamp"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Error response containing error details.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"UNPROCESSABLE_ENTITY","message":"Invalid query parameters","documentationUrl":"https://developer.folk.app/api-reference/errors#unprocessable-entity","details":{"issues":[{"code":"too_small","minimum":1,"type":"number","inclusive":true,"exact":false,"message":"Number must be greater than or equal to 1","path":["limit"]}]},"requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UNPROCESSABLE_ENTITY","message":"Invalid query parameters","documentationUrl":"https://developer.folk.app/api-reference/errors#unprocessable-entity","details":{"issues":[{"code":"too_small","minimum":1,"type":"number","inclusive":true,"exact":false,"message":"Number must be greater than or equal to 1","path":["limit"]}]},"requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"86021e0e-6f51-47c7-ab1e-84009c72be40":{"description":"Too many requests hit the API too quickly. We recommend an exponential backoff of your requests.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer","example":1000},"description":"The maximum number of requests that you can make in the current rate limit window."},"X-RateLimit-Remaining":{"schema":{"type":"integer","example":998},"description":"The number of requests remaining in the current rate limit window."},"X-RateLimit-Reset":{"schema":{"type":"integer","example":1747322958},"description":"The time at which the current rate limit window resets, in UTC epoch seconds."},"X-RateLimit-Limit-Burst":{"schema":{"type":"integer","example":20},"description":"The maximum number of requests that you can make in the current burst rate limit window."},"X-RateLimit-Remaining-Burst":{"schema":{"type":"integer","example":18},"description":"The number of requests remaining in the current burst rate limit window."},"X-RateLimit-Reset-Burst":{"schema":{"type":"integer","example":1747322902},"description":"The time at which the current burst rate limit window resets, in UTC epoch seconds."},"RateLimit-Policy":{"schema":{"type":"string","example":"\"default\";q=600;w=60, \"burst\";q=20;w=2"},"description":"The rate limit policies applied to the request, as defined by the IETF RateLimit header fields draft. `q` is the number of requests allowed per window and `w` the window length in seconds."},"RateLimit":{"schema":{"type":"string","example":"\"default\";r=598;t=42, \"burst\";r=18;t=1"},"description":"The current usage of each rate limit policy, as defined by the IETF RateLimit header fields draft. `r` is the number of requests remaining and `t` the number of seconds until the window resets."},"Retry-After":{"schema":{"type":"integer","example":60},"description":"The number of seconds to wait before making a new request after hitting the rate limit."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"TOO_MANY_REQUESTS","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"You have exceeded your rate limit.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"documentationUrl":{"type":"string","format":"uri","example":"https://developer.folk.app/api-reference/errors#rate-limiting","isRequired":true,"uniqueKey":"error.documentationUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string\u003cuuid>"},"timestamp":{"type":"string","format":"date-time","example":"2025-10-01T12:00:00Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"details":{"type":"object","properties":{"policy":{"type":"string","enum":["default","burst"],"description":"The name of the rate limit policy.","isRequired":true,"uniqueKey":"error.details.policy","typeLabel":"enum\u003cstring>"},"limit":{"type":"integer","description":"The maximum number of requests allowed per window.","isRequired":true,"uniqueKey":"error.details.limit","typeLabel":"integer"},"remaining":{"type":"integer","description":"The number of requests remaining in the current window.","isRequired":true,"uniqueKey":"error.details.remaining","typeLabel":"integer"},"windowSeconds":{"type":"integer","description":"The length of the window, in seconds.","isRequired":true,"uniqueKey":"error.details.windowSeconds","typeLabel":"integer"},"retryAfter":{"type":"string","format":"date-time","description":"When the current window resets.","isRequired":true,"uniqueKey":"error.details.retryAfter","typeLabel":"string\u003cdate-time>"},"policies":{"type":"array","items":{"type":"object","properties":{"policy":{"type":"string","enum":["default","burst"],"description":"The name of the rate limit policy.","isRequired":true,"uniqueKey":"error.details.policies.items.[INDEX].policy","typeLabel":"enum\u003cstring>"},"limit":{"type":"integer","description":"The maximum number of requests allowed per window.","isRequired":true,"uniqueKey":"error.details.policies.items.[INDEX].limit","typeLabel":"integer"},"remaining":{"type":"integer","description":"The number of requests remaining in the current window.","isRequired":true,"uniqueKey":"error.details.policies.items.[INDEX].remaining","typeLabel":"integer"},"windowSeconds":{"type":"integer","description":"The length of the window, in seconds.","isRequired":true,"uniqueKey":"error.details.policies.items.[INDEX].windowSeconds","typeLabel":"integer"},"retryAfter":{"type":"string","format":"date-time","description":"When the current window resets.","isRequired":true,"uniqueKey":"error.details.policies.items.[INDEX].retryAfter","typeLabel":"string\u003cdate-time>"}},"required":["policy","limit","remaining","windowSeconds","retryAfter"],"uniqueKey":"error.details.policies.items.[INDEX]","typeLabel":"object"},"description":"The status of every rate limit policy applied to the request.","isRequired":true,"uniqueKey":"error.details.policies","typeLabel":"object[]"}},"required":["policy","limit","remaining","windowSeconds","retryAfter","policies"],"description":"The exceeded rate limit policy. When several are exceeded, the one resetting last.","isRequired":true,"uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","documentationUrl","requestId","timestamp","details"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Error response returned when a rate limit is exceeded.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"TOO_MANY_REQUESTS","message":"You have exceeded your rate limit.","documentationUrl":"https://developer.folk.app/api-reference/errors#rate-limiting","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z","details":{"policy":"burst","limit":20,"remaining":0,"windowSeconds":2,"retryAfter":"2025-10-01T12:00:02.000Z","policies":[{"policy":"default","limit":600,"remaining":412,"windowSeconds":60,"retryAfter":"2025-10-01T12:01:00.000Z"},{"policy":"burst","limit":20,"remaining":0,"windowSeconds":2,"retryAfter":"2025-10-01T12:00:02.000Z"}]}}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"TOO_MANY_REQUESTS","message":"You have exceeded your rate limit.","documentationUrl":"https://developer.folk.app/api-reference/errors#rate-limiting","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z","details":{"policy":"burst","limit":20,"remaining":0,"windowSeconds":2,"retryAfter":"2025-10-01T12:00:02.000Z","policies":[{"policy":"default","limit":600,"remaining":412,"windowSeconds":60,"retryAfter":"2025-10-01T12:01:00.000Z"},{"policy":"burst","limit":20,"remaining":0,"windowSeconds":2,"retryAfter":"2025-10-01T12:00:02.000Z"}]}}}}},"exampleType":"examples"}},"exampleType":"examples"},"5276f05c-c43b-4e90-81c3-22cdfc6b0ed6":{"description":"Something went wrong on our end.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"TOO_MANY_REQUESTS","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"You have exceeded your rate limit.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"documentationUrl":{"type":"string","format":"uri","example":"https://developer.folk.app/api-reference/errors#rate-limiting","isRequired":true,"uniqueKey":"error.documentationUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string\u003cuuid>"},"timestamp":{"type":"string","format":"date-time","example":"2025-10-01T12:00:00Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"details":{"type":"object","additionalProperties":true,"example":{"policy":"burst","limit":20,"remaining":0,"windowSeconds":2,"retryAfter":"2025-10-01T12:00:02.000Z"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","documentationUrl","requestId","timestamp"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Error response containing error details.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"INTERNAL_SERVER_ERROR","message":"An internal server error occurred.","documentationUrl":"https://developer.folk.app/api-reference/errors#internal-server-error","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"INTERNAL_SERVER_ERROR","message":"An internal server error occurred.","documentationUrl":"https://developer.folk.app/api-reference/errors#internal-server-error","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"580ba6e9-8e10-491b-b53a-ba4b9ddafac4":{"description":"The server is overloaded or down for maintenance.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"TOO_MANY_REQUESTS","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"You have exceeded your rate limit.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"documentationUrl":{"type":"string","format":"uri","example":"https://developer.folk.app/api-reference/errors#rate-limiting","isRequired":true,"uniqueKey":"error.documentationUrl","typeLabel":"string\u003curi>"},"requestId":{"type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string\u003cuuid>"},"timestamp":{"type":"string","format":"date-time","example":"2025-10-01T12:00:00Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"details":{"type":"object","additionalProperties":true,"example":{"policy":"burst","limit":20,"remaining":0,"windowSeconds":2,"retryAfter":"2025-10-01T12:00:02.000Z"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","documentationUrl","requestId","timestamp"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Error response containing error details.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"SERVICE_UNAVAILABLE","message":"The service is currently unavailable.","documentationUrl":"https://developer.folk.app/api-reference/errors#service-unavailable","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"SERVICE_UNAVAILABLE","message":"The service is currently unavailable.","documentationUrl":"https://developer.folk.app/api-reference/errors#service-unavailable","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"cba1a238-feee-481d-a47c-0574bac94faa":{"bearerApiKeyAuth":{"type":"http","scheme":"bearer","description":"API key for authentication","scopes":[],"schemeName":"bearerApiKeyAuth"}}},"servers":{"705c1e19-6504-45e0-8cad-d9892d2fa301":{"url":"https://api.folk.app","description":"Folk's public API production base URL.","x-internal":false}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"API key for authentication","scopes":[],"schemeName":"bearerApiKeyAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key for authentication","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerApiKeyAuth","name":"Authorization"}],"title":"bearerApiKeyAuth"}]},"originalFileLocation":"schemas/2025-06-09.json"},"subdomain":"folk-cf968f5e","siteName":"Folk Developer Portal","title":"(Beta) Stop a campaign - Folk Developer Portal","navMaps":{"firstHrefInVersion":{"2025-06-09":{"href":"/api-reference/campaigns/stop-a-campaign","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T21:12:11.823Z","originalFileLocation":"api-reference/campaigns/stop-a-campaign.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=\"Stop a scheduled or sending campaign, or only some of its recipients. Messages already sent stay sent; those not sent yet are not sent, with notSentReason: \u0026quot;stopped\u0026quot;. Without a body, the whole campaign becomes cancelled: a scheduled campaign sends nothing, and a sending one sends none of its next steps. Stopping a cancelled campaign again leaves it unchanged. A campaign whose last step is already sending can only be stopped for some recipients. With recipientIds, the campaign keeps its status. Merged contacts are resolved, and ids that are not recipients of the campaign or have nothing left to send are listed in warnings. A campaign still processing its messages answers 409 with a Retry-After header. A campaign that is not launched, finished or failed answers 409: delete a draft or in_review campaign instead.This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Folk Developer Portal\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/folk-cf968f5e/2qJ3PKRZLvFhl3LP/_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/folk-cf968f5e/2qJ3PKRZLvFhl3LP/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/folk-cf968f5e/2qJ3PKRZLvFhl3LP/_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/folk-cf968f5e/2qJ3PKRZLvFhl3LP/_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/folk-cf968f5e/2qJ3PKRZLvFhl3LP/_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/folk-cf968f5e/2qJ3PKRZLvFhl3LP/_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/folk-cf968f5e/2qJ3PKRZLvFhl3LP/_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/folk-cf968f5e/2qJ3PKRZLvFhl3LP/_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/folk-cf968f5e/2qJ3PKRZLvFhl3LP/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"(Beta) Stop a campaign - Folk Developer Portal\">\u003cmeta data-mint-head property=\"og:description\" content=\"Stop a scheduled or sending campaign, or only some of its recipients. Messages already sent stay sent; those not sent yet are not sent, with notSentReason: \u0026quot;stopped\u0026quot;. Without a body, the whole campaign becomes cancelled: a scheduled campaign sends nothing, and a sending one sends none of its next steps. Stopping a cancelled campaign again leaves it unchanged. A campaign whose last step is already sending can only be stopped for some recipients. With recipientIds, the campaign keeps its status. Merged contacts are resolved, and ids that are not recipients of the campaign or have nothing left to send are listed in warnings. A campaign still processing its messages answers 409 with a Retry-After header. A campaign that is not launched, finished or failed answers 409: delete a draft or in_review campaign instead.This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Folk Developer Portal\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developer.folk.app/api-reference/campaigns/stop-a-campaign\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://folk-cf968f5e.mintlify.app/_mintlify/api/og/v2?division=Campaigns\u0026amp;title=%28Beta%29+Stop+a+campaign\u0026amp;description=Stop+a+scheduled+or+sending+campaign%2C+or+only+some+of+its+recipients.+Messages+already+sent+stay+sent%3B+those+not+sent+yet+are+not+sent%2C+with+%60notSentReason%3A+%22st\u0026amp;theme=85df8d899a1a67ad96f0c424\u0026amp;signature=4da1c148d69a36ed545b8aa635c2d359645860b924663a17e017a91ebe2081d5\">\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=\"(Beta) Stop a campaign - Folk Developer Portal\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Stop a scheduled or sending campaign, or only some of its recipients. Messages already sent stay sent; those not sent yet are not sent, with notSentReason: \u0026quot;stopped\u0026quot;. Without a body, the whole campaign becomes cancelled: a scheduled campaign sends nothing, and a sending one sends none of its next steps. Stopping a cancelled campaign again leaves it unchanged. A campaign whose last step is already sending can only be stopped for some recipients. With recipientIds, the campaign keeps its status. Merged contacts are resolved, and ids that are not recipients of the campaign or have nothing left to send are listed in warnings. A campaign still processing its messages answers 409 with a Retry-After header. A campaign that is not launched, finished or failed answers 409: delete a draft or in_review campaign instead.This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://folk-cf968f5e.mintlify.app/_mintlify/api/og/v2?division=Campaigns\u0026amp;title=%28Beta%29+Stop+a+campaign\u0026amp;description=Stop+a+scheduled+or+sending+campaign%2C+or+only+some+of+its+recipients.+Messages+already+sent+stay+sent%3B+those+not+sent+yet+are+not+sent%2C+with+%60notSentReason%3A+%22st\u0026amp;theme=85df8d899a1a67ad96f0c424\u0026amp;signature=4da1c148d69a36ed545b8aa635c2d359645860b924663a17e017a91ebe2081d5\">\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/folk-cf968f5e/2qJ3PKRZLvFhl3LP/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Folk Developer Portal\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#000000\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developer.folk.app/api-reference/campaigns/stop-a-campaign\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/campaigns/stop-a-campaign.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developer.folk.app/#organization\",\"name\":\"Folk Developer Portal\",\"url\":\"https://developer.folk.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/folk-cf968f5e/I7wFhRmtMuOvy2tG/assets/logo-light.svg?fit=max\u0026auto=format\u0026n=I7wFhRmtMuOvy2tG\u0026q=85\u0026s=08eda1dcbb1eefceac8ca5fea9c103d8\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developer.folk.app#website\",\"name\":\"Folk Developer Portal\",\"url\":\"https://developer.folk.app\",\"publisher\":{\"@id\":\"https://developer.folk.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developer.folk.app/api-reference/campaigns/stop-a-campaign#webpage\",\"url\":\"https://developer.folk.app/api-reference/campaigns/stop-a-campaign\",\"name\":\"(Beta) Stop a campaign\",\"description\":\"Stop a scheduled or sending campaign, or only some of its recipients. Messages already sent stay sent; those not sent yet are not sent, with notSentReason: \\\"stopped\\\". Without a body, the whole campaign becomes cancelled: a scheduled campaign sends nothing, and a sending one sends none of its next steps. Stopping a cancelled campaign again leaves it unchanged. A campaign whose last step is already sending can only be stopped for some recipients. With recipientIds, the campaign keeps its status. Merged contacts are resolved, and ids that are not recipients of the campaign or have nothing left to send are listed in warnings. A campaign still processing its messages answers 409 with a Retry-After header. A campaign that is not launched, finished or failed answers 409: delete a draft or in_review campaign instead.This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\",\"dateModified\":\"2026-10-29T21:12:11.823Z\",\"isPartOf\":{\"@id\":\"https://developer.folk.app#website\"},\"breadcrumb\":{\"@id\":\"https://developer.folk.app/api-reference/campaigns/stop-a-campaign#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developer.folk.app/api-reference/campaigns/stop-a-campaign#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Available endpoints\",\"item\":\"https://developer.folk.app/api-reference/people/list-people\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Campaigns\",\"item\":\"https://developer.folk.app/api-reference/campaigns/list-campaigns\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"(Beta) Stop a campaign\",\"item\":\"https://developer.folk.app/api-reference/campaigns/stop-a-campaign\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developer.folk.app/api-reference/campaigns/stop-a-campaign#apireference\",\"headline\":\"(Beta) Stop a campaign\",\"name\":\"(Beta) Stop a campaign\",\"description\":\"Stop a scheduled or sending campaign, or only some of its recipients. Messages already sent stay sent; those not sent yet are not sent, with notSentReason: \\\"stopped\\\". Without a body, the whole campaign becomes cancelled: a scheduled campaign sends nothing, and a sending one sends none of its next steps. Stopping a cancelled campaign again leaves it unchanged. A campaign whose last step is already sending can only be stopped for some recipients. With recipientIds, the campaign keeps its status. Merged contacts are resolved, and ids that are not recipients of the campaign or have nothing left to send are listed in warnings. A campaign still processing its messages answers 409 with a Retry-After header. A campaign that is not launched, finished or failed answers 409: delete a draft or in_review campaign instead.This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\",\"url\":\"https://developer.folk.app/api-reference/campaigns/stop-a-campaign\",\"mainEntityOfPage\":{\"@id\":\"https://developer.folk.app/api-reference/campaigns/stop-a-campaign#webpage\"},\"dateModified\":\"2026-10-29T21:12:11.823Z\",\"publisher\":{\"@id\":\"https://developer.folk.app/#organization\"},\"isPartOf\":{\"@id\":\"https://developer.folk.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Folk Developer Portal\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Folk Developer Portal","nav":{"global":null,"tabs":[{"tab":"Welcome","pages":[{"title":"Welcome","href":""}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/quick-start"}]},{"tab":"API Reference","versions":[{"version":"2025-06-09","default":true,"groups":[{"group":"Introduction","pages":[{"title":null,"href":"/api-reference/overview"},{"title":null,"href":"/api-reference/authentication"},{"title":null,"href":"/api-reference/success-responses"},{"title":null,"href":"/api-reference/errors"},{"title":null,"href":"/api-reference/pagination"},{"title":null,"href":"/api-reference/filtering"},{"title":"Idempotency","href":"/api-reference/idempotency"},{"title":"Batch requests","href":"/api-reference/batch-requests"},{"title":null,"href":"/api-reference/rate-limits"},{"title":"Request ID","href":"/api-reference/request-id"},{"title":null,"href":"/api-reference/versioning"}]},{"group":"Available endpoints","pages":[{"group":"People","pages":[{"title":"List people","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/people","href":"/api-reference/people/list-people"},{"openapi":"post /v1/people","title":"Create a person","href":"/api-reference/people/create-a-person"},{"title":"Get a person","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/people/{personId}","href":"/api-reference/people/get-a-person"},{"openapi":"patch /v1/people/{personId}","title":"Update a person","href":"/api-reference/people/update-a-person"},{"openapi":"delete /v1/people/{personId}","title":"Delete a person","href":"/api-reference/people/delete-a-person"},{"openapi":"post /v1/people/batch/create","title":"Create people in batch","href":"/api-reference/people/create-people-in-batch"},{"openapi":"post /v1/people/batch/update","title":"Update people in batch","href":"/api-reference/people/update-people-in-batch"},{"openapi":"post /v1/people/batch/delete","title":"Delete people in batch","href":"/api-reference/people/delete-people-in-batch"}]},{"group":"Companies","pages":[{"title":"List companies","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/companies","href":"/api-reference/companies/list-companies"},{"openapi":"post /v1/companies","title":"Create a company","href":"/api-reference/companies/create-a-company"},{"title":"Get a company","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/companies/{companyId}","href":"/api-reference/companies/get-a-company"},{"openapi":"patch /v1/companies/{companyId}","title":"Update a company","href":"/api-reference/companies/update-a-company"},{"openapi":"delete /v1/companies/{companyId}","title":"Delete a company","href":"/api-reference/companies/delete-a-company"},{"openapi":"post /v1/companies/batch/create","title":"Create companies in batch","href":"/api-reference/companies/create-companies-in-batch"},{"openapi":"post /v1/companies/batch/update","title":"Update companies in batch","href":"/api-reference/companies/update-companies-in-batch"},{"openapi":"post /v1/companies/batch/delete","title":"Delete companies in batch","href":"/api-reference/companies/delete-companies-in-batch"}]},{"group":"Credits","pages":[{"title":"Get credits","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/credits","href":"/api-reference/credits/get-credits"}]},{"group":"Group members","pages":[{"title":"List group members","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/groups/{groupId}/members","href":"/api-reference/group-members/list-group-members"},{"title":"Add a group member","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json post /v1/groups/{groupId}/members","href":"/api-reference/group-members/add-a-group-member"},{"title":"Update a group member","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json patch /v1/groups/{groupId}/members/{userId}","href":"/api-reference/group-members/update-a-group-member"},{"title":"Remove a group member","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json delete /v1/groups/{groupId}/members/{userId}","href":"/api-reference/group-members/remove-a-group-member"}]},{"group":"Group custom fields","pages":[{"title":"List group custom fields","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/groups/{groupId}/custom-fields/{entityType}","href":"/api-reference/group-custom-fields/list-group-custom-fields"},{"title":"Create a group custom field","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json post /v1/groups/{groupId}/custom-fields/{entityType}","href":"/api-reference/group-custom-fields/create-a-group-custom-field"},{"title":"Get a group custom field","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/groups/{groupId}/custom-fields/{entityType}/{customFieldName}","href":"/api-reference/group-custom-fields/get-a-group-custom-field"},{"title":"Update a group custom field","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json patch /v1/groups/{groupId}/custom-fields/{entityType}/{customFieldName}","href":"/api-reference/group-custom-fields/update-a-group-custom-field"}]},{"group":"Custom objects","pages":[{"openapi":"get /v1/groups/{groupId}/{objectType}","title":"List objects","href":"/api-reference/custom-objects/list-objects"},{"openapi":"post /v1/groups/{groupId}/{objectType}","title":"Create an object","href":"/api-reference/custom-objects/create-an-object"},{"openapi":"get /v1/groups/{groupId}/{objectType}/{objectId}","title":"Get an object","href":"/api-reference/custom-objects/get-an-object"},{"openapi":"patch /v1/groups/{groupId}/{objectType}/{objectId}","title":"Update an object","href":"/api-reference/custom-objects/update-an-object"},{"openapi":"delete /v1/groups/{groupId}/{objectType}/{objectId}","title":"Delete an object","href":"/api-reference/custom-objects/delete-an-object"},{"openapi":"post /v1/groups/{groupId}/{objectType}/batch/create","title":"Create objects in batch","href":"/api-reference/custom-objects/create-objects-in-batch"},{"openapi":"post /v1/groups/{groupId}/{objectType}/batch/update","title":"Update objects in batch","href":"/api-reference/custom-objects/update-objects-in-batch"},{"openapi":"post /v1/groups/{groupId}/{objectType}/batch/delete","title":"Delete objects in batch","href":"/api-reference/custom-objects/delete-objects-in-batch"}]},{"group":"Groups","pages":[{"title":"List groups","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/groups","href":"/api-reference/groups/list-groups"},{"title":"Create a group","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json post /v1/groups","href":"/api-reference/groups/create-a-group"},{"title":"Update a group","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json patch /v1/groups/{groupId}","href":"/api-reference/groups/update-a-group"}]},{"group":"Users","pages":[{"title":"List users","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/users","href":"/api-reference/users/list-users"},{"title":"Get the current user","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/users/me","href":"/api-reference/users/get-the-current-user"},{"title":"Get a user","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/users/{userId}","href":"/api-reference/users/get-a-user"}]},{"group":"Notes","pages":[{"title":"List notes","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/notes","href":"/api-reference/notes/list-notes"},{"openapi":"post /v1/notes","title":"Create a note","href":"/api-reference/notes/create-a-note"},{"title":"Get a note","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/notes/{noteId}","href":"/api-reference/notes/get-a-note"},{"openapi":"patch /v1/notes/{noteId}","title":"Update a note","href":"/api-reference/notes/update-a-note"},{"title":"Delete a note","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json delete /v1/notes/{noteId}","href":"/api-reference/notes/delete-a-note"}]},{"group":"Reminders","pages":[{"title":"List reminders","deprecated":true,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/reminders","href":"/api-reference/reminders/list-reminders"},{"openapi":"post /v1/reminders","deprecated":true,"title":"Create a reminder","href":"/api-reference/reminders/create-a-reminder"},{"title":"Get a reminder","deprecated":true,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/reminders/{reminderId}","href":"/api-reference/reminders/get-a-reminder"},{"openapi":"patch /v1/reminders/{reminderId}","deprecated":true,"title":"Update a reminder","href":"/api-reference/reminders/update-a-reminder"},{"title":"Delete a reminder","deprecated":true,"version":null,"openapi":"/schemas/2025-06-09.json delete /v1/reminders/{reminderId}","href":"/api-reference/reminders/delete-a-reminder"}]},{"group":"Tasks","pages":[{"title":"List tasks","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/tasks","href":"/api-reference/tasks/list-tasks"},{"title":"Create a task","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json post /v1/tasks","href":"/api-reference/tasks/create-a-task"},{"title":"Get a task","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/tasks/{taskId}","href":"/api-reference/tasks/get-a-task"},{"openapi":"patch /v1/tasks/{taskId}","title":"Update a task","href":"/api-reference/tasks/update-a-task"},{"title":"Delete a task","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json delete /v1/tasks/{taskId}","href":"/api-reference/tasks/delete-a-task"},{"title":"Mark a task as done","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json post /v1/tasks/{taskId}/mark-as-done","href":"/api-reference/tasks/mark-a-task-as-done"},{"title":"Mark a task as to do","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json post /v1/tasks/{taskId}/mark-as-todo","href":"/api-reference/tasks/mark-a-task-as-to-do"}]},{"group":"Person enrichments","pages":[{"title":"List enrichments of people","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/person-enrichments","href":"/api-reference/person-enrichments/list-enrichments-of-people"},{"openapi":"post /v1/person-enrichments","title":"Enrich people","href":"/api-reference/person-enrichments/enrich-people"},{"title":"Get an enrichment of people","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json get /v1/person-enrichments/{enrichmentId}","href":"/api-reference/person-enrichments/get-an-enrichment-of-people"}]},{"group":"Interactions","pages":[{"title":"(Beta) List interactions","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"List interactions","openapi":"/schemas/2025-06-09.json get /v1/interactions","href":"/api-reference/interactions/list-interactions"},{"title":"Create an interaction","deprecated":null,"version":null,"openapi":"/schemas/2025-06-09.json post /v1/interactions","href":"/api-reference/interactions/create-an-interaction"},{"title":"(Beta) List past interactions","deprecated":true,"version":null,"tag":"Beta","sidebarTitle":"List past interactions","openapi":"/schemas/2025-06-09.json get /v1/interactions/past","href":"/api-reference/interactions/list-past-interactions"},{"title":"(Beta) List upcoming interactions","deprecated":true,"version":null,"tag":"Beta","sidebarTitle":"List upcoming interactions","openapi":"/schemas/2025-06-09.json get /v1/interactions/upcoming","href":"/api-reference/interactions/list-upcoming-interactions"},{"title":"(Beta) Get a past or upcoming interaction","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"Get a past or upcoming interaction","openapi":"/schemas/2025-06-09.json get /v1/interactions/{interactionId}","href":"/api-reference/interactions/get-a-past-or-upcoming-interaction"},{"title":"(Beta) Update an interaction","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"Update an interaction","openapi":"/schemas/2025-06-09.json patch /v1/interactions/{interactionId}","href":"/api-reference/interactions/update-an-interaction"},{"title":"(Beta) Delete an interaction","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"Delete an interaction","openapi":"/schemas/2025-06-09.json delete /v1/interactions/{interactionId}","href":"/api-reference/interactions/delete-an-interaction"}]},{"group":"Webhooks","pages":[{"openapi":"get /v1/webhooks","title":"List webhooks","href":"/api-reference/webhooks/list-webhooks"},{"openapi":"post /v1/webhooks","title":"Create a webhook","href":"/api-reference/webhooks/create-a-webhook"},{"openapi":"get /v1/webhooks/{webhookId}","title":"Get a webhook","href":"/api-reference/webhooks/get-a-webhook"},{"openapi":"patch /v1/webhooks/{webhookId}","title":"Update a webhook","href":"/api-reference/webhooks/update-a-webhook"},{"openapi":"delete /v1/webhooks/{webhookId}","title":"Delete a webhook","href":"/api-reference/webhooks/delete-a-webhook"}]},{"group":"Campaigns","pages":[{"title":"(Beta) List campaigns","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"List campaigns","openapi":"/schemas/2025-06-09.json get /v1/campaigns","href":"/api-reference/campaigns/list-campaigns"},{"title":"(Beta) Create a campaign","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"Create a campaign","openapi":"/schemas/2025-06-09.json post /v1/campaigns","href":"/api-reference/campaigns/create-a-campaign"},{"title":"(Beta) Get a campaign","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"Get a campaign","openapi":"/schemas/2025-06-09.json get /v1/campaigns/{campaignId}","href":"/api-reference/campaigns/get-a-campaign"},{"title":"(Beta) Update a campaign","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"Update a campaign","openapi":"/schemas/2025-06-09.json patch /v1/campaigns/{campaignId}","href":"/api-reference/campaigns/update-a-campaign"},{"title":"(Beta) Delete a campaign","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"Delete a campaign","openapi":"/schemas/2025-06-09.json delete /v1/campaigns/{campaignId}","href":"/api-reference/campaigns/delete-a-campaign"},{"title":"(Beta) List the messages of a campaign","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"List the messages of a campaign","openapi":"/schemas/2025-06-09.json get /v1/campaigns/{campaignId}/messages","href":"/api-reference/campaigns/list-the-messages-of-a-campaign"},{"title":"(Beta) Get a message of a campaign","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"Get a message of a campaign","openapi":"/schemas/2025-06-09.json get /v1/campaigns/{campaignId}/messages/{messageId}","href":"/api-reference/campaigns/get-a-message-of-a-campaign"},{"title":"(Beta) List the variables of a campaign","description":"Retrieve a paginated list of the `{{variables}}` a campaign's subjects and bodies can use: the fields of its people or companies, the text and numeric custom fields of its group, `{{unsubscribeLink}}` and `{{signature}}`. Write each `token` as given. A variable without a value for a recipient is removed from their message. `{{signature}}` inserts the sender's signature on a new step or message, as listed by `GET /v1/message-senders`: end a body with `\u003cp>{{signature}}\u003c/p>` to sign it, rather than writing the signature yourself.\u003cbr/>\u003cWarning>This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\u003c/Warning>","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"List the variables of a campaign","openapi":"/schemas/2025-06-09.json get /v1/campaigns/{campaignId}/variables","href":"/api-reference/campaigns/list-the-variables-of-a-campaign"},{"title":"(Beta) Stop a campaign","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"Stop a campaign","openapi":"/schemas/2025-06-09.json post /v1/campaigns/{campaignId}/stop","href":"/api-reference/campaigns/stop-a-campaign"},{"title":"(Beta) List message senders","description":"Retrieve a paginated list of the email addresses you can send campaigns from, last used first: those you own, those shared with the workspace, and every sender of the workspace for admins. Senders still waiting for verification are left out. Each sender comes with its `signature`, which is what `{{signature}}` inserts on a new step or message: end a body with `\u003cp>{{signature}}\u003c/p>` to sign it, rather than writing the signature yourself.\u003cbr/>\u003cWarning>This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\u003c/Warning>","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"List message senders","openapi":"/schemas/2025-06-09.json get /v1/message-senders","href":"/api-reference/campaigns/list-message-senders"}]}]}]}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/mcp/overview"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"Roadmap","pages":[{"title":"Roadmap","href":"/roadmap"}]}]},"title":"(Beta) Stop a campaign - Folk Developer Portal","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-26-lDe7V.js","utils-CWQmgYtH.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-4-Aw3rSD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C2zjXYA5.js","snippetPresets-DFmpFA7C.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-FJpQavWq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D_GvPF7k.js","shallow-Bs2ZB0NO.js","getApiPlaygroundDisplay-DCcqJJk-.js","CodeSnippet-DzDxawVe.js","CodeSnippets-aUr7fU-7.js","Page-CT9uE8Ip.js","getPastedJson-Y1fKsj_I.js","icon-DI4zTsDr.js","MethodPill-C0nDlmSQ.js","DuplicateIcon-NUXbx2nQ.js","createIcon-BdTHrPAi.js","DynamicMarkdown-CtpgKJwj.js","SectionHeading-B3x35tOt.js","axios-vUo_bRtp.js","Markdown-3OmurJMP.js","clsx-DMKzROTp.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-1ms6tsT-.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Ke9xIMFx.js"]}