LinkedIn Prospecting Workflows
Recommended runtime primitives for LinkedIn prospecting on top of SalesTouch.
LinkedIn Prospecting Workflows
The useful LinkedIn prospecting loop in SalesTouch is:
- Find or import the right lead.
- Load the full prospect context.
- Review thread and relation state.
- Create a draft, then approve it or send it immediately in an existing conversation.
- Send an invitation only when the lead is not connected yet.
Context first
Load one lead with the commercial and activity context needed to decide the next prospecting action.
When to use
Use this when you already know the lead id or after a `lead.search` result selection. In `full`, it returns `prospect_context` by default.
Output notes
- Responses default to `full` mode through the public API and CLI.
- Use `compact` only when token savings matter more than prospecting quality. It can noticeably reduce prospecting quality.
Output schema
{
"type": "object",
"properties": {
"lead_id": {
"type": "string"
},
"lead": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"title": {
"type": "string"
},
"jobTitle": {
"type": "string"
},
"company": {
"type": "string"
},
"score": {
"type": "number"
},
"avatarUrl": {
"type": "string"
},
"linkedinUrl": {
"type": "string"
},
"linkedin_url": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"New",
"Waiting",
"Contacted",
"Replied",
"MeetingBooked",
"Interested",
"NotInterested",
"DoNotContact"
]
},
"lastInteraction": {
"type": "string"
},
"description": {
"type": "string"
},
"linkedinProfileEnriched": {
"type": "boolean"
},
"location": {
"type": "string"
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"timezone": {
"type": "string"
},
"companyWebsite": {
"type": "string"
},
"companyLogoUrl": {
"type": "string"
},
"companyLinkedinUrl": {
"type": "string"
},
"companyHeadline": {
"type": "string"
},
"personalWebsite": {
"type": "string"
},
"companyIndustry": {
"type": "string"
},
"companySize": {
"type": "string"
},
"experience": {
"type": "array",
"items": {
"type": "object",
"properties": {
"role": {
"type": "string"
},
"company": {
"type": "string"
},
"duration": {
"type": "string"
},
"description": {
"type": "string"
}
},
"required": [
"role",
"company",
"duration"
],
"additionalProperties": false
}
},
"education": {
"type": "array",
"items": {
"type": "object",
"properties": {
"school": {
"type": "string"
},
"degree": {
"type": "string"
},
"year": {
"type": "string"
}
},
"required": [
"school",
"degree",
"year"
],
"additionalProperties": false
}
},
"skills": {
"type": "array",
"items": {
"type": "string"
}
},
"recentPosts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"content": {
"type": "string"
},
"date": {
"type": "string"
},
"likes": {
"type": "number"
},
"comments": {
"type": "number"
},
"url": {
"type": "string"
}
},
"required": [
"content",
"date",
"likes"
],
"additionalProperties": false
}
},
"mission": {
"type": "string"
},
"missions": {
"type": "array",
"items": {
"type": "string"
}
},
"sentMessages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"content": {
"type": "string"
},
"channel": {
"type": "string",
"enum": [
"EMAIL",
"LINKEDIN"
]
},
"date": {
"type": "string"
},
"timestamp": {
"type": "string"
},
"senderName": {
"type": "string"
},
"isPending": {
"type": "boolean"
}
},
"required": [
"id",
"content",
"channel",
"date"
],
"additionalProperties": false
}
},
"receivedMessages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"content": {
"type": "string"
},
"channel": {
"type": "string",
"enum": [
"EMAIL",
"LINKEDIN"
]
},
"date": {
"type": "string"
},
"timestamp": {
"type": "string"
},
"senderName": {
"type": "string"
},
"isPending": {
"type": "boolean"
}
},
"required": [
"id",
"content",
"channel",
"date"
],
"additionalProperties": false
}
},
"addedDate": {
"type": "string"
},
"isFlagged": {
"type": "boolean"
}
},
"required": [
"id",
"name",
"title",
"company",
"score",
"avatarUrl",
"linkedinUrl",
"linkedin_url",
"status"
],
"additionalProperties": false
},
"latest_import": {
"anyOf": [
{
"type": "object",
"properties": {
"import_id": {
"type": "string"
},
"type": {
"type": "string"
},
"imported_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"context": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"description": "Arbitrary JSON value.",
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "array",
"items": {}
},
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"lead_import_metadata": {
"description": "Arbitrary JSON value.",
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "array",
"items": {}
},
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"lead_import_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"mission_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"import_id",
"type",
"imported_at",
"source_url",
"context",
"metadata",
"lead_import_metadata",
"lead_import_source",
"mission_id"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"import_context": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"context": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"description": "Arbitrary JSON value.",
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "array",
"items": {}
},
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"lead_import_metadata": {
"description": "Arbitrary JSON value.",
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "array",
"items": {}
},
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"lead_import_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"type",
"context",
"metadata",
"lead_import_metadata",
"lead_import_source"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"prospect_context": {
"anyOf": [
{
"type": "object",
"properties": {
"prospect": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"firstName": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"lastName": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"headline": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"jobTitle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"companyName": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string"
},
"score": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"linkedinUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"linkedin_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"linkedinId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"linkedinProviderId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"linkedinIsRelationship": {
"type": "boolean"
},
"lastActivityAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"lastContactAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"linkedinOwnerAccount": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string"
}
},
"required": [
"id",
"name",
"email",
"status"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"leadIdentityAliases": {
"type": "array",
"items": {
"type": "object",
"properties": {
"provider": {
"type": "string"
},
"type": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"provider",
"type",
"value"
],
"additionalProperties": false
}
},
"leadActivities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"occurredAt": {
"type": "string",
"format": "date-time"
}
},
"required": [
"id",
"type",
"title",
"description",
"occurredAt"
],
"additionalProperties": false
}
},
"linkedinRelations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"userProviderId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"userPublicIdentifier": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"userProfileUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"userFullName": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"acceptedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"userProviderId",
"userPublicIdentifier",
"userProfileUrl",
"userFullName",
"acceptedAt"
],
"additionalProperties": false
}
},
"linkedinConversations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string"
},
"lastMessageAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"participants": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"fullName": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"publicIdentifier": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"profileUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"isSelf": {
"type": "boolean"
}
},
"required": [
"id",
"fullName",
"publicIdentifier",
"profileUrl",
"isSelf"
],
"additionalProperties": false
}
},
"messages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"direction": {
"type": "string"
},
"state": {
"type": "string"
},
"bodyText": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sentAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"createdAt": {
"type": "string",
"format": "date-time"
}
},
"required": [
"id",
"direction",
"state",
"bodyText",
"sentAt",
"createdAt"
],
"additionalProperties": false
}
}
},
"required": [
"id",
"title",
"status",
"lastMessageAt",
"participants",
"messages"
],
"additionalProperties": false
}
},
"linkedinOutreachActions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string"
},
"status": {
"type": "string"
},
"bodyText": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"scheduledFor": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"sentAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"failureReason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"createdAt": {
"type": "string",
"format": "date-time"
}
},
"required": [
"id",
"type",
"status",
"bodyText",
"scheduledFor",
"sentAt",
"failureReason",
"createdAt"
],
"additionalProperties": false
}
}
},
"required": [
"id",
"firstName",
"lastName",
"email",
"headline",
"jobTitle",
"companyName",
"status",
"score",
"notes",
"linkedinUrl",
"linkedin_url",
"linkedinId",
"linkedinProviderId",
"linkedinIsRelationship",
"lastActivityAt",
"lastContactAt",
"linkedinOwnerAccount",
"leadIdentityAliases",
"leadActivities",
"linkedinRelations",
"linkedinConversations",
"linkedinOutreachActions"
],
"additionalProperties": false
},
"next_actions": {
"type": "array",
"items": {
"type": "string",
"enum": [
"reply_to_message",
"wait_for_invitation_acceptance",
"send_message",
"send_invitation"
]
}
}
},
"required": [
"prospect",
"next_actions"
],
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": [
"lead_id",
"lead",
"latest_import",
"import_context",
"prospect_context"
],
"additionalProperties": false
}
CLI
salestouch commands run lead.get --input-json '{"lead_id":"<string>","prospect_id":"<string>","email":"<string>"}' --json
Payload
{
"lead_id": "<string>",
"prospect_id": "<string>",
"email": "<string>"
}
Invitation flow
Queue or send a LinkedIn invitation through the shared prospecting runtime.
When to use
Use this when the prospect is not yet connected and the next best action is an invitation.
Risk notes
- This command requires approval-level permissions and creates outbound outreach state.
Output notes
- Responses default to `full` mode through the public API and CLI.
- Use `compact` only when token savings matter more than prospecting quality. It can noticeably reduce prospecting quality.
- Commands marked with `approval` risk currently execute directly. `approval_output_schema` is retained for compatibility.
Output schema
{
"type": "object",
"properties": {
"sent": {
"type": "boolean"
},
"action": {
"type": "string",
"const": "linkedin.invitation.send"
},
"lead_id": {
"type": "string"
},
"account_id": {
"type": "string"
},
"result": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"outreach_action_id": {
"type": "string"
},
"scheduled_for": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"required": [
"status",
"outreach_action_id",
"scheduled_for"
],
"additionalProperties": false
},
"assistant_message": {
"type": "string"
}
},
"required": [
"sent",
"action",
"account_id",
"result",
"assistant_message"
],
"additionalProperties": false
}
Approval output schema
{
"type": "object",
"properties": {
"approval_required": {
"const": true
},
"action": {
"type": "string",
"const": "linkedin.invitation.send"
},
"account_id": {
"type": "string"
},
"lead_id": {
"type": "string"
},
"recipient_id": {
"type": "string"
},
"scheduled_for": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"message_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"approval_required",
"action",
"account_id",
"recipient_id",
"scheduled_for",
"message_text"
],
"additionalProperties": false
}
CLI
salestouch commands run linkedin.invitation.send --input-json '{"lead_id":"<string>","prospect_id":"<string>","email":"<string>"}' --json
Payload
{
"lead_id": "<string>",
"prospect_id": "<string>",
"email": "<string>"
}
Message flow
Generate a LinkedIn draft with up to three candidate message variations.
When to use
Use this when you have enough lead context to draft outreach but still want a reviewable draft before anything is approved or sent.
Output notes
- Responses default to `full` mode through the public API and CLI.
- Use `compact` only when token savings matter more than prospecting quality. It can noticeably reduce prospecting quality.
Output schema
{
"type": "object",
"properties": {
"draft": {
"type": "object",
"properties": {
"draft_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"PENDING_REVIEW",
"READY_TO_SEND",
"DISPATCHED",
"CANCELLED"
]
},
"channel": {
"type": "string",
"enum": [
"LINKEDIN"
]
},
"dispatched_queue_item_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"dispatched_message_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"dispatched_external_message_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"selected_variation_index": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"selected_body_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"approved_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"cancelled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"dispatched_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"created_by_user_id": {
"type": "string"
},
"created_by_actor_kind": {
"type": "string",
"enum": [
"USER",
"AI_AGENT"
]
},
"approved_by_user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"approved_by_actor_kind": {
"anyOf": [
{
"type": "string",
"enum": [
"USER",
"AI_AGENT"
]
},
{
"type": "null"
}
]
},
"lead": {
"type": "object",
"properties": {
"lead_id": {
"type": "string"
},
"name": {
"type": "string"
},
"company_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"job_title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"linkedin_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"lead_id",
"name",
"company_name",
"job_title",
"linkedin_url"
],
"additionalProperties": false
},
"agent": {
"type": "object",
"properties": {
"agent_id": {
"type": "string"
},
"handle": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"agent_id",
"handle",
"name"
],
"additionalProperties": false
},
"mission": {
"anyOf": [
{
"type": "object",
"properties": {
"mission_id": {
"type": "string"
},
"handle": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"mission_id",
"handle",
"name"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"variations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"position": {
"type": "integer"
},
"body_text": {
"type": "string"
}
},
"required": [
"position",
"body_text"
],
"additionalProperties": false
}
}
},
"required": [
"draft_id",
"status",
"channel",
"dispatched_queue_item_id",
"dispatched_message_id",
"dispatched_external_message_id",
"selected_variation_index",
"selected_body_text",
"approved_at",
"cancelled_at",
"dispatched_at",
"created_at",
"updated_at",
"created_by_user_id",
"created_by_actor_kind",
"approved_by_user_id",
"approved_by_actor_kind",
"lead",
"agent",
"mission",
"variations"
],
"additionalProperties": false
}
},
"required": [
"draft"
],
"additionalProperties": false
}
CLI
salestouch commands run linkedin.draft.create --input-json '{"variations":[]}' --json
Payload
{
"variations": []
}
Approve a LinkedIn draft by default, or force an immediate send for an already engaged conversation.
When to use
Use this after `linkedin.draft.create` to select the final variation, and reserve `send_now=true` for leads whose existing LinkedIn conversation has already been synced.
Risk notes
- This command mutates outbound draft state and can send immediately when `send_now=true`.
Output notes
- Default behavior is approval-only and returns `mode=approved` with `dispatch_result=null`.
- `send_now=true` bypasses LinkedIn usage limits and should only be used for existing conversations when the time savings justify the risk.
- Responses default to `full` mode through the public API and CLI.
- Use `compact` only when token savings matter more than prospecting quality. It can noticeably reduce prospecting quality.
Output schema
{
"type": "object",
"properties": {
"draft": {
"type": "object",
"properties": {
"draft_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"PENDING_REVIEW",
"READY_TO_SEND",
"DISPATCHED",
"CANCELLED"
]
},
"channel": {
"type": "string",
"enum": [
"LINKEDIN"
]
},
"dispatched_queue_item_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"dispatched_message_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"dispatched_external_message_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"selected_variation_index": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"selected_body_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"approved_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"cancelled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"dispatched_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"created_by_user_id": {
"type": "string"
},
"created_by_actor_kind": {
"type": "string",
"enum": [
"USER",
"AI_AGENT"
]
},
"approved_by_user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"approved_by_actor_kind": {
"anyOf": [
{
"type": "string",
"enum": [
"USER",
"AI_AGENT"
]
},
{
"type": "null"
}
]
},
"lead": {
"type": "object",
"properties": {
"lead_id": {
"type": "string"
},
"name": {
"type": "string"
},
"company_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"job_title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"linkedin_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"lead_id",
"name",
"company_name",
"job_title",
"linkedin_url"
],
"additionalProperties": false
},
"agent": {
"type": "object",
"properties": {
"agent_id": {
"type": "string"
},
"handle": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"agent_id",
"handle",
"name"
],
"additionalProperties": false
},
"mission": {
"anyOf": [
{
"type": "object",
"properties": {
"mission_id": {
"type": "string"
},
"handle": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"mission_id",
"handle",
"name"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"variations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"position": {
"type": "integer"
},
"body_text": {
"type": "string"
}
},
"required": [
"position",
"body_text"
],
"additionalProperties": false
}
}
},
"required": [
"draft_id",
"status",
"channel",
"dispatched_queue_item_id",
"dispatched_message_id",
"dispatched_external_message_id",
"selected_variation_index",
"selected_body_text",
"approved_at",
"cancelled_at",
"dispatched_at",
"created_at",
"updated_at",
"created_by_user_id",
"created_by_actor_kind",
"approved_by_user_id",
"approved_by_actor_kind",
"lead",
"agent",
"mission",
"variations"
],
"additionalProperties": false
},
"dispatch_result": {
"anyOf": [
{
"oneOf": [
{
"type": "object",
"properties": {
"status": {
"const": "sent"
},
"messageId": {
"type": "string"
},
"externalMessageId": {
"type": "string"
}
},
"required": [
"status"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"const": "queued"
},
"queueId": {
"type": "string"
}
},
"required": [
"status",
"queueId"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"const": "waiting_relation"
},
"messageQueueId": {
"type": "string"
}
},
"required": [
"status",
"messageQueueId"
],
"additionalProperties": false
}
]
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"enum": [
"approved",
"sent"
]
}
},
"required": [
"draft",
"dispatch_result",
"mode"
],
"additionalProperties": false
}
CLI
salestouch commands run linkedin.draft.approve --input-json '{"draft_id":"<string>"}' --json
Payload
{
"draft_id": "<string>"
}