Approve Or Send LinkedIn Draft
Approve a LinkedIn draft by default, or force an immediate send for an already engaged conversation.
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>"
}
Runtime Command
linkedin.draft.approve is exposed through the shared SalesTouch runtime and stays available across API, CLI and MCP.
HTTP Reference
Use Authorization: Bearer <salestouch_api_key>.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://www.salestouch.io/api/v1/commands/string" \ -H "Content-Type: application/json" \ -d '{}'{
"ok": true,
"status": 0,
"data": {},
"error": {
"code": "string",
"message": "string"
},
"meta": {
"approval_required": true,
"approval_request_id": "string",
"command_hash": "string",
"warnings": [
"string"
]
}
}{
"ok": true,
"status": 0,
"data": {},
"error": {
"code": "string",
"message": "string"
},
"meta": {
"approval_required": true,
"approval_request_id": "string",
"command_hash": "string",
"warnings": [
"string"
]
}
}{
"error": {
"message": "string",
"code": "string"
}
}{
"error": {
"message": "string",
"code": "string"
}
}{
"ok": true,
"status": 0,
"data": {},
"error": {
"code": "string",
"message": "string"
},
"meta": {
"approval_required": true,
"approval_request_id": "string",
"command_hash": "string",
"warnings": [
"string"
]
}
}{
"ok": true,
"status": 0,
"data": {},
"error": {
"code": "string",
"message": "string"
},
"meta": {
"approval_required": true,
"approval_request_id": "string",
"command_hash": "string",
"warnings": [
"string"
]
}
}{
"ok": true,
"status": 0,
"data": {},
"error": {
"code": "string",
"message": "string"
},
"meta": {
"approval_required": true,
"approval_request_id": "string",
"command_hash": "string",
"warnings": [
"string"
]
}
}Schema Reference
Use Authorization: Bearer <salestouch_api_key>.
In: header
Path Parameters
Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://www.salestouch.io/api/v1/commands/string/schema"{
"data": {
"command": {
"command_id": "string",
"title": "string",
"description": "string",
"summary": "string",
"visibility": "public",
"risk": "read",
"category": "linkedin",
"default_permission": "allow",
"when_to_use": "string",
"risk_notes": [
"string"
],
"output_notes": [
"string"
],
"related_commands": [
"string"
],
"related_resources": [
"string"
],
"examples": [
{
"title": "string",
"language": "string",
"code": "string"
}
],
"input_schema": {},
"output_schema": {},
"approval_output_schema": {}
}
}
}{
"error": {
"message": "string",
"code": "string"
}
}{
"error": {
"message": "string",
"code": "string"
}
}{
"error": {
"message": "string",
"code": "string"
}
}