Skip to main content
PATCH
/
v1
/
sequence-blueprints
/
{blueprintId}
Update sequence blueprint
curl --request PATCH \
  --url https://app.kalent.ai/api/v1/sequence-blueprints/{blueprintId} \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "name": "<string>",
  "steps": [
    {}
  ],
  "config": {}
}
'

Documentation Index

Fetch the complete documentation index at: https://docs.kalent.ai/llms.txt

Use this file to discover all available pages before exploring further.

First time? Set up Authentication

Learn how to authenticate your API requests with your API key.
Updates a sequence blueprint in your workspace. Send at least one of name, steps, or config.

Path parameters

blueprintId
string
required
Sequence blueprint id returned by Create sequence blueprint.

Request body

name
string
New display name for the blueprint.
steps
array
Ordered outreach steps. Sending steps replaces the full blueprint step list. See Step format.
config
object
Optional sequence-level configuration.

Step shape

Each item in steps must be an object with this shape:
FieldTypeRequiredDescription
idstringYesStable client-generated step id, unique within the blueprint.
namestringYesHuman-readable step label.
typestringYesLINKEDIN, WHATSAPP, EMAIL, or SMS.
linkedInTypestringOnly for LinkedInRequired when type is LINKEDIN; forbidden for other types.
contentstringYesMessage body. For LINKEDIN_INVITATION, content is accepted but stored as an empty string.
subjectstringEmail onlyEmail subject.
temporalityTypestringYesASAP, DELAYED, or AFTER_INVITATION_SETTLED.
delayobjectFor delayed stepsRequired when temporalityType is DELAYED.
delay.valueintegerWith delayPositive delay value.
delay.unitstringWith delayday, minute, or second.
contentSourcestringNomanual or suggestedByKalent.
config.userIdstringNoOptional sender/user override.
policy.skipStepIfNoContactbooleanNoSkip the step when the required contact is unavailable.
policy.autoValidateAIDraftbooleanNoAutomatically validate AI-generated drafts.
policy.inviteTimeoutDaysintegerNoPositive number of days before invite-related follow-up logic.
Allowed linkedInType values:
  • LINKEDIN_INVITATION
  • LINKEDIN_INVITATION_WITH_MESSAGE
  • LINKEDIN_MESSAGE
  • LINKEDIN_INMAIL
Only one invite step is allowed per blueprint: either LINKEDIN_INVITATION or LINKEDIN_INVITATION_WITH_MESSAGE.

Supported template variables

Only these variables are supported in content and subject:
VariableMeaning
{{firstname}}Candidate first name
{{lastname}}Candidate last name
{{candidateJobTitle}}Candidate current job title
{{candidateCompanyName}}Candidate current company
{{candidateLocation}}Candidate location
{{sourcingJobTitle}}Sourcing target job title
{{sourcingLocation}}Sourcing target location
{{recruiterFirstname}}Recruiter first name
{{recruiterLastname}}Recruiter last name
Unknown variables such as {{firstName}}, {{company}}, or {{job}} are rejected with validation_error. Do not use unresolved bracket placeholders such as [company], [specific project or stack], [one-pager link], or [1 detail to add] in content or subject. Replace them with real text, remove that part of the sentence, or ask the user for the missing detail before updating the blueprint. Payloads containing bracket placeholders are rejected with validation_error.

Validation errors

Invalid payloads return the standard error envelope:
{
  "success": false,
  "error": {
    "code": "validation_error",
    "message": "Validation failed",
    "debugTrackingCode": "...",
    "issues": [
      {
        "path": ["steps", 0, "linkedInType"],
        "message": "linkedInType is required when type is LINKEDIN"
      }
    ]
  }
}

Example

{
  "steps": [
    {
      "id": "step-1",
      "name": "LinkedIn invite",
      "type": "LINKEDIN",
      "linkedInType": "LINKEDIN_INVITATION_WITH_MESSAGE",
      "content": "Hi {{firstname}}, I came across your profile and wanted to connect.",
      "temporalityType": "ASAP",
      "contentSource": "manual"
    },
    {
      "id": "step-2",
      "name": "Email follow-up",
      "type": "EMAIL",
      "subject": "Quick follow-up",
      "content": "Hi {{firstname}}, would you be open to discussing the role?",
      "temporalityType": "DELAYED",
      "delay": { "value": 2, "unit": "day" },
      "policy": { "skipStepIfNoContact": true }
    }
  ]
}

Response

When success is true, data contains blueprintId, name, and sourcingId.

Errors

CodeHTTP
validation_error400
not_found404
internal_error500
curl -X PATCH https://app.kalent.ai/api/v1/sequence-blueprints/BLUEPRINT_ID \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"steps":[{"id":"step-1","name":"LinkedIn invite","type":"LINKEDIN","linkedInType":"LINKEDIN_INVITATION_WITH_MESSAGE","content":"Hi {{firstname}}, I wanted to connect.","temporalityType":"ASAP"}]}'