Store a per-person value or file for a held message
set_lead_inputStore a value the customer supplies for one person, such as a link to a video they recorded, so a LinkedIn message, email, X DM or Instagram DM step declared with tool customer_input can send. Identify the person by exactly one of leadId, LinkedIn profile URL, email address or X handle. values maps the sequence's token names (for example video_url) to the customer's text; the key comes from the sequence, the customer never types it. One call fills every step of that person's sequence that uses the token and has not sent yet. A LinkedIn message, opted-in email or X DM step may instead ask for a file for each person (tool customer_input attachment, for example a personalised demo video). Limits are the providers': LinkedIn 15 MB per message together with the step's own files; email one document, image or MP4 up to 18 MB (1.5 MB from Microsoft mailboxes); X one image up to 5 MB, GIF up to 15 MB or MP4 video up to 50 MB and 140 seconds. Nothing is compressed: a larger file is refused with the limit and the way forward, which you relay as written (compress it and try again, or send a video link instead). A link to a video (Loom, YouTube, Drive) is a text value such as video_url, not a file. To send a file, call once with upload { key, fileName, size } to get a one-time uploadUrl, PUT the file's bytes there with the returned headers, then call again with files { key: uploadTicket }; if you cannot upload bytes yourself, give the customer the returned appUrl to add the file in the app instead. For several people at once (the customer has already decided which file is whose; do not second-guess their pairing), call with uploads [{ leadId or linkedinUrl or email or xUsername, key, fileName, size }] (up to 25, no top-level person) to get one uploadUrl and uploadTicket per person, PUT each file, then call with confirmUploads [uploadTicket, ...] to attach them all. Each person succeeds or is refused on their own with a reason; tickets last two hours and confirming one again is harmless, so a rerun only adds what is missing. Afterwards list_leads with sequenceId and personalFiles=true shows which file each person has. Nothing is sent in this call: the paced engine sends on its next run if the person is at that step, or when they reach it. A value or file for someone who already replied, finished, or already received that message is refused with nothing changed. The result includes how many people in that sequence are still waiting. Open world: the stored value releases a held message to that person, a third party.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| No | The person's email address, for someone reached by email. | ||
| files | No | The file slot's key mapped to the uploadTicket returned by a previous upload call, after the bytes were uploaded. | |
| leadId | No | ||
| upload | No | Ask for a one-time upload link for this person's file. Stores nothing. | |
| values | No | ||
| uploads | No | Several people's files at once: one upload link per person. Stores nothing. Use instead of a top-level person. | |
| requestId | Yes | Stable idempotency key; reuse it only to retry this exact request. | |
| xUsername | No | The person's X handle, with or without @, for someone reached on X. | |
| linkedinUrl | No | ||
| workspaceId | No | A teammate's workspace you may manage: an active workspace ID from list_team_workspaces. Omit for your own workspace. Supply on every call for a teammate. | |
| confirmUploads | No | The uploadTickets from an uploads call, after each file's bytes were PUT; attaches each to its person. Use instead of a top-level person. |