{
"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) Update a campaign
Edit a draft campaign: its sender, its steps or whether it stops on reply. steps replaces every step, so send them all, as read from GET /v1/campaigns/:campaignId. Recipients and whether they are people or companies can’t change.
This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.
{
"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.
The sender of every step. Set either a root sender for every step, or a sender on every step, not both. A step whose sender changes gets the new sender's signature, or none when they have none.
The steps of the campaign: the first email, then its follow-ups. More than one step needs sequences on your plan, and a sender that supports them (not Gmail). They replace the current steps: steps match by position, extra steps are added and missing ones removed. A body ending with {{signature}} keeps the step's signature as stored, edited or not.
{"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":"6adf97e943e9400227447b11","collectionId":"c83d8b32-0b82-4286-a0a3-b474a1178bd0","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adf97e943e9400227447b11"},"entitlements":{},"buildId":"6ae31dbecf19676b2b588155","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"API Reference","count":82},{"language":"default","tag":"Available endpoints","count":71},{"language":"default","tag":"Guides","count":15},{"language":"default","tag":"Introduction","count":11},{"language":"default","tag":"Webhooks","count":9},{"language":"default","tag":"Companies","count":8},{"language":"default","tag":"Custom objects","count":8},{"language":"default","tag":"People","count":8},{"language":"default","tag":"Core concepts","count":8},{"language":"default","tag":"Tasks","count":7}]},"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":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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/update-a-campaign","slug":"/api-reference/campaigns/update-a-campaign","pageMetadata":{"title":"(Beta) Update a campaign","description":"Edit a draft campaign: its sender, its steps or whether it stops on reply. `steps` replaces every step, so send them all, as read from `GET /v1/campaigns/:campaignId`. Recipients and whether they are people or companies can't change.\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":"Update a campaign","openapi":"/schemas/2025-06-09.json patch /v1/campaigns/{campaignId}","href":"/api-reference/campaigns/update-a-campaign","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {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(_components.p, {\n children: [\"Edit a draft campaign: its sender, its steps or whether it stops on reply. \", _jsx(_components.code, {\n children: \"steps\"\n }), \" replaces every step, so send them all, as read from \", _jsx(_components.code, {\n children: \"GET /v1/campaigns/:campaignId\"\n }), \". Recipients and whether they are people or companies can’t change.\", _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}\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) Update a campaign","description":"Edit a draft campaign: its sender, its steps or whether it stops on reply. `steps` replaces every step, so send them all, as read from `GET /v1/campaigns/:campaignId`. Recipients and whether they are people or companies can't change.\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":"Update a campaign","openapi":"/schemas/2025-06-09.json patch /v1/campaigns/{campaignId}","href":"/api-reference/campaigns/update-a-campaign","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/folk-cf968f5e/c239747596c4df94/intercom.js"],"openApiReferenceData":{"operation":{"security":["b776966a-7ffe-4f17-b11a-9a4c2390e4ed"],"x-mint":{"metadata":{"tag":"Beta","title":"(Beta) Update a campaign","sidebarTitle":"Update a campaign"}},"operationId":"updateCampaign","summary":"Update a campaign","description":"Edit a draft campaign: its sender, its steps or whether it stops on reply. `steps` replaces every step, so send them all, as read from `GET /v1/campaigns/:campaignId`. Recipients and whether they are people or companies can't change.\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":["c7ab8b90-cba3-4de7-9cca-d165790436a9","330fee1b-3357-407a-80ca-245827201647"],"requestBody":"7608c9f1-bee9-4f92-a6da-ca243e3d454c","responses":{"200":"77a9ac1e-feca-400d-be3f-34319e17e6d7","400":"cdf63b1e-4dc0-4730-b7e6-c6d2ab1ba439","401":"d0ca05ca-2c7d-43a2-a779-dbca5e71927d","402":"907f3af3-d167-4280-820a-4dcbc62a4a7d","403":"9cac8917-12e1-4d0e-912b-92f7d4488aba","404":"e10315d4-3130-4a25-a7c7-1d78fe869b75","409":"733591d4-b08a-40bf-9f36-cb42627b836c","422":"693fab56-3296-4170-8ed4-7fa42ccdca35","429":"a2e5d599-27bd-49ac-bb67-38acc12f30c0","500":"f9df3e25-291e-4f21-812c-071fc8b29593","503":"72e356be-b75a-4ea7-a17e-0f107cbad79c"},"method":"patch","type":"path","servers":["9ff6af81-d226-4589-a8c5-5e6c925a5653"],"path":"/v1/campaigns/{campaignId}","baseUrlOptions":["https://api.folk.app"],"title":"Update a campaign","codeSamples":[],"requestExampleLanguages":["bash","javascript","python","ruby","go","php"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"c7ab8b90-cba3-4de7-9cca-d165790436a9":{"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"},"330fee1b-3357-407a-80ca-245827201647":{"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":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sender":{"oneOf":[{"type":"object","description":"The sender of every step. Set either a root `sender` for every step, or a `sender` on every step, not both. A step whose sender changes gets the new sender's signature, or none when they have none.","required":["id"],"example":{"email":"john.doe@example.com"},"properties":{"id":{"type":"string","minLength":40,"maxLength":40,"isRequired":true,"uniqueKey":"sender.oneOf.0.id","typeLabel":"string"},"email":{"type":"string","maxLength":254,"uniqueKey":"sender.oneOf.0.email","typeLabel":"string"},"displayName":{"oneOf":[{"type":"string","maxLength":255,"uniqueKey":"sender.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"uniqueKey":"sender.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"sender.oneOf.0.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"sender.oneOf.0","typeLabel":"object"},{"type":"object","description":"The sender of every step. Set either a root `sender` for every step, or a `sender` on every step, not both. A step whose sender changes gets the new sender's signature, or none when they have none.","required":["email"],"example":{"email":"john.doe@example.com"},"properties":{"email":{"type":"string","maxLength":254,"format":"email","isRequired":true,"uniqueKey":"sender.oneOf.1.email","typeLabel":"string\u003cemail>"},"id":{"type":"null","uniqueKey":"sender.oneOf.1.id","typeLabel":"null"},"displayName":{"oneOf":[{"type":"string","maxLength":255,"uniqueKey":"sender.oneOf.1.displayName.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"uniqueKey":"sender.oneOf.1.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"sender.oneOf.1.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"sender.oneOf.1","typeLabel":"object"}],"uniqueKey":"sender","typeLabel":"object"},"steps":{"type":"array","items":{"type":"object","properties":{"sender":{"oneOf":[{"type":"object","description":"The sender of this step. Set either a root `sender` for every step, or a `sender` on every step, not both.","required":["id"],"example":{"email":"john.doe@example.com"},"properties":{"id":{"type":"string","minLength":40,"maxLength":40,"isRequired":true,"uniqueKey":"steps.items.[INDEX].sender.oneOf.0.id","typeLabel":"string"},"email":{"type":"string","maxLength":254,"uniqueKey":"steps.items.[INDEX].sender.oneOf.0.email","typeLabel":"string"},"displayName":{"oneOf":[{"type":"string","maxLength":255,"uniqueKey":"steps.items.[INDEX].sender.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"uniqueKey":"steps.items.[INDEX].sender.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"steps.items.[INDEX].sender.oneOf.0.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].sender.oneOf.0","typeLabel":"object"},{"type":"object","description":"The sender of this step. Set either a root `sender` for every step, or a `sender` on every step, not both.","required":["email"],"example":{"email":"john.doe@example.com"},"properties":{"email":{"type":"string","maxLength":254,"format":"email","isRequired":true,"uniqueKey":"steps.items.[INDEX].sender.oneOf.1.email","typeLabel":"string\u003cemail>"},"id":{"type":"null","uniqueKey":"steps.items.[INDEX].sender.oneOf.1.id","typeLabel":"null"},"displayName":{"oneOf":[{"type":"string","maxLength":255,"uniqueKey":"steps.items.[INDEX].sender.oneOf.1.displayName.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":255,"uniqueKey":"steps.items.[INDEX].sender.oneOf.1.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"steps.items.[INDEX].sender.oneOf.1.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].sender.oneOf.1","typeLabel":"object"}],"uniqueKey":"steps.items.[INDEX].sender","typeLabel":"object"},"subject":{"type":"string","maxLength":1000,"description":"The subject template, in plain text with `{{variables}}`. A follow-up sent in the same thread has no subject of its own.","example":"Quick question, {{firstName}}","uniqueKey":"steps.items.[INDEX].subject","typeLabel":"string"},"body":{"type":"string","maxLength":200000,"description":"The body template, in HTML (or plain text with `bodyFormat: \"text\"`), with `{{variables}}`. End it with `\u003cp>{{signature}}\u003c/p>` to sign it with the sender's signature, and don't write the signature yourself: a body without `{{signature}}` is sent unsigned. An unsubscribe link, for SendGrid senders only, is `\u003ca href=\"{{unsubscribeLink}}\">`. HTML outside the email editor's format (styles, tables, unknown tags) is simplified, with warnings.","example":"\u003cp>Hi {{firstName}},\u003c/p>\u003cp>{{signature}}\u003c/p>","uniqueKey":"steps.items.[INDEX].body","typeLabel":"string"},"bodyFormat":{"type":"string","enum":["html","text"],"description":"How `body` is written. `html` (default) is read as HTML. `text` is plain text: a blank line starts a new paragraph, each further blank line adds an empty paragraph, a single newline is a line break, and `\u003c` and `\u0026` are literal characters. Bodies always read back as HTML.","example":"html","uniqueKey":"steps.items.[INDEX].bodyFormat","typeLabel":"enum\u003cstring>"},"cc":{"type":"array","items":{"type":"string","maxLength":254,"uniqueKey":"steps.items.[INDEX].cc.items.[INDEX]","typeLabel":"string"},"maxItems":50,"description":"Email addresses copied on every message. At most 5 distinct addresses; duplicates are removed.","example":["jane.doe@example.com"],"uniqueKey":"steps.items.[INDEX].cc","typeLabel":"string[]"},"bcc":{"type":"array","items":{"type":"string","maxLength":254,"uniqueKey":"steps.items.[INDEX].bcc.items.[INDEX]","typeLabel":"string"},"maxItems":50,"description":"Email addresses blind-copied on every message. At most 5 distinct addresses; duplicates are removed.","example":["jane.doe@example.com"],"uniqueKey":"steps.items.[INDEX].bcc","typeLabel":"string[]"},"delayDays":{"type":"integer","minimum":0,"maximum":365,"description":"Follow-ups only: days to wait after the previous step, from 1 to 365. Defaults to 1. The first step only takes 0, as read.","example":3,"uniqueKey":"steps.items.[INDEX].delayDays","typeLabel":"integer"},"sameThread":{"type":"boolean","description":"Follow-ups only: send the step as a reply in the first step's thread, with its subject. Defaults to false.","example":false,"uniqueKey":"steps.items.[INDEX].sameThread","typeLabel":"boolean"},"position":{"description":"Read-only: ignored.","uniqueKey":"steps.items.[INDEX].position","typeLabel":"any"},"status":{"description":"Read-only: ignored.","uniqueKey":"steps.items.[INDEX].status","typeLabel":"any"},"messageCount":{"description":"Read-only: ignored.","uniqueKey":"steps.items.[INDEX].messageCount","typeLabel":"any"},"sentCount":{"description":"Read-only: ignored.","uniqueKey":"steps.items.[INDEX].sentCount","typeLabel":"any"},"notSentCount":{"description":"Read-only: ignored.","uniqueKey":"steps.items.[INDEX].notSentCount","typeLabel":"any"}},"additionalProperties":false,"description":"A step of the campaign: the email template sent to every recipient, with the `{{variables}}` filled in for each of them.","uniqueKey":"steps.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":100,"description":"The steps of the campaign: the first email, then its follow-ups. More than one step needs sequences on your plan, and a sender that supports them (not Gmail). They replace the current steps: steps match by position, extra steps are added and missing ones removed. A body ending with `{{signature}}` keeps the step's signature as stored, edited or not.","uniqueKey":"steps","typeLabel":"object[]"},"stopOnReply":{"type":"boolean","description":"Whether the remaining steps stop for a recipient who replied.","example":true,"uniqueKey":"stopOnReply","typeLabel":"boolean"}},"additionalProperties":false,"example":{"steps":[{"subject":"Quick question, {{firstName}}","body":"\u003cp>Hi {{firstName}},\u003c/p>\u003cp>{{signature}}\u003c/p>"}]},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"steps":[{"subject":"Quick question, {{firstName}}","body":"\u003cp>Hi {{firstName}},\u003c/p>\u003cp>{{signature}}\u003c/p>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"77a9ac1e-feca-400d-be3f-34319e17e6d7":{"description":"The campaign, with its steps.","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"},"cdf63b1e-4dc0-4730-b7e6-c6d2ab1ba439":{"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"},"d0ca05ca-2c7d-43a2-a779-dbca5e71927d":{"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"},"907f3af3-d167-4280-820a-4dcbc62a4a7d":{"description":"The workspace doesn’t have enough credits 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":"INSUFFICIENT_CREDITS","message":"Not enough enrichment credits: 12 needed, 5 left.","documentationUrl":"https://developer.folk.app/api-reference/errors#payment-required","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"INSUFFICIENT_CREDITS","message":"Not enough enrichment credits: 12 needed, 5 left.","documentationUrl":"https://developer.folk.app/api-reference/errors#payment-required","requestId":"123e4567-e89b-12d3-a456-426614174000","timestamp":"2025-10-01T12:00:00Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"9cac8917-12e1-4d0e-912b-92f7d4488aba":{"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"},"e10315d4-3130-4a25-a7c7-1d78fe869b75":{"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"},"733591d4-b08a-40bf-9f36-cb42627b836c":{"description":"A request with the same `Idempotency-Key` is still being processed.","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":"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"},"693fab56-3296-4170-8ed4-7fa42ccdca35":{"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"},"a2e5d599-27bd-49ac-bb67-38acc12f30c0":{"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"},"f9df3e25-291e-4f21-812c-071fc8b29593":{"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"},"72e356be-b75a-4ea7-a17e-0f107cbad79c":{"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":{"b776966a-7ffe-4f17-b11a-9a4c2390e4ed":{"bearerApiKeyAuth":{"type":"http","scheme":"bearer","description":"API key for authentication","scopes":[],"schemeName":"bearerApiKeyAuth"}}},"servers":{"9ff6af81-d226-4589-a8c5-5e6c925a5653":{"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) Update a campaign - Folk Developer Portal","navMaps":{"firstHrefInVersion":{"2025-06-09":{"href":"/api-reference/campaigns/update-a-campaign","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T10:19:49.360Z","originalFileLocation":"api-reference/campaigns/update-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=\"Edit a draft campaign: its sender, its steps or whether it stops on reply. steps replaces every step, so send them all, as read from GET /v1/campaigns/:campaignId. Recipients and whether they are people or companies can\u0026#x27;t change.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) Update a campaign - Folk Developer Portal\">\u003cmeta data-mint-head property=\"og:description\" content=\"Edit a draft campaign: its sender, its steps or whether it stops on reply. steps replaces every step, so send them all, as read from GET /v1/campaigns/:campaignId. Recipients and whether they are people or companies can\u0026#x27;t change.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/update-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+Update+a+campaign\u0026amp;description=Edit+a+draft+campaign%3A+its+sender%2C+its+steps+or+whether+it+stops+on+reply.+%60steps%60+replaces+every+step%2C+so+send+them+all%2C+as+read+from+%60GET+%2Fv1%2Fcampaigns%2F%3Acampa\u0026amp;theme=85df8d899a1a67ad96f0c424\u0026amp;signature=8b2778668d812ab356269de0ce3332be48b43f6f9cc9f6ab613e7c4dfe9de999\">\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) Update a campaign - Folk Developer Portal\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Edit a draft campaign: its sender, its steps or whether it stops on reply. steps replaces every step, so send them all, as read from GET /v1/campaigns/:campaignId. Recipients and whether they are people or companies can\u0026#x27;t change.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+Update+a+campaign\u0026amp;description=Edit+a+draft+campaign%3A+its+sender%2C+its+steps+or+whether+it+stops+on+reply.+%60steps%60+replaces+every+step%2C+so+send+them+all%2C+as+read+from+%60GET+%2Fv1%2Fcampaigns%2F%3Acampa\u0026amp;theme=85df8d899a1a67ad96f0c424\u0026amp;signature=8b2778668d812ab356269de0ce3332be48b43f6f9cc9f6ab613e7c4dfe9de999\">\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/update-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/update-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/update-a-campaign#webpage\",\"url\":\"https://developer.folk.app/api-reference/campaigns/update-a-campaign\",\"name\":\"(Beta) Update a campaign\",\"description\":\"Edit a draft campaign: its sender, its steps or whether it stops on reply. steps replaces every step, so send them all, as read from GET /v1/campaigns/:campaignId. Recipients and whether they are people or companies can't change.This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\",\"dateModified\":\"2026-10-29T10:19:49.360Z\",\"isPartOf\":{\"@id\":\"https://developer.folk.app#website\"},\"breadcrumb\":{\"@id\":\"https://developer.folk.app/api-reference/campaigns/update-a-campaign#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developer.folk.app/api-reference/campaigns/update-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) Update a campaign\",\"item\":\"https://developer.folk.app/api-reference/campaigns/update-a-campaign\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developer.folk.app/api-reference/campaigns/update-a-campaign#apireference\",\"headline\":\"(Beta) Update a campaign\",\"name\":\"(Beta) Update a campaign\",\"description\":\"Edit a draft campaign: its sender, its steps or whether it stops on reply. steps replaces every step, so send them all, as read from GET /v1/campaigns/:campaignId. Recipients and whether they are people or companies can't change.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/update-a-campaign\",\"mainEntityOfPage\":{\"@id\":\"https://developer.folk.app/api-reference/campaigns/update-a-campaign#webpage\"},\"dateModified\":\"2026-10-29T10:19:49.360Z\",\"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","description":"Retrieve a campaign with its steps. Subjects are plain text and bodies are HTML, both with `{{variables}}`; a signed body ends with `\u003cp>{{signature}}\u003c/p>`.\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":"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","description":"Delete a campaign that is a draft or in review, with its messages. Other campaigns can't be deleted: stop a scheduled or sending 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":"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","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) List message senders","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) Update a campaign - Folk Developer Portal","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DmVyH30O.js","utils-BHQqGGOd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CD-E4BIt.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp5Lq9Ds.js","snippetPresets-C4xAVCFP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CgXVLxUC.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BF8I5oUf.js","shallow-Byd0lWnC.js","getApiPlaygroundDisplay-BGOZG1OK.js","CodeSnippet-CpvQL0CY.js","CodeSnippets-B8wkBKXa.js","Page-CBCH2P7b.js","getPastedJson-Ry3scI3Y.js","icon-D7a9HcdD.js","MethodPill-CJ8pmHhz.js","DuplicateIcon-rh1HJF0t.js","createIcon-DvGznqYs.js","DynamicMarkdown-Cc6AuSHS.js","SectionHeading-B4A0S-ep.js","axios-vUo_bRtp.js","Markdown-Cc16CX65.js","clsx-Cs6nMGht.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-zbf22OZA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C_fs-y5n.js"]}