{
"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) Create a campaign
Create a draft campaign: one or more steps (the first email, then its follow-ups), each a template with {{variables}} sent to every recipient. A draft opens in the app like one created there, to be reviewed and launched, or edited with PATCH /v1/campaigns/:campaignId.
Variables: For people: {{fullName}}, {{firstName}}, {{lastName}}, {{jobTitle}}, {{description}}, {{urls}}, {{companies.name}}, {{companies.urls}}. For companies: {{name}}, {{description}}, {{fundingRaised}}, {{lastFundingDate}}, {{foundationYear}}, {{industry}}, {{employeeRange}}. Array fields use their first value. A text or numeric custom field of the campaign’s group is {{customFieldValues.grp_<uuid>.<field name>}}. A variable without a value for a recipient is removed. Write \{{ for literal braces.
End a body with <p>{{signature}}</p> to sign it with the sender’s signature; a body without it is sent unsigned.
Recipients the request names but that you can’t access, and recipients without an email address, are listed in warnings. Only target: "draft" is supported for now.
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.
What to do once the campaign is created. draft stores it, to be finished in the app or edited with PATCH /v1/campaigns/:campaignId. review and launch are not supported yet.
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).
The sender of every step. Set either a root sender for every step, or a sender on every step, not both. Without any, every step is sent from the sender you last used.
{"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/create-a-campaign","slug":"/api-reference/campaigns/create-a-campaign","pageMetadata":{"title":"(Beta) Create a campaign","description":"Create a draft campaign: one or more steps (the first email, then its follow-ups), each a template with `{{variables}}` sent to every recipient. A draft opens in the app like one created there, to be reviewed and launched, or edited with `PATCH /v1/campaigns/:campaignId`.\n\nVariables: For people: `{{fullName}}`, `{{firstName}}`, `{{lastName}}`, `{{jobTitle}}`, `{{description}}`, `{{urls}}`, `{{companies.name}}`, `{{companies.urls}}`. For companies: `{{name}}`, `{{description}}`, `{{fundingRaised}}`, `{{lastFundingDate}}`, `{{foundationYear}}`, `{{industry}}`, `{{employeeRange}}`. Array fields use their first value. A text or numeric custom field of the campaign's group is `{{customFieldValues.grp_\u003cuuid>.\u003cfield name>}}`. A variable without a value for a recipient is removed. Write `\\{{` for literal braces.\n\nEnd a body with `\u003cp>{{signature}}\u003c/p>` to sign it with the sender's signature; a body without it is sent unsigned.\n\nRecipients the request names but that you can't access, and recipients without an email address, are listed in `warnings`. Only `target: \"draft\"` is supported for now.\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":"Create a campaign","openapi":"/schemas/2025-06-09.json post /v1/campaigns","href":"/api-reference/campaigns/create-a-campaign","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n }, {Warning} = _components;\n if (!Warning) _missingMdxReference(\"Warning\", true);\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Create a draft campaign: one or more steps (the first email, then its follow-ups), each a template with \", _jsx(_components.code, {\n children: \"{{variables}}\"\n }), \" sent to every recipient. A draft opens in the app like one created there, to be reviewed and launched, or edited with \", _jsx(_components.code, {\n children: \"PATCH /v1/campaigns/:campaignId\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Variables: For people: \", _jsx(_components.code, {\n children: \"{{fullName}}\"\n }), \", \", _jsx(_components.code, {\n children: \"{{firstName}}\"\n }), \", \", _jsx(_components.code, {\n children: \"{{lastName}}\"\n }), \", \", _jsx(_components.code, {\n children: \"{{jobTitle}}\"\n }), \", \", _jsx(_components.code, {\n children: \"{{description}}\"\n }), \", \", _jsx(_components.code, {\n children: \"{{urls}}\"\n }), \", \", _jsx(_components.code, {\n children: \"{{companies.name}}\"\n }), \", \", _jsx(_components.code, {\n children: \"{{companies.urls}}\"\n }), \". For companies: \", _jsx(_components.code, {\n children: \"{{name}}\"\n }), \", \", _jsx(_components.code, {\n children: \"{{description}}\"\n }), \", \", _jsx(_components.code, {\n children: \"{{fundingRaised}}\"\n }), \", \", _jsx(_components.code, {\n children: \"{{lastFundingDate}}\"\n }), \", \", _jsx(_components.code, {\n children: \"{{foundationYear}}\"\n }), \", \", _jsx(_components.code, {\n children: \"{{industry}}\"\n }), \", \", _jsx(_components.code, {\n children: \"{{employeeRange}}\"\n }), \". Array fields use their first value. A text or numeric custom field of the campaign’s group is \", _jsx(_components.code, {\n children: \"{{customFieldValues.grp_\u003cuuid>.\u003cfield name>}}\"\n }), \". A variable without a value for a recipient is removed. Write \", _jsx(_components.code, {\n children: \"\\\\{{\"\n }), \" for literal braces.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"End a body with \", _jsx(_components.code, {\n children: \"\u003cp>{{signature}}\u003c/p>\"\n }), \" to sign it with the sender’s signature; a body without it is sent unsigned.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Recipients the request names but that you can’t access, and recipients without an email address, are listed in \", _jsx(_components.code, {\n children: \"warnings\"\n }), \". Only \", _jsx(_components.code, {\n children: \"target: \\\"draft\\\"\"\n }), \" is supported for now.\", _jsx(\"br\", {}), _jsx(Warning, {\n children: \"This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\"\n })]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\nfunction _missingMdxReference(id, component) {\n throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\");\n}\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"(Beta) Create a campaign","description":"Create a draft campaign: one or more steps (the first email, then its follow-ups), each a template with `{{variables}}` sent to every recipient. A draft opens in the app like one created there, to be reviewed and launched, or edited with `PATCH /v1/campaigns/:campaignId`.\n\nVariables: For people: `{{fullName}}`, `{{firstName}}`, `{{lastName}}`, `{{jobTitle}}`, `{{description}}`, `{{urls}}`, `{{companies.name}}`, `{{companies.urls}}`. For companies: `{{name}}`, `{{description}}`, `{{fundingRaised}}`, `{{lastFundingDate}}`, `{{foundationYear}}`, `{{industry}}`, `{{employeeRange}}`. Array fields use their first value. A text or numeric custom field of the campaign's group is `{{customFieldValues.grp_\u003cuuid>.\u003cfield name>}}`. A variable without a value for a recipient is removed. Write `\\{{` for literal braces.\n\nEnd a body with `\u003cp>{{signature}}\u003c/p>` to sign it with the sender's signature; a body without it is sent unsigned.\n\nRecipients the request names but that you can't access, and recipients without an email address, are listed in `warnings`. Only `target: \"draft\"` is supported for now.\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":"Create a campaign","openapi":"/schemas/2025-06-09.json post /v1/campaigns","href":"/api-reference/campaigns/create-a-campaign","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/folk-cf968f5e/c239747596c4df94/intercom.js"],"openApiReferenceData":{"operation":{"security":["9c991c30-daf9-4d1e-b36b-2f15aa5a277d"],"x-mint":{"metadata":{"tag":"Beta","title":"(Beta) Create a campaign","sidebarTitle":"Create a campaign"}},"operationId":"createCampaign","summary":"Create a campaign","description":"Create a draft campaign: one or more steps (the first email, then its follow-ups), each a template with `{{variables}}` sent to every recipient. A draft opens in the app like one created there, to be reviewed and launched, or edited with `PATCH /v1/campaigns/:campaignId`.\n\nVariables: For people: `{{fullName}}`, `{{firstName}}`, `{{lastName}}`, `{{jobTitle}}`, `{{description}}`, `{{urls}}`, `{{companies.name}}`, `{{companies.urls}}`. For companies: `{{name}}`, `{{description}}`, `{{fundingRaised}}`, `{{lastFundingDate}}`, `{{foundationYear}}`, `{{industry}}`, `{{employeeRange}}`. Array fields use their first value. A text or numeric custom field of the campaign's group is `{{customFieldValues.grp_\u003cuuid>.\u003cfield name>}}`. A variable without a value for a recipient is removed. Write `\\{{` for literal braces.\n\nEnd a body with `\u003cp>{{signature}}\u003c/p>` to sign it with the sender's signature; a body without it is sent unsigned.\n\nRecipients the request names but that you can't access, and recipients without an email address, are listed in `warnings`. Only `target: \"draft\"` is supported for now.\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":["7edcdbd8-9cdc-4f6e-881d-6263323d648a"],"requestBody":"52f55469-f432-4fe2-a6ee-1e375aea0162","responses":{"201":"4bc65488-059b-4cad-886b-f465049b6fe9","400":"d818fcbc-cfc2-46f2-9f65-56eab140a8e4","401":"1dabf360-06e1-4e93-ac44-4335ce10b4d2","402":"25f71e73-1736-4216-8829-48b752c4329a","403":"d18c9340-ee0d-40a3-9488-f39b9222f59b","404":"1174f21e-8eab-47ea-9f01-6d61f6feccad","409":"8aacdfe2-73e6-467f-8953-72655fde9a25","422":"0444ffd3-3094-4b6a-8998-630e926bb040","429":"704d184a-c8b1-48a1-be6d-915e3cc3e14c","500":"53cdf37c-43c2-486e-abad-edd3902e4650","503":"9e4ede33-535b-4402-b4ca-15d292a6e6e8"},"method":"post","type":"path","servers":["9ff6af81-d226-4589-a8c5-5e6c925a5653"],"path":"/v1/campaigns","baseUrlOptions":["https://api.folk.app"],"title":"Create a campaign","codeSamples":[],"requestExampleLanguages":["bash","javascript","python","ruby","go","php"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"7edcdbd8-9cdc-4f6e-881d-6263323d648a":{"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":{"target":{"type":"string","enum":["draft","review","launch"],"description":"What to do once the campaign is created. `draft` stores it, to be finished in the app or edited with `PATCH /v1/campaigns/:campaignId`. `review` and `launch` are not supported yet.","example":"draft","isRequired":true,"uniqueKey":"target","typeLabel":"enum\u003cstring>"},"recipients":{"oneOf":[{"type":"object","description":"Who receives the campaign: a list of contacts, or the contacts of its group. Between 1 and 5,000 recipients, all people or all companies.","required":["type","ids"],"properties":{"type":{"type":"string","enum":["contacts"],"isRequired":true,"uniqueKey":"recipients.oneOf.0.type","typeLabel":"enum\u003cstring>"},"ids":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"recipients.oneOf.0.ids.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":5000,"description":"The people (`per_…`) or companies (`com_…`) to send to, all of the same type. Merged contacts resolve to the contact they were merged into. With `groupId`, they must belong to the group.","example":["per_55175e81-9a52-4ac3-930e-82792c23499b"],"isRequired":true,"uniqueKey":"recipients.oneOf.0.ids","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"recipients.oneOf.0","typeLabel":"object"},{"type":"object","description":"Who receives the campaign: a list of contacts, or the contacts of its group. Between 1 and 5,000 recipients, all people or all companies.","required":["type","entityType"],"properties":{"type":{"type":"string","enum":["group"],"isRequired":true,"uniqueKey":"recipients.oneOf.1.type","typeLabel":"enum\u003cstring>"},"entityType":{"type":"string","enum":["person","company"],"description":"Whether the recipients are people or companies.","example":"person","isRequired":true,"uniqueKey":"recipients.oneOf.1.entityType","typeLabel":"enum\u003cstring>"},"filter":{"type":"object","additionalProperties":{"type":"object","properties":{"empty":{"oneOf":[{}],"uniqueKey":"recipients.oneOf.1.filter.additionalProperties.empty","typeLabel":"any"},"not_empty":{"oneOf":[{}],"uniqueKey":"recipients.oneOf.1.filter.additionalProperties.not_empty","typeLabel":"any"},"eq":{"oneOf":[{}],"uniqueKey":"recipients.oneOf.1.filter.additionalProperties.eq","typeLabel":"any"},"not_eq":{"oneOf":[{}],"uniqueKey":"recipients.oneOf.1.filter.additionalProperties.not_eq","typeLabel":"any"},"like":{"oneOf":[{}],"uniqueKey":"recipients.oneOf.1.filter.additionalProperties.like","typeLabel":"any"},"not_like":{"oneOf":[{}],"uniqueKey":"recipients.oneOf.1.filter.additionalProperties.not_like","typeLabel":"any"},"gt":{"oneOf":[{}],"uniqueKey":"recipients.oneOf.1.filter.additionalProperties.gt","typeLabel":"any"},"lt":{"oneOf":[{}],"uniqueKey":"recipients.oneOf.1.filter.additionalProperties.lt","typeLabel":"any"},"all":{"oneOf":[{}],"uniqueKey":"recipients.oneOf.1.filter.additionalProperties.all","typeLabel":"any"},"in":{"oneOf":[{}],"uniqueKey":"recipients.oneOf.1.filter.additionalProperties.in","typeLabel":"any"},"not_in":{"oneOf":[{}],"uniqueKey":"recipients.oneOf.1.filter.additionalProperties.not_in","typeLabel":"any"}},"uniqueKey":"recipients.oneOf.1.filter.additionalProperties","typeLabel":"object"},"default":{},"description":"Only send to the contacts of the group matching this filter, written as for `GET /v1/people` and `GET /v1/companies`.","uniqueKey":"recipients.oneOf.1.filter","typeLabel":"object"},"combinator":{"type":"string","enum":["and","or"],"default":"and","description":"How the conditions of `filter` combine: `and` (default) or `or`.","uniqueKey":"recipients.oneOf.1.combinator","typeLabel":"enum\u003cstring>"},"search":{"type":"string","maxLength":1000,"description":"Only send to the contacts of the group matching this search.","example":"Acme","uniqueKey":"recipients.oneOf.1.search","typeLabel":"string"},"excludeIds":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"recipients.oneOf.1.excludeIds.items.[INDEX]","typeLabel":"string"},"maxItems":5000,"description":"Contacts of the group not to send to.","example":["per_55175e81-9a52-4ac3-930e-82792c23499b"],"uniqueKey":"recipients.oneOf.1.excludeIds","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"recipients.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"recipients","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).","isRequired":true,"uniqueKey":"steps","typeLabel":"object[]"},"groupId":{"type":"string","minLength":40,"maxLength":40,"description":"The group to create the campaign in. Its text and numeric custom fields can be used as variables. Leave it out to send to a list of contacts.","example":"grp_bc984b3f-0386-434d-82d7-a91eb6badd71","uniqueKey":"groupId","typeLabel":"string"},"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. Without any, every step is sent from the sender you last used.","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. Without any, every step is sent from the sender you last used.","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"},"stopOnReply":{"type":"boolean","description":"Whether the remaining steps stop for a recipient who replied. Defaults to true.","example":true,"uniqueKey":"stopOnReply","typeLabel":"boolean"},"scheduledAt":{"type":"string","maxLength":64,"format":"date-time","description":"When to send, with `launch`. Not supported yet.","uniqueKey":"scheduledAt","typeLabel":"string\u003cdate-time>"},"messages":{"type":"array","items":{"type":"object","properties":{"recipient":{"type":"object","properties":{"id":{"type":"string","maxLength":64,"isRequired":true,"uniqueKey":"messages.items.[INDEX].recipient.id","typeLabel":"string"}},"required":["id"],"description":"The person or company the message is for.","isRequired":true,"uniqueKey":"messages.items.[INDEX].recipient","typeLabel":"object"},"step":{"type":"integer","minimum":1,"maximum":100,"description":"The position of the step the message belongs to.","isRequired":true,"uniqueKey":"messages.items.[INDEX].step","typeLabel":"integer"},"body":{"type":"string","maxLength":200000,"isRequired":true,"uniqueKey":"messages.items.[INDEX].body","typeLabel":"string"},"subject":{"type":"string","maxLength":1000,"uniqueKey":"messages.items.[INDEX].subject","typeLabel":"string"},"bodyFormat":{"type":"string","enum":["html","text"],"uniqueKey":"messages.items.[INDEX].bodyFormat","typeLabel":"enum\u003cstring>"},"cc":{"type":"array","items":{"type":"string","maxLength":254,"uniqueKey":"messages.items.[INDEX].cc.items.[INDEX]","typeLabel":"string"},"maxItems":50,"description":"Email addresses copied on the message. At most 5 distinct addresses; duplicates are removed.","example":["jane.doe@example.com"],"uniqueKey":"messages.items.[INDEX].cc","typeLabel":"string[]"},"bcc":{"type":"array","items":{"type":"string","maxLength":254,"uniqueKey":"messages.items.[INDEX].bcc.items.[INDEX]","typeLabel":"string"},"maxItems":50,"description":"Email addresses blind-copied on the message. At most 5 distinct addresses; duplicates are removed.","example":["jane.doe@example.com"],"uniqueKey":"messages.items.[INDEX].bcc","typeLabel":"string[]"}},"required":["recipient","step","body"],"description":"The final content of one step for one recipient, without variables. Not supported yet.","uniqueKey":"messages.items.[INDEX]","typeLabel":"object"},"maxItems":10000,"description":"Personalized messages, with `review` and `launch`. Not supported yet.","uniqueKey":"messages","typeLabel":"object[]"}},"required":["target","recipients","steps"],"additionalProperties":false,"example":{"target":"draft","groupId":"grp_bc984b3f-0386-434d-82d7-a91eb6badd71","recipients":{"type":"contacts","ids":["per_55175e81-9a52-4ac3-930e-82792c23499b"]},"steps":[{"subject":"Quick question, {{firstName}}","body":"\u003cp>Hi {{firstName}},\u003c/p>\u003cp>{{signature}}\u003c/p>"},{"body":"\u003cp>Following up on my last email, {{firstName}}.\u003c/p>\u003cp>{{signature}}\u003c/p>","delayDays":3,"sameThread":true}]},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"target":"draft","groupId":"grp_bc984b3f-0386-434d-82d7-a91eb6badd71","recipients":{"type":"contacts","ids":["per_55175e81-9a52-4ac3-930e-82792c23499b"]},"steps":[{"subject":"Quick question, {{firstName}}","body":"\u003cp>Hi {{firstName}},\u003c/p>\u003cp>{{signature}}\u003c/p>"},{"body":"\u003cp>Following up on my last email, {{firstName}}.\u003c/p>\u003cp>{{signature}}\u003c/p>","delayDays":3,"sameThread":true}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"4bc65488-059b-4cad-886b-f465049b6fe9":{"description":"The campaign created, with its steps.","links":{"getCampaign":{"operationId":"getCampaign","parameters":{"campaignId":"$response.body#/data/id"},"description":"This campaign id can be used as an input to the `GET /v1/campaigns/:campaignId` operation to retrieve the campaign."},"updateCampaign":{"operationId":"updateCampaign","parameters":{"campaignId":"$response.body#/data/id"},"description":"The id returned by the `POST /v1/campaigns` operation can be used as an input to the `PATCH /v1/campaigns/:campaignId` operation to edit the draft."}},"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"},"d818fcbc-cfc2-46f2-9f65-56eab140a8e4":{"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"},"1dabf360-06e1-4e93-ac44-4335ce10b4d2":{"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"},"25f71e73-1736-4216-8829-48b752c4329a":{"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"},"d18c9340-ee0d-40a3-9488-f39b9222f59b":{"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"},"1174f21e-8eab-47ea-9f01-6d61f6feccad":{"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"},"8aacdfe2-73e6-467f-8953-72655fde9a25":{"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"},"0444ffd3-3094-4b6a-8998-630e926bb040":{"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"},"704d184a-c8b1-48a1-be6d-915e3cc3e14c":{"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"},"53cdf37c-43c2-486e-abad-edd3902e4650":{"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"},"9e4ede33-535b-4402-b4ca-15d292a6e6e8":{"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":{"9c991c30-daf9-4d1e-b36b-2f15aa5a277d":{"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) Create a campaign - Folk Developer Portal","navMaps":{"firstHrefInVersion":{"2025-06-09":{"href":"/api-reference/campaigns/create-a-campaign","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T10:19:49.332Z","originalFileLocation":"api-reference/campaigns/create-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=\"Create a draft campaign: one or more steps (the first email, then its follow-ups), each a template with {{variables}} sent to every recipient. A draft opens in the app like one created there, to be reviewed and launched, or edited with PATCH /v1/campaigns/:campaignId. Variables: For people: {{fullName}}, {{firstName}}, {{lastName}}, {{jobTitle}}, {{description}}, {{urls}}, {{companies.name}}, {{companies.urls}}. For companies: {{name}}, {{description}}, {{fundingRaised}}, {{lastFundingDate}}, {{foundationYear}}, {{industry}}, {{employeeRange}}. Array fields use their first value. A text or numeric custom field of the campaign\u0026#x27;s group is {{customFieldValues.grp_.}}. A variable without a value for a recipient is removed. Write \\{{ for literal braces. End a body with {{signature}} to sign it with the sender\u0026#x27;s signature; a body without it is sent unsigned. Recipients the request names but that you can\u0026#x27;t access, and recipients without an email address, are listed in warnings. Only target: \u0026quot;draft\u0026quot; is supported for now.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) Create a campaign - Folk Developer Portal\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create a draft campaign: one or more steps (the first email, then its follow-ups), each a template with {{variables}} sent to every recipient. A draft opens in the app like one created there, to be reviewed and launched, or edited with PATCH /v1/campaigns/:campaignId. Variables: For people: {{fullName}}, {{firstName}}, {{lastName}}, {{jobTitle}}, {{description}}, {{urls}}, {{companies.name}}, {{companies.urls}}. For companies: {{name}}, {{description}}, {{fundingRaised}}, {{lastFundingDate}}, {{foundationYear}}, {{industry}}, {{employeeRange}}. Array fields use their first value. A text or numeric custom field of the campaign\u0026#x27;s group is {{customFieldValues.grp_.}}. A variable without a value for a recipient is removed. Write \\{{ for literal braces. End a body with {{signature}} to sign it with the sender\u0026#x27;s signature; a body without it is sent unsigned. Recipients the request names but that you can\u0026#x27;t access, and recipients without an email address, are listed in warnings. Only target: \u0026quot;draft\u0026quot; is supported for now.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/create-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+Create+a+campaign\u0026amp;description=Create+a+draft+campaign%3A+one+or+more+steps+%28the+first+email%2C+then+its+follow-ups%29%2C+each+a+template+with+%60%7B%7Bvariables%7D%7D%60+sent+to+every+recipient.+A+draft+opens+i\u0026amp;theme=85df8d899a1a67ad96f0c424\u0026amp;signature=1c81a90f166e16bd873aec5e8bfb4b306c21cb59736c15c6642f2f51a18696d3\">\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) Create a campaign - Folk Developer Portal\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create a draft campaign: one or more steps (the first email, then its follow-ups), each a template with {{variables}} sent to every recipient. A draft opens in the app like one created there, to be reviewed and launched, or edited with PATCH /v1/campaigns/:campaignId. Variables: For people: {{fullName}}, {{firstName}}, {{lastName}}, {{jobTitle}}, {{description}}, {{urls}}, {{companies.name}}, {{companies.urls}}. For companies: {{name}}, {{description}}, {{fundingRaised}}, {{lastFundingDate}}, {{foundationYear}}, {{industry}}, {{employeeRange}}. Array fields use their first value. A text or numeric custom field of the campaign\u0026#x27;s group is {{customFieldValues.grp_.}}. A variable without a value for a recipient is removed. Write \\{{ for literal braces. End a body with {{signature}} to sign it with the sender\u0026#x27;s signature; a body without it is sent unsigned. Recipients the request names but that you can\u0026#x27;t access, and recipients without an email address, are listed in warnings. Only target: \u0026quot;draft\u0026quot; is supported for now.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+Create+a+campaign\u0026amp;description=Create+a+draft+campaign%3A+one+or+more+steps+%28the+first+email%2C+then+its+follow-ups%29%2C+each+a+template+with+%60%7B%7Bvariables%7D%7D%60+sent+to+every+recipient.+A+draft+opens+i\u0026amp;theme=85df8d899a1a67ad96f0c424\u0026amp;signature=1c81a90f166e16bd873aec5e8bfb4b306c21cb59736c15c6642f2f51a18696d3\">\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/create-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/create-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/create-a-campaign#webpage\",\"url\":\"https://developer.folk.app/api-reference/campaigns/create-a-campaign\",\"name\":\"(Beta) Create a campaign\",\"description\":\"Create a draft campaign: one or more steps (the first email, then its follow-ups), each a template with {{variables}} sent to every recipient. A draft opens in the app like one created there, to be reviewed and launched, or edited with PATCH /v1/campaigns/:campaignId. Variables: For people: {{fullName}}, {{firstName}}, {{lastName}}, {{jobTitle}}, {{description}}, {{urls}}, {{companies.name}}, {{companies.urls}}. For companies: {{name}}, {{description}}, {{fundingRaised}}, {{lastFundingDate}}, {{foundationYear}}, {{industry}}, {{employeeRange}}. Array fields use their first value. A text or numeric custom field of the campaign's group is {{customFieldValues.grp_.}}. A variable without a value for a recipient is removed. Write \\\\{{ for literal braces. End a body with {{signature}} to sign it with the sender's signature; a body without it is sent unsigned. Recipients the request names but that you can't access, and recipients without an email address, are listed in warnings. Only target: \\\"draft\\\" is supported for now.This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\",\"dateModified\":\"2026-10-29T10:19:49.332Z\",\"isPartOf\":{\"@id\":\"https://developer.folk.app#website\"},\"breadcrumb\":{\"@id\":\"https://developer.folk.app/api-reference/campaigns/create-a-campaign#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developer.folk.app/api-reference/campaigns/create-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) Create a campaign\",\"item\":\"https://developer.folk.app/api-reference/campaigns/create-a-campaign\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developer.folk.app/api-reference/campaigns/create-a-campaign#apireference\",\"headline\":\"(Beta) Create a campaign\",\"name\":\"(Beta) Create a campaign\",\"description\":\"Create a draft campaign: one or more steps (the first email, then its follow-ups), each a template with {{variables}} sent to every recipient. A draft opens in the app like one created there, to be reviewed and launched, or edited with PATCH /v1/campaigns/:campaignId. Variables: For people: {{fullName}}, {{firstName}}, {{lastName}}, {{jobTitle}}, {{description}}, {{urls}}, {{companies.name}}, {{companies.urls}}. For companies: {{name}}, {{description}}, {{fundingRaised}}, {{lastFundingDate}}, {{foundationYear}}, {{industry}}, {{employeeRange}}. Array fields use their first value. A text or numeric custom field of the campaign's group is {{customFieldValues.grp_.}}. A variable without a value for a recipient is removed. Write \\\\{{ for literal braces. End a body with {{signature}} to sign it with the sender's signature; a body without it is sent unsigned. Recipients the request names but that you can't access, and recipients without an email address, are listed in warnings. Only target: \\\"draft\\\" is supported for now.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/create-a-campaign\",\"mainEntityOfPage\":{\"@id\":\"https://developer.folk.app/api-reference/campaigns/create-a-campaign#webpage\"},\"dateModified\":\"2026-10-29T10:19:49.332Z\",\"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","description":"Retrieve a paginated list of the campaigns you can access, newest first: those of your groups, and those created from a selection of contacts.\u003cbr/>\u003cWarning>This endpoint is currently in open beta. The API surface may change as we iterate based on feedback.\u003c/Warning>","deprecated":null,"version":null,"tag":"Beta","sidebarTitle":"List 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","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) Create 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"]}