Skip to main content
POST
/
v1
/
sourcings
/
{sourcingId}
/
sequence-blueprints
Create sequence blueprint
curl --request POST \
  --url https://app.kalent.ai/api/v1/sourcings/{sourcingId}/sequence-blueprints \
  --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.
Creates a manual sequence blueprint attached to a sourcing in your workspace. You can create it empty and add steps later, or provide the full steps array immediately.

Path parameters

sourcingId
string
required
The sourcing id returned by Create sourcing.

Request body

name
string
required
Display name for the sequence blueprint.
steps
array
Optional ordered outreach steps. See Step format.
config
object
Optional sequence-level configuration.

Step format

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 creating the blueprint. Payloads containing bracket placeholders are rejected with validation_error.

Example with steps

{
  "name": "First outreach sequence",
  "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 — identifier for the created sequence blueprint
  • name — blueprint display name
  • sourcingId — sourcing the blueprint belongs to

Errors

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