Creates a new stage or updates an existing stage in a pipeline,
depending on the request body: when stageId is present the existing
stage is updated (200); when stageId is omitted a new stage is
created (201).
Ordering rules:
Stages have a 1-based order determining their position in the
pipeline.
When creating a stage without an order, it is placed immediately
before the HIRED stage.
When an order is supplied (on create or update), the other stages’
orders are adjusted automatically to maintain sequential ordering.
The SOURCED stage’s order is locked and cannot be changed.
System stages (SOURCED, APPLIED, HIRED) cannot have their type
changed — only their name can be updated (send stageId and name
only).
Company-scoped API key. Production keys are prefixed sk_live_,
sandbox keys sk_test_, each followed by 22 base62 characters
(pattern ^sk_(live|test)_[0-9A-Za-z]{22}$). Generate keys in the
TapTalent dashboard under Account Settings → Developers → API Key
Management; a key is shown once at generation and old keys are
invalidated immediately on regeneration.
Body
application/json
Create-or-update request for a pipeline stage. When stageId is
present the existing stage is updated; when it is omitted a new stage
is created.
Stage name. The documentation's field table marks this field as
required, but per its field description it is required when
creating a stage (no stageId) and optional when updating an
existing stage.
Stage type. The documentation's field table marks this field as
required, but per its field description it is required when
creating a stage (no stageId) and optional when updating an
existing stage. Only the five custom types listed here are valid in
requests; system stages (SOURCED, APPLIED, HIRED) cannot have
their type changed (omit type and send only stageId and name
to rename them). An unrecognized value is rejected with
INVALID_REQUEST ("Stage type is not valid").
Desired 1-based order position. If not provided, new stages are
placed immediately before the HIRED stage. When updating, other
stages' orders are adjusted automatically to maintain sequential
ordering. The SOURCED stage's order is locked and cannot be
changed. The documented field table specifies no maximum, but the
documented validation error reads "Order must be between 1 and 5",
indicating an upper bound (tied to the pipeline's stage count) is
enforced in practice; no maximum is imposed here.
Required range: x >= 1
Example:
3
Response
Stage updated (request contained a stageId). The submitted
order is not echoed in the response body.
Success envelope for stage create (201) and stage update (200) — both
return the same body shape. The stage's order is not echoed.
A stage within a hiring pipeline. System stages (SOURCED, APPLIED,
HIRED) are created automatically with every pipeline, cannot be
deleted, and cannot have their type changed — only their name is
editable; additionally the SOURCED stage's order is locked. Custom
stages can be created, updated, and deleted. Stages have a 1-based
order determining their position in the pipeline, but the order value
itself is not echoed in any documented response — stages are returned
in pipeline order.
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/schema.json","name":"Taptalent Partner API","colors":{"primary":"#6e58ff","light":"#6e58ff","dark":"#ab9ffc"},"logo":{"light":"https://mintcdn.com/taptalent/lKy84_BssSCy2hcz/images/TTLogo(1).png?fit=max\u0026auto=format\u0026n=lKy84_BssSCy2hcz\u0026q=85\u0026s=ac7c949427cc2893306f6036415f087e","dark":"https://mintcdn.com/taptalent/lKy84_BssSCy2hcz/images/TTLogo(1).png?fit=max\u0026auto=format\u0026n=lKy84_BssSCy2hcz\u0026q=85\u0026s=ac7c949427cc2893306f6036415f087e","href":"https://taptalent.ai"},"favicon":"https://mintcdn.com/taptalent/lKy84_BssSCy2hcz/images/TTLogo(1).png?fit=max\u0026auto=format\u0026n=lKy84_BssSCy2hcz\u0026q=85\u0026s=ac7c949427cc2893306f6036415f087e","background":{"decoration":"gradient"},"navbar":{"links":[]},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/taptalent-ai","website":"https://taptalent.ai/"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"taptalent","hasAudioNarration":false,"actualSubdomain":"taptalent","customDomains":["docs.taptalent.io"],"gitSource":{"type":"github","owner":"taptalent-ai","repo":"taptalent-docs","deployBranch":"feat/companyCampaignPartnerAPI","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6acf73c9b4870666e533191e","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API Playground","count":63},{"language":"default","tag":"Documentation","count":26},{"language":"default","tag":"Webhooks","count":20},{"language":"default","tag":"API Reference","count":16},{"language":"default","tag":"Candidate Self-Scheduling","count":13},{"language":"default","tag":"Candidates","count":6},{"language":"default","tag":"Custom Field Values","count":6},{"language":"default","tag":"Pipelines","count":6},{"language":"default","tag":"Custom Fields","count":5},{"language":"default","tag":"Job Candidates","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"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":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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":"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":"full-page-search","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":"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":"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":"turbopuffer-dual-write","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},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-playground/pipelines/create-or-update-a-pipeline-stage","slug":"/api-playground/pipelines/create-or-update-a-pipeline-stage","pageMetadata":{"title":"Create or update a pipeline stage","description":"Creates a new stage or updates an existing stage in a pipeline,\ndepending on the request body: when `stageId` is present the existing\nstage is updated (`200`); when `stageId` is omitted a new stage is\ncreated (`201`).\n\nOrdering rules:\n\n- Stages have a 1-based `order` determining their position in the\n pipeline.\n- When creating a stage without an `order`, it is placed immediately\n before the `HIRED` stage.\n- When an `order` is supplied (on create or update), the other stages'\n orders are adjusted automatically to maintain sequential ordering.\n- The `SOURCED` stage's order is locked and cannot be changed.\n\nSystem stages (`SOURCED`, `APPLIED`, `HIRED`) cannot have their type\nchanged — only their name can be updated (send `stageId` and `name`\nonly).\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /pipelines/stages","href":"/api-playground/pipelines/create-or-update-a-pipeline-stage","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 li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Creates a new stage or updates an existing stage in a pipeline,\\ndepending on the request body: when \", _jsx(_components.code, {\n children: \"stageId\"\n }), \" is present the existing\\nstage is updated (\", _jsx(_components.code, {\n children: \"200\"\n }), \"); when \", _jsx(_components.code, {\n children: \"stageId\"\n }), \" is omitted a new stage is\\ncreated (\", _jsx(_components.code, {\n children: \"201\"\n }), \").\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Ordering rules:\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"Stages have a 1-based \", _jsx(_components.code, {\n children: \"order\"\n }), \" determining their position in the\\npipeline.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"When creating a stage without an \", _jsx(_components.code, {\n children: \"order\"\n }), \", it is placed immediately\\nbefore the \", _jsx(_components.code, {\n children: \"HIRED\"\n }), \" stage.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"When an \", _jsx(_components.code, {\n children: \"order\"\n }), \" is supplied (on create or update), the other stages’\\norders are adjusted automatically to maintain sequential ordering.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"The \", _jsx(_components.code, {\n children: \"SOURCED\"\n }), \" stage’s order is locked and cannot be changed.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"System stages (\", _jsx(_components.code, {\n children: \"SOURCED\"\n }), \", \", _jsx(_components.code, {\n children: \"APPLIED\"\n }), \", \", _jsx(_components.code, {\n children: \"HIRED\"\n }), \") cannot have their type\\nchanged — only their name can be updated (send \", _jsx(_components.code, {\n children: \"stageId\"\n }), \" and \", _jsx(_components.code, {\n children: \"name\"\n }), \"\\nonly).\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create or update a pipeline stage","description":"Creates a new stage or updates an existing stage in a pipeline,\ndepending on the request body: when `stageId` is present the existing\nstage is updated (`200`); when `stageId` is omitted a new stage is\ncreated (`201`).\n\nOrdering rules:\n\n- Stages have a 1-based `order` determining their position in the\n pipeline.\n- When creating a stage without an `order`, it is placed immediately\n before the `HIRED` stage.\n- When an `order` is supplied (on create or update), the other stages'\n orders are adjusted automatically to maintain sequential ordering.\n- The `SOURCED` stage's order is locked and cannot be changed.\n\nSystem stages (`SOURCED`, `APPLIED`, `HIRED`) cannot have their type\nchanged — only their name can be updated (send `stageId` and `name`\nonly).\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /pipelines/stages","href":"/api-playground/pipelines/create-or-update-a-pipeline-stage","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Pipelines"],"operationId":"upsertPipelineStage","summary":"Create or update a pipeline stage","description":"Creates a new stage or updates an existing stage in a pipeline,\ndepending on the request body: when `stageId` is present the existing\nstage is updated (`200`); when `stageId` is omitted a new stage is\ncreated (`201`).\n\nOrdering rules:\n\n- Stages have a 1-based `order` determining their position in the\n pipeline.\n- When creating a stage without an `order`, it is placed immediately\n before the `HIRED` stage.\n- When an `order` is supplied (on create or update), the other stages'\n orders are adjusted automatically to maintain sequential ordering.\n- The `SOURCED` stage's order is locked and cannot be changed.\n\nSystem stages (`SOURCED`, `APPLIED`, `HIRED`) cannot have their type\nchanged — only their name can be updated (send `stageId` and `name`\nonly).\n","requestBody":"58dd35a9-0ed5-4bc2-a7f3-ba1d0468d21f","responses":{"200":"c4d769ae-37fa-4d0f-8ef0-354f220d40fd","201":"9808221d-5a7d-4341-8752-d87de9ff946e","400":"a247169a-2798-4d83-99be-2bd19fed52dc","401":"ec668f74-eba2-4983-95bc-3ff5b3e337fe","429":"d4e75f0b-cfc0-4b5b-a063-b231665f16c2","500":"189c6c24-5575-4de3-846a-5e364df01d96"},"method":"post","type":"path","servers":["33fc5173-9c79-4ceb-afc4-86a4687d00cd","3a2ed6ba-6976-41bf-ae76-fe04d352e807"],"security":["480f8571-6aa1-4f13-ba5c-c8f2af838410"],"path":"/pipelines/stages","baseUrlOptions":["https://partner-api.taptalent.io/v1/partner","https://sandbox.partner-api.taptalent.io/v1/partner"],"title":"Create or update a pipeline stage","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Create-or-update request for a pipeline stage. When `stageId` is\npresent the existing stage is updated; when it is omitted a new stage\nis created.\n","required":["pipelineId"],"properties":{"pipelineId":{"type":"integer","description":"The unique identifier of the pipeline.","examples":[123],"isRequired":true,"uniqueKey":"pipelineId","typeLabel":"integer"},"name":{"type":"string","description":"Stage name. The documentation's field table marks this field as\nrequired, but per its field description it is required when\ncreating a stage (no `stageId`) and optional when updating an\nexisting stage.\n","examples":["Technical Interview"],"uniqueKey":"name","typeLabel":"string"},"type":{"type":"string","enum":["ASSESSMENT","SCREEN","SHORTLISTED","OFFER","ONBOARDING"],"description":"Stage type. The documentation's field table marks this field as\nrequired, but per its field description it is required when\ncreating a stage (no `stageId`) and optional when updating an\nexisting stage. Only the five custom types listed here are valid in\nrequests; system stages (`SOURCED`, `APPLIED`, `HIRED`) cannot have\ntheir type changed (omit `type` and send only `stageId` and `name`\nto rename them). An unrecognized value is rejected with\n`INVALID_REQUEST` (\"Stage type is not valid\").\n","uniqueKey":"type","typeLabel":"enum\u003cstring>"},"stageId":{"type":"integer","description":"Stage ID. If provided, updates the existing stage; if omitted,\ncreates a new stage.\n","examples":[791],"uniqueKey":"stageId","typeLabel":"integer"},"order":{"type":"integer","minimum":1,"description":"Desired 1-based order position. If not provided, new stages are\nplaced immediately before the `HIRED` stage. When updating, other\nstages' orders are adjusted automatically to maintain sequential\nordering. The `SOURCED` stage's order is locked and cannot be\nchanged. The documented field table specifies no maximum, but the\ndocumented validation error reads \"Order must be between 1 and 5\",\nindicating an upper bound (tied to the pipeline's stage count) is\nenforced in practice; no `maximum` is imposed here.\n","examples":[3],"uniqueKey":"order","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"examples":{"createStage":{"title":"createStage","value":{"pipelineId":123,"name":"Technical Interview","type":"SCREEN","order":3}},"updateStage":{"title":"updateStage","value":{"pipelineId":123,"stageId":791,"name":"Updated Stage Name","type":"ASSESSMENT","order":2}},"renameSystemStage":{"title":"renameSystemStage","value":{"pipelineId":123,"stageId":789,"name":"Updated Sourced Stage Name"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"c4d769ae-37fa-4d0f-8ef0-354f220d40fd":{"description":"Stage updated (request contained a `stageId`). The submitted\n`order` is not echoed in the response body.\n","content":{"application/json":{"schema":{"type":"object","description":"Success envelope for stage create (201) and stage update (200) — both\nreturn the same body shape. The stage's `order` is not echoed.\n","required":["status","data"],"properties":{"status":{"type":"string","enum":["success"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"A stage within a hiring pipeline. System stages (`SOURCED`, `APPLIED`,\n`HIRED`) are created automatically with every pipeline, cannot be\ndeleted, and cannot have their type changed — only their name is\neditable; additionally the `SOURCED` stage's order is locked. Custom\nstages can be created, updated, and deleted. Stages have a 1-based\norder determining their position in the pipeline, but the order value\nitself is not echoed in any documented response — stages are returned\nin pipeline order.\n","required":["id","name","type","createdAt","updatedAt"],"properties":{"id":{"type":"integer","description":"Unique identifier of the stage.","examples":[789],"isRequired":true,"uniqueKey":"data.id","typeLabel":"integer"},"name":{"type":"string","description":"Display name of the stage.","examples":["Phone Screen"],"isRequired":true,"uniqueKey":"data.name","typeLabel":"string"},"type":{"type":"string","description":"Stage type. Observed values: `SOURCED`, `APPLIED`, `HIRED` (system\nstages present in every pipeline); `CUSTOM` (how `GET /pipelines`\nand `GET /pipelines/{pipelineId}` responses represent custom\nstages); and `ASSESSMENT`, `SCREEN`, `SHORTLISTED`, `OFFER`,\n`ONBOARDING` (the specific custom types accepted by\n`POST /pipelines/stages` and echoed in its responses). Because the\nread side reports `CUSTOM` where the write side uses the specific\ncustom type, the closed set of response values is unconfirmed and\nno enum is imposed here.\n","examples":["CUSTOM"],"isRequired":true,"uniqueKey":"data.type","typeLabel":"string"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when the stage was created.","examples":["2024-01-15T10:00:00.000Z"],"isRequired":true,"uniqueKey":"data.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when the stage was last updated.","examples":["2024-01-15T10:00:00.000Z"],"isRequired":true,"uniqueKey":"data.updatedAt","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"stageUpdated":{"title":"stageUpdated","value":{"status":"success","data":{"id":791,"name":"Updated Stage Name","type":"ASSESSMENT","createdAt":"2024-01-15T10:00:00.000Z","updatedAt":"2024-01-15T11:00:00.000Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"9808221d-5a7d-4341-8752-d87de9ff946e":{"description":"Stage created (request contained no `stageId`). The submitted\n`order` is not echoed in the response body.\n","content":{"application/json":{"schema":{"type":"object","description":"Success envelope for stage create (201) and stage update (200) — both\nreturn the same body shape. The stage's `order` is not echoed.\n","required":["status","data"],"properties":{"status":{"type":"string","enum":["success"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"A stage within a hiring pipeline. System stages (`SOURCED`, `APPLIED`,\n`HIRED`) are created automatically with every pipeline, cannot be\ndeleted, and cannot have their type changed — only their name is\neditable; additionally the `SOURCED` stage's order is locked. Custom\nstages can be created, updated, and deleted. Stages have a 1-based\norder determining their position in the pipeline, but the order value\nitself is not echoed in any documented response — stages are returned\nin pipeline order.\n","required":["id","name","type","createdAt","updatedAt"],"properties":{"id":{"type":"integer","description":"Unique identifier of the stage.","examples":[789],"isRequired":true,"uniqueKey":"data.id","typeLabel":"integer"},"name":{"type":"string","description":"Display name of the stage.","examples":["Phone Screen"],"isRequired":true,"uniqueKey":"data.name","typeLabel":"string"},"type":{"type":"string","description":"Stage type. Observed values: `SOURCED`, `APPLIED`, `HIRED` (system\nstages present in every pipeline); `CUSTOM` (how `GET /pipelines`\nand `GET /pipelines/{pipelineId}` responses represent custom\nstages); and `ASSESSMENT`, `SCREEN`, `SHORTLISTED`, `OFFER`,\n`ONBOARDING` (the specific custom types accepted by\n`POST /pipelines/stages` and echoed in its responses). Because the\nread side reports `CUSTOM` where the write side uses the specific\ncustom type, the closed set of response values is unconfirmed and\nno enum is imposed here.\n","examples":["CUSTOM"],"isRequired":true,"uniqueKey":"data.type","typeLabel":"string"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when the stage was created.","examples":["2024-01-15T10:00:00.000Z"],"isRequired":true,"uniqueKey":"data.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when the stage was last updated.","examples":["2024-01-15T10:00:00.000Z"],"isRequired":true,"uniqueKey":"data.updatedAt","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"stageCreated":{"title":"stageCreated","value":{"status":"success","data":{"id":791,"name":"Technical Interview","type":"SCREEN","createdAt":"2024-01-15T10:00:00.000Z","updatedAt":"2024-01-15T10:00:00.000Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"a247169a-2798-4d83-99be-2bd19fed52dc":{"description":"Validation error.\nHTTP status inferred from the error category; the source documentation specifies the body but not the status code.\n","content":{"application/json":{"schema":{"type":"object","description":"Canonical error envelope used by most non-authentication errors.","required":["error"],"properties":{"error":{"type":"object","description":"Canonical error object carried under the `error` key.","required":["code","type","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code, e.g. `INVALID_REQUEST`.","examples":["INVALID_REQUEST"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"type":{"type":"string","description":"Error category.","enum":["validation_error","internal_error","not_found","authorization_error","resource_error","payment_error","subscription_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional per-field validation messages or structured error context.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"invalidStageType":{"title":"invalidStageType","value":{"error":{"code":"INVALID_REQUEST","type":"validation_error","message":"Stage type is not valid"}}},"invalidOrderRange":{"title":"invalidOrderRange","value":{"error":{"code":"INVALID_REQUEST","type":"validation_error","message":"Order must be between 1 and 5"}}},"invalidStageId":{"title":"invalidStageId","value":{"error":{"code":"INVALID_REQUEST","type":"validation_error","message":"Stage ID is not valid"}}}},"exampleType":"examples"}},"exampleType":"examples"},"ec668f74-eba2-4983-95bc-3ff5b3e337fe":{"description":"Authentication failed. Note that authentication errors use flat body\nshapes rather than the canonical `error` envelope.\n","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Flat authentication error shape (does not use the canonical `error` envelope).","required":["message"],"properties":{"message":{"type":"string","examples":["Invalid API key"],"isRequired":true,"uniqueKey":"oneOf.0.message","typeLabel":"string"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Flat authentication error shape returned when the account subscription is inactive.","required":["code","message"],"properties":{"code":{"type":"string","examples":["ACCOUNT_INACTIVE"],"isRequired":true,"uniqueKey":"oneOf.1.code","typeLabel":"string"},"message":{"type":"string","examples":["Your subscription is inactive. Please renew your plan to continue using this feature."],"isRequired":true,"uniqueKey":"oneOf.1.message","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","description":"Flat authentication error shape returned when the API key does not exist.","required":["message","isApiKeyExists"],"properties":{"message":{"type":"string","examples":["API key not found"],"isRequired":true,"uniqueKey":"oneOf.2.message","typeLabel":"string"},"isApiKeyExists":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.2.isApiKeyExists","typeLabel":"boolean"}},"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"invalidApiKey":{"title":"invalidApiKey","value":{"message":"Invalid API key"}},"accountInactive":{"title":"accountInactive","value":{"code":"ACCOUNT_INACTIVE","message":"Your subscription is inactive. Please renew your plan to continue using this feature."}},"apiKeyNotFound":{"title":"apiKeyNotFound","value":{"message":"API key not found","isApiKeyExists":false}}},"exampleType":"examples"}},"exampleType":"examples"},"d4e75f0b-cfc0-4b5b-a063-b231665f16c2":{"x-inferred":true,"description":"Rate limit exceeded. Rate limits are applied at the company level; the\nresponse body below is inferred because the current documentation\nmentions handling 429 responses but does not publish a body. Retry\nwith exponential backoff.\n","content":{"application/json":{"schema":{"type":"object","description":"Canonical error envelope used by most non-authentication errors.","required":["error"],"properties":{"error":{"type":"object","description":"Canonical error object carried under the `error` key.","required":["code","type","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code, e.g. `INVALID_REQUEST`.","examples":["INVALID_REQUEST"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"type":{"type":"string","description":"Error category.","enum":["validation_error","internal_error","not_found","authorization_error","resource_error","payment_error","subscription_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional per-field validation messages or structured error context.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"rateLimited":{"title":"rateLimited","value":{"error":{"code":"RATE_LIMIT_EXCEEDED","type":"validation_error","message":"Too many requests. Please retry with exponential backoff."}}}},"exampleType":"examples"}},"exampleType":"examples"},"189c6c24-5575-4de3-846a-5e364df01d96":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","description":"Canonical error envelope used by most non-authentication errors.","required":["error"],"properties":{"error":{"type":"object","description":"Canonical error object carried under the `error` key.","required":["code","type","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code, e.g. `INVALID_REQUEST`.","examples":["INVALID_REQUEST"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"type":{"type":"string","description":"Error category.","enum":["validation_error","internal_error","not_found","authorization_error","resource_error","payment_error","subscription_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional per-field validation messages or structured error context.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"internalError":{"title":"internalError","value":{"error":{"code":"INTERNAL_ERROR","type":"internal_error","message":"Something went wrong."}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"480f8571-6aa1-4f13-ba5c-c8f2af838410":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"Company-scoped API key. Production keys are prefixed `sk_live_`,\nsandbox keys `sk_test_`, each followed by 22 base62 characters\n(pattern `^sk_(live|test)_[0-9A-Za-z]{22}$`). Generate keys in the\nTapTalent dashboard under Account Settings → Developers → API Key\nManagement; a key is shown once at generation and old keys are\ninvalidated immediately on regeneration.\n","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"33fc5173-9c79-4ceb-afc4-86a4687d00cd":{"url":"https://partner-api.taptalent.io/v1/partner","description":"Production (use `sk_live_` keys)"},"3a2ed6ba-6976-41bf-ae76-fe04d352e807":{"url":"https://sandbox.partner-api.taptalent.io/v1/partner","description":"Sandbox / staging (use `sk_test_` keys)"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"Company-scoped API key. Production keys are prefixed `sk_live_`,\nsandbox keys `sk_test_`, each followed by 22 base62 characters\n(pattern `^sk_(live|test)_[0-9A-Za-z]{22}$`). Generate keys in the\nTapTalent dashboard under Account Settings → Developers → API Key\nManagement; a key is shown once at generation and old keys are\ninvalidated immediately on regeneration.\n","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Company-scoped API key. Production keys are prefixed `sk_live_`,\nsandbox keys `sk_test_`, each followed by 22 base62 characters\n(pattern `^sk_(live|test)_[0-9A-Za-z]{22}$`). Generate keys in the\nTapTalent dashboard under Account Settings → Developers → API Key\nManagement; a key is shown once at generation and old keys are\ninvalidated immediately on regeneration.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"taptalent","siteName":"Taptalent Partner API","title":"Create or update a pipeline stage - Taptalent Partner API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-14T12:21:43.391Z","originalFileLocation":"api-playground/pipelines/create-or-update-a-pipeline-stage.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=\"Creates a new stage or updates an existing stage in a pipeline, depending on the request body: when stageId is present the existing stage is updated (200); when stageId is omitted a new stage is created (201). Ordering rules: - Stages have a 1-based order determining their position in the pipeline. - When creating a stage without an order, it is placed immediately before the HIRED stage. - When an order is supplied (on create or update), the other stages\u0026#x27; orders are adjusted automatically to maintain sequential ordering. - The SOURCED stage\u0026#x27;s order is locked and cannot be changed. System stages (SOURCED, APPLIED, HIRED) cannot have their type changed — only their name can be updated (send stageId and name only).\">\u003cmeta data-mint-head name=\"application-name\" content=\"Taptalent Partner API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/taptalent/RGngVHavW5nHpOXk/_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/taptalent/RGngVHavW5nHpOXk/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/taptalent/RGngVHavW5nHpOXk/_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/taptalent/RGngVHavW5nHpOXk/_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/taptalent/RGngVHavW5nHpOXk/_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/taptalent/RGngVHavW5nHpOXk/_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/taptalent/RGngVHavW5nHpOXk/_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/taptalent/RGngVHavW5nHpOXk/_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/taptalent/RGngVHavW5nHpOXk/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create or update a pipeline stage - Taptalent Partner API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates a new stage or updates an existing stage in a pipeline, depending on the request body: when stageId is present the existing stage is updated (200); when stageId is omitted a new stage is created (201). Ordering rules: - Stages have a 1-based order determining their position in the pipeline. - When creating a stage without an order, it is placed immediately before the HIRED stage. - When an order is supplied (on create or update), the other stages\u0026#x27; orders are adjusted automatically to maintain sequential ordering. - The SOURCED stage\u0026#x27;s order is locked and cannot be changed. System stages (SOURCED, APPLIED, HIRED) cannot have their type changed — only their name can be updated (send stageId and name only).\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Taptalent Partner API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.taptalent.io/api-playground/pipelines/create-or-update-a-pipeline-stage\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://taptalent.mintlify.site/_mintlify/api/og/v2?division=Pipelines\u0026amp;title=Create+or+update+a+pipeline+stage\u0026amp;description=Creates+a+new+stage+or+updates+an+existing+stage+in+a+pipeline%2C%0Adepending+on+the+request+body%3A+when+%60stageId%60+is+present+the+existing%0Astage+is+updated+%28%60200%60%29%3B+\u0026amp;theme=646244e5d078ae15de8cf593\u0026amp;signature=908d47a208124d97efa044cc81b64c0f0ca5fb812ec1ac506198ac29799b7ff6\">\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=\"Create or update a pipeline stage - Taptalent Partner API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates a new stage or updates an existing stage in a pipeline, depending on the request body: when stageId is present the existing stage is updated (200); when stageId is omitted a new stage is created (201). Ordering rules: - Stages have a 1-based order determining their position in the pipeline. - When creating a stage without an order, it is placed immediately before the HIRED stage. - When an order is supplied (on create or update), the other stages\u0026#x27; orders are adjusted automatically to maintain sequential ordering. - The SOURCED stage\u0026#x27;s order is locked and cannot be changed. System stages (SOURCED, APPLIED, HIRED) cannot have their type changed — only their name can be updated (send stageId and name only).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://taptalent.mintlify.site/_mintlify/api/og/v2?division=Pipelines\u0026amp;title=Create+or+update+a+pipeline+stage\u0026amp;description=Creates+a+new+stage+or+updates+an+existing+stage+in+a+pipeline%2C%0Adepending+on+the+request+body%3A+when+%60stageId%60+is+present+the+existing%0Astage+is+updated+%28%60200%60%29%3B+\u0026amp;theme=646244e5d078ae15de8cf593\u0026amp;signature=908d47a208124d97efa044cc81b64c0f0ca5fb812ec1ac506198ac29799b7ff6\">\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/taptalent/RGngVHavW5nHpOXk/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Taptalent Partner API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6e58ff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.taptalent.io/api-playground/pipelines/create-or-update-a-pipeline-stage\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-playground/pipelines/create-or-update-a-pipeline-stage.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.taptalent.io/#organization\",\"name\":\"Taptalent Partner API\",\"url\":\"https://docs.taptalent.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/taptalent/lKy84_BssSCy2hcz/images/TTLogo(1).png?fit=max\u0026auto=format\u0026n=lKy84_BssSCy2hcz\u0026q=85\u0026s=ac7c949427cc2893306f6036415f087e\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.taptalent.io#website\",\"name\":\"Taptalent Partner API\",\"url\":\"https://docs.taptalent.io\",\"publisher\":{\"@id\":\"https://docs.taptalent.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.taptalent.io/api-playground/pipelines/create-or-update-a-pipeline-stage#webpage\",\"url\":\"https://docs.taptalent.io/api-playground/pipelines/create-or-update-a-pipeline-stage\",\"name\":\"Create or update a pipeline stage\",\"description\":\"Creates a new stage or updates an existing stage in a pipeline, depending on the request body: when stageId is present the existing stage is updated (200); when stageId is omitted a new stage is created (201). Ordering rules: - Stages have a 1-based order determining their position in the pipeline. - When creating a stage without an order, it is placed immediately before the HIRED stage. - When an order is supplied (on create or update), the other stages' orders are adjusted automatically to maintain sequential ordering. - The SOURCED stage's order is locked and cannot be changed. System stages (SOURCED, APPLIED, HIRED) cannot have their type changed — only their name can be updated (send stageId and name only).\",\"dateModified\":\"2026-10-14T12:21:43.391Z\",\"isPartOf\":{\"@id\":\"https://docs.taptalent.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.taptalent.io/api-playground/pipelines/create-or-update-a-pipeline-stage#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.taptalent.io/api-playground/pipelines/create-or-update-a-pipeline-stage#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Pipelines\",\"item\":\"https://docs.taptalent.io/api-playground/pipelines/list-pipelines\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create or update a pipeline stage\",\"item\":\"https://docs.taptalent.io/api-playground/pipelines/create-or-update-a-pipeline-stage\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.taptalent.io/api-playground/pipelines/create-or-update-a-pipeline-stage#apireference\",\"headline\":\"Create or update a pipeline stage\",\"name\":\"Create or update a pipeline stage\",\"description\":\"Creates a new stage or updates an existing stage in a pipeline, depending on the request body: when stageId is present the existing stage is updated (200); when stageId is omitted a new stage is created (201). Ordering rules: - Stages have a 1-based order determining their position in the pipeline. - When creating a stage without an order, it is placed immediately before the HIRED stage. - When an order is supplied (on create or update), the other stages' orders are adjusted automatically to maintain sequential ordering. - The SOURCED stage's order is locked and cannot be changed. System stages (SOURCED, APPLIED, HIRED) cannot have their type changed — only their name can be updated (send stageId and name only).\",\"url\":\"https://docs.taptalent.io/api-playground/pipelines/create-or-update-a-pipeline-stage\",\"mainEntityOfPage\":{\"@id\":\"https://docs.taptalent.io/api-playground/pipelines/create-or-update-a-pipeline-stage#webpage\"},\"dateModified\":\"2026-10-14T12:21:43.391Z\",\"publisher\":{\"@id\":\"https://docs.taptalent.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.taptalent.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Taptalent Partner API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Taptalent Partner API","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Playground","groups":[{"group":"Jobs","pages":[{"title":"List jobs","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /jobs","href":"/api-playground/jobs/list-jobs"},{"title":"Create a job","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /jobs","href":"/api-playground/jobs/create-a-job"},{"title":"Get a job","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /jobs/{jobId}","href":"/api-playground/jobs/get-a-job"},{"title":"Update a job","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /jobs/{jobId}","href":"/api-playground/jobs/update-a-job"}]},{"group":"Candidates","pages":[{"title":"Add a candidate","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /candidates","href":"/api-playground/candidates/add-a-candidate"},{"title":"List candidates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /candidates/list","href":"/api-playground/candidates/list-candidates"},{"title":"Get candidate details","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /candidates/{candidateId}","href":"/api-playground/candidates/get-candidate-details"},{"title":"Bulk upload resumes","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /candidates/bulk/resume","href":"/api-playground/candidates/bulk-upload-resumes"},{"title":"Get batch candidates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /candidates/batch/{batchId}","href":"/api-playground/candidates/get-batch-candidates"},{"title":"Bulk fetch candidates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /candidates/bulk-fetch","href":"/api-playground/candidates/bulk-fetch-candidates"}]},{"group":"Job Candidates","pages":[{"title":"Bulk fetch job candidates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /job-candidates/bulk-fetch","href":"/api-playground/job-candidates/bulk-fetch-job-candidates"},{"title":"Bulk upload resumes to a job","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /job-candidates/bulk/resume","href":"/api-playground/job-candidates/bulk-upload-resumes-to-a-job"},{"title":"List candidates for a job","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /job-candidates/job/{jobId}/candidates","href":"/api-playground/job-candidates/list-candidates-for-a-job"},{"title":"List candidates in a pipeline stage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /job-candidates/stage/{stageId}/candidates","href":"/api-playground/job-candidates/list-candidates-in-a-pipeline-stage"},{"title":"Move a job candidate to a stage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /job-candidates/{jobCandidateId}/stage","href":"/api-playground/job-candidates/move-a-job-candidate-to-a-stage"}]},{"group":"Pipelines","pages":[{"title":"List pipelines","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /pipelines","href":"/api-playground/pipelines/list-pipelines"},{"title":"Create a pipeline","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /pipelines","href":"/api-playground/pipelines/create-a-pipeline"},{"title":"Get pipeline details","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /pipelines/{pipelineId}","href":"/api-playground/pipelines/get-pipeline-details"},{"title":"Update a pipeline","description":"Updates the name of an existing pipeline. You can only modify\npipelines that belong to your company.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /pipelines/{pipelineId}","href":"/api-playground/pipelines/update-a-pipeline"},{"title":"Create or update a pipeline stage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /pipelines/stages","href":"/api-playground/pipelines/create-or-update-a-pipeline-stage"},{"title":"Delete a pipeline stage","description":"Deletes a custom stage from a pipeline. All candidates in the deleted\nstage are moved to the stage identified by `newStageId`, and the\nremaining stages are automatically reordered sequentially. System\nstages (`SOURCED`, `APPLIED`, `HIRED`) cannot be deleted.\n\nThis endpoint REQUIRES a JSON request body on a DELETE request (legal\nper the HTTP specification and OpenAPI 3.1, but unusual): some HTTP\nclients and proxies silently strip bodies from DELETE requests — make\nsure your client actually transmits the body, or the request will fail\nvalidation.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /pipelines/stages/{stageId}","href":"/api-playground/pipelines/delete-a-pipeline-stage"}]},{"group":"Custom Fields","pages":[{"title":"List custom fields","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /custom-fields","href":"/api-playground/custom-fields/list-custom-fields"},{"title":"Create a custom field","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /custom-fields","href":"/api-playground/custom-fields/create-a-custom-field"},{"title":"Get a custom field","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /custom-fields/{customFieldId}","href":"/api-playground/custom-fields/get-a-custom-field"},{"title":"Update a custom field","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /custom-fields/{customFieldId}","href":"/api-playground/custom-fields/update-a-custom-field"},{"title":"Delete a custom field","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /custom-fields/{customFieldId}","href":"/api-playground/custom-fields/delete-a-custom-field"}]},{"group":"Custom Field Values","pages":[{"title":"List custom field values for an entity","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /custom-field-values","href":"/api-playground/custom-field-values/list-custom-field-values-for-an-entity"},{"title":"Create or update a custom field value","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /custom-field-values","href":"/api-playground/custom-field-values/create-or-update-a-custom-field-value"},{"title":"Bulk create or update custom field values","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /custom-field-values/bulk","href":"/api-playground/custom-field-values/bulk-create-or-update-custom-field-values"},{"title":"Get a custom field value","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /custom-field-values/{valueId}","href":"/api-playground/custom-field-values/get-a-custom-field-value"},{"title":"Delete a custom field value","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /custom-field-values/{valueId}","href":"/api-playground/custom-field-values/delete-a-custom-field-value"},{"title":"Delete all custom field values for an entity","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /custom-field-values/entity/{entityType}/{entityId}","href":"/api-playground/custom-field-values/delete-all-custom-field-values-for-an-entity"}]},{"group":"Candidate Self-Scheduling","pages":[{"title":"List booking schedules","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /booking-schedules","href":"/api-playground/candidate-self-scheduling/list-booking-schedules"},{"title":"Get a booking schedule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /booking-schedules/{bookingScheduleId}","href":"/api-playground/candidate-self-scheduling/get-a-booking-schedule"},{"title":"List available slots","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /booking-schedules/{bookingScheduleId}/slots","href":"/api-playground/candidate-self-scheduling/list-available-slots"},{"title":"List locations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /booking-schedules/{bookingScheduleId}/locations","href":"/api-playground/candidate-self-scheduling/list-locations"},{"title":"List questions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /booking-schedules/{bookingScheduleId}/questions","href":"/api-playground/candidate-self-scheduling/list-questions"},{"title":"Create a candidate scheduling link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /booking-schedules/{bookingScheduleId}/links","href":"/api-playground/candidate-self-scheduling/create-a-candidate-scheduling-link"},{"title":"Create a booking","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /booking-schedules/{bookingScheduleId}/bookings","href":"/api-playground/candidate-self-scheduling/create-a-booking"},{"title":"List bookings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bookings","href":"/api-playground/candidate-self-scheduling/list-bookings"},{"title":"Get a booking","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bookings/{bookingId}","href":"/api-playground/candidate-self-scheduling/get-a-booking"},{"title":"Reschedule a booking","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bookings/{bookingId}/reschedule","href":"/api-playground/candidate-self-scheduling/reschedule-a-booking"},{"title":"Cancel a booking","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bookings/{bookingId}/cancel","href":"/api-playground/candidate-self-scheduling/cancel-a-booking"},{"title":"Record attendance / check-in","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bookings/{bookingId}/attendance","href":"/api-playground/candidate-self-scheduling/record-attendance-check-in"},{"title":"Record attendance by code","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /attendance-codes/{attendanceCode}/check-in","href":"/api-playground/candidate-self-scheduling/record-attendance-by-code"}]},{"group":"Webhooks","pages":[{"title":"Bulk resume upload batch started","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook resume.bulk_upload_parse.started","href":"/api-playground/webhooks/bulk-resume-upload-batch-started"},{"title":"Bulk resume upload batch completed","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook resume.bulk_upload_parse.completed","href":"/api-playground/webhooks/bulk-resume-upload-batch-completed"},{"title":"Bulk resume upload batch failed","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook resume.bulk_upload_parse.failed","href":"/api-playground/webhooks/bulk-resume-upload-batch-failed"},{"title":"Single resume parse completed","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook resume.single_parse.completed","href":"/api-playground/webhooks/single-resume-parse-completed"},{"title":"Single resume parse failed","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook resume.single_parse.failed","href":"/api-playground/webhooks/single-resume-parse-failed"},{"title":"Job created","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook job.created","href":"/api-playground/webhooks/job-created"},{"title":"Job details updated","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook job.updated","href":"/api-playground/webhooks/job-details-updated"},{"title":"Job status changed","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook job.status_changed","href":"/api-playground/webhooks/job-status-changed"},{"title":"Candidates added to a job","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook candidate.added_to_job","href":"/api-playground/webhooks/candidates-added-to-a-job"},{"title":"Candidates moved to a different stage","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook candidate.stage_changed","href":"/api-playground/webhooks/candidates-moved-to-a-different-stage"},{"title":"Candidates hired","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook candidate.hired","href":"/api-playground/webhooks/candidates-hired"},{"title":"Candidates rejected","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook candidate.rejected","href":"/api-playground/webhooks/candidates-rejected"},{"title":"Candidates removed from a job","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook candidate.removed_from_job","href":"/api-playground/webhooks/candidates-removed-from-a-job"},{"title":"Candidate profile or application updated","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook candidate.updated","href":"/api-playground/webhooks/candidate-profile-or-application-updated"},{"title":"Booking scheduled","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook booking.scheduled","href":"/api-playground/webhooks/booking-scheduled"},{"title":"Booking rescheduled","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook booking.rescheduled","href":"/api-playground/webhooks/booking-rescheduled"},{"title":"Booking cancelled","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook booking.cancelled","href":"/api-playground/webhooks/booking-cancelled"},{"title":"Booking attendance updated","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook booking.attendance_updated","href":"/api-playground/webhooks/booking-attendance-updated"}]}]}]},"basePath":"","title":"Create or update a pipeline stage - Taptalent Partner API","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}