{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Campaign title"
},
"agent_id": {
"type": "string",
"description": "The agent ID to use for calls, e.g. agent_abc123"
},
"agent_version_number": {
"type": "string",
"description": "The specific PUBLISHED agent version whose bound phone number will be used to dial — a draft version is rejected. Get this from get_agent or list_agent_versions."
},
"file_name": {
"type": "string",
"description": "File name with extension, e.g. leads.csv or leads.xlsx. Required with file_text/file_base64; taken from the upload otherwise."
},
"file_text": {
"type": "string",
"description": "Only for rows the user TYPED into the conversation, or a small CSV/text file (under ~50 KB) you were given as a path and can read. Plain text, header row first. Not for a file the user attached in the chat: pass that as `file`."
},
"file_base64": {
"type": "string",
"description": "Only for a small .xlsx (under ~50 KB) given to you as a path on disk. NEVER base64-encode a file the user attached in the chat (pass it as `file`) and never encode anything larger (use create_upload_url)."
},
"upload_id": {
"type": "string",
"description": "Only for a file on a disk YOU control that is too large for file_text (over ~50 KB): call create_upload_url with reveal_url: true, PUT the bytes yourself from a machine with open internet access, then pass the upload_id here. Never for a file the user attached in the chat (pass it as `file`), and never from a hosted chat sandbox such as ChatGPT code interpreter, which cannot reach the storage host."
},
"file": {
"type": "object",
"properties": {
"file_id": {
"type": "string",
"description": "Host-side file id"
},
"download_url": {
"type": "string",
"description": "Short-lived signed URL the host provides for the attached file"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"size": {
"type": "number"
}
},
"required": [
"file_id",
"download_url"
],
"additionalProperties": false,
"description": "ALWAYS use this when the user attached a file in the chat: pass the attached file here and the host turns it into a download link for the server. Fastest path, any size. NEVER open, convert or base64-encode an attached file yourself."
},
"starts_at": {
"type": "string",
"description": "ISO 8601 datetime to start calling; omit to start immediately"
},
"calling_hours_start": {
"type": "string",
"description": "HH:mm — earliest time of day to call"
},
"calling_hours_end": {
"type": "string",
"description": "HH:mm — latest time of day to call"
},
"confirm": {
"type": "boolean",
"description": "Must be true. Set this only after the user has explicitly approved starting this specific batch call."
}
},
"required": [
"title",
"agent_id",
"agent_version_number",
"confirm"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}