{"openapi":"3.0.0","info":{"title":"Voice Logica API","version":"1.0.0","description":"Voice Logica API Reference\n\n## 📚 Documentation\n\nFor comprehensive guides, tutorials, and support documentation, visit [docs.voicelogica.ai](https://docs.voicelogica.ai)\n\n## Authentication\n\nAll API requests require authentication via the `x-api-key` header.\n\n## Reseller Support\n\nIf you are a reseller managing multiple companies, you can use the optional `x-company-id` header to specify which of your subsidiary companies the API request should operate on. When provided, the API will validate that your API key has access to the specified company and execute the request on behalf of that company.\n\n**Example:**\n- Without `x-company-id`: Request operates on your primary company (the company linked with your API key)\n- With `x-company-id`: Request operates on the specified subsidiary company (must be a company under your reseller account)"},"servers":[{"url":"https://api.voicelogica.ai"}],"tags":[{"name":"Phones - Calls"},{"name":"Phones - Sip Trunks"},{"name":"Agentic - Agents"},{"name":"Agentic - Campaigns"},{"name":"Agentic - Campaign Leads"},{"name":"Agentic - Campaign Results"},{"name":"Agentic - Work Flows"},{"name":"Mcp-settings"},{"name":"Mcp-connections"},{"name":"Mcp-connections - Authorize"},{"name":"Mcp-connections - List Tools"},{"name":"SMS"}],"components":{"schemas":{},"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your API key for authentication. Required for all protected endpoints."}}},"paths":{"/api/v1/phones/calls/initiate-call":{"post":{"summary":"Initiate an outbound call with AI agent","description":"Initiate an outbound call from your AI agent to a destination number. The AI agent will handle the conversation according to its configured system prompt and capabilities.\n\n**Required Fields:**\n- `destinationNumber`: Phone number to call in E.164 format (e.g., +306912345678)\n- `agentId`: ID of the AI agent that will handle the call\n- `sipTrunkId`: SIP trunk to dial out from (get from POST /phones/sip-trunks/query)\n\n**Optional Features:**\n- `contextForAi`: Additional context appended to the agent's system prompt for this specific call (e.g., customer details, call purpose)\n- `dynamicVariables`: Key-value pairs accessible to the agent during the call (e.g., customer name, order ID)\n- `callerId`: Override the caller ID shown to the recipient\n- `scheduledAt`: Schedule the call for a future date/time instead of immediate execution\n- `maxRetries`: Total dial attempts including the first call (0-3, default: 3). 0 or 1 = no automatic retries\n- `retryDelayMinutes`: Minutes between those calls (30-1440, default 30). A retry follows a busy line, no answer, voicemail or a failed call\n\n**Protection Settings:**\n- `useAntiHarassmentProtection`: (default: true) Prevents excessive outbound calling with daily limits and cooldown periods. Set false to skip.\n- `overrideTimeRestriction`: (default: false) Bypass 9 AM - 9 PM local time restrictions\n- `overrideDayRestriction`: (default: false) Bypass weekend/holiday restrictions\n\n**Response:**\n- `callId`: Unique identifier for tracking this call\n- `scheduled`: True if call was scheduled for later due to time restrictions\n- `scheduleTime`: The date/time when the call is scheduled (if scheduled)\n- `error`: Error code if call initiation failed\n- `reason`: Human-readable message explaining the error or scheduling reason\n\n**HTTP Status Codes:**\n- `200 OK`: Call initiated successfully or scheduled for later\n- `400 Bad Request`: Validation errors (fix the request)\n- `402 Payment Required`: Billing/subscription issues (upgrade plan or add credits)\n- `403 Forbidden`: `callee_opted_out` - permanent, never retry\n- `409 Conflict`: `call_already_in_progress` - a call to this number is already live or scheduled\n- `429 Too Many Requests`: anti-harassment limits - retry after `Retry-After`\n- `500 Internal Server Error`: Server-side issues (retry later or contact support)\n\n**Refusals and retry semantics:** every refusal has `details.retryable`. When it is true, `details.retryAfterSeconds` (also sent as the `Retry-After` header) and usually `details.nextAllowedAt` say when a retry can succeed. Do not retry sooner, and never retry when `retryable` is false: re-submitting the same call in a loop only repeats the refusal.\n- `callee_opted_out` (403) - The callee asked to never be called again. Permanent (`retryable: false`, `permanent: true`): remove the number from your list.\n- `call_already_in_progress` (409) - Only one outbound call per number at a time. `details.liveCallId` / `liveCallStatus` identify the call that is already live or scheduled: follow that call instead of re-submitting. When it is scheduled (`alreadyScheduled: true`, `scheduledAt`, `retryable: false`) your request is already covered: mark the number as done on your side, because that call is placed automatically and any re-submission is refused again. Also returned for an identical request (same number + agent) within 60s.\n- `daily_call_limit_reached` (429) - Anti-harassment: max 3 outbound calls per number per day. `nextAllowedAt` is the start of the next day (UTC).\n- `failed_call_limit_reached` (429) - Max 3 failed attempts per number per day. Retry the next day.\n- `cooldown_period_active` (429) - Anti-harassment: 1 hour between connected outbound calls to the same number. `nextAllowedAt` is the last call + 1 hour.\n\n**Validation (400 - fix the request):**\n- `agent_not_found` - Invalid agent ID. Check agent exists and is accessible.\n- SIP trunk not found or offline. Check `sipTrunkId` and trunk status.\n- `distributor_not_found` - Configuration issue. Contact support.\n\n**Billing Issues (402 - Upgrade plan or add credits):**\n- `insufficient_credits` - No credits/minutes in plan. Add credits or upgrade.\n- `no_seconds_available` - No seconds remaining. Upgrade plan.\n- `no_channels_available` - Channel limit reached in plan. Upgrade plan.\n- `no_concurrent_calls_available` - All concurrent slots in use. Upgrade plan or wait.\n\n**Server Issues (500 - Retry or contact support):**\n- `internal_error` - Unexpected server error. Retry or contact support.\n- `server_unavailable` - Calls server unavailable. Retry in a few minutes.\n\n**Note:** All error responses include both `error` (code) and `reason` (detailed message) fields.\n\n**For detailed examples and use cases, see:** https://docs.voicelogica.ai/outbound-calls/api","responses":{"200":{"description":"Call initiated successfully or scheduled","content":{"application/json":{"schema":{"type":"object","properties":{"callId":{"type":"string","description":"Call identifier if call was initiated successfully"},"scheduled":{"type":"boolean","description":"Whether the call was scheduled for later due to time/day restrictions"},"scheduleTime":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"reason":{"type":"string","description":"Explanation for scheduling. Only present when call is scheduled, explains why it was scheduled (e.g., \"scheduled due to time restrictions\")."}},"description":"Successful call initiation response (200 OK)","example":{"callId":"call_123456789"}}}}},"400":{"description":"Bad Request - Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["agent_not_found","voip_phone_not_found","distributor_not_found","call_already_scheduled","failed_to_schedule_call","yuboto_allowed_dialer_not_found","maximum_authentication_attempts_exceeded","contact_not_found"],"description":"Error code indicating a validation or business rule violation. Fix the request before retrying."},"reason":{"type":"string","description":"Human-readable error message explaining what went wrong and suggested action"}},"required":["error","reason"],"description":"Bad Request Error Response (400) - Validation errors. Fix the request before retrying.","example":{"error":"agent_not_found","reason":"Agent not found"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"402":{"description":"Payment Required - Insufficient credits, minutes, or channels","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["insufficient_credits","no_seconds_available","no_channels_available","no_concurrent_calls_available","no_available_channels"],"description":"Error code indicating billing or subscription limitation. Action required: Upgrade plan or add credits."},"reason":{"type":"string","description":"Human-readable error message explaining the billing/subscription issue and how to resolve it"}},"required":["error","reason"],"description":"Payment Required Error Response (402) - Billing/subscription limitations. Upgrade plan, add credits, or wait for concurrent slots.","example":{"error":"insufficient_credits","reason":"No available minutes or credits in plan."}}}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"409":{"description":"Conflict - call_already_in_progress: a call to this number is already live or scheduled (details.liveCallId)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["callee_opted_out","call_already_in_progress","daily_call_limit_reached","failed_call_limit_reached","cooldown_period_active"],"description":"Why the call was refused. callee_opted_out (403) is permanent: drop the number. call_already_in_progress (409): a call to this number is already live or scheduled. daily_call_limit_reached / failed_call_limit_reached / cooldown_period_active (429): anti-harassment protection, retry after details.retryAfterSeconds."},"reason":{"type":"string","description":"Human-readable explanation, including when the next call is allowed"},"httpStatus":{"type":"number"},"details":{"type":"object","properties":{"retryable":{"type":"boolean","description":"false = never retry this request (callee_opted_out, or a call to this number is already scheduled); true = retry after retryAfterSeconds"},"alreadyScheduled":{"type":"boolean","description":"call_already_in_progress: true when a call to this number is already scheduled. Your request is covered: treat it as done and do not re-submit"},"retryAfterSeconds":{"type":"number","description":"Seconds to wait before retrying. Also sent as the Retry-After header"},"nextAllowedAt":{"type":"string","description":"ISO-8601 time from which a call to this number is accepted again"},"permanent":{"type":"boolean","description":"callee_opted_out only: true when the opt-out never expires"},"blockedUntil":{"type":"string","description":"callee_opted_out only: end of a plan block period, when one applies"},"liveCallId":{"type":"string","description":"call_already_in_progress: callId of the call that is already live or scheduled — follow it instead of re-submitting"},"liveCallMongoId":{"type":"string"},"liveCallStatus":{"type":"string","description":"call_already_in_progress: status of that call (trying, ringing, in_call, scheduled, …)"},"scheduledAt":{"type":"string","description":"call_already_in_progress: when the already-scheduled call will be placed"}},"required":["retryable"]}},"required":["error","reason","httpStatus"],"description":"Call refused (403 / 409 / 429). Check details.retryable before retrying; never retry callee_opted_out.","example":{"error":"cooldown_period_active","reason":"Cooldown active: +306912345678 was last called at 2026-10-09T08:12:00.000Z. At least 1 hour must pass between outbound calls to the same number (anti-harassment protection). Next call allowed after 2026-10-09T09:12:00.000Z.","httpStatus":429,"details":{"retryable":true,"retryAfterSeconds":2460,"nextAllowedAt":"2026-10-09T09:12:00.000Z","lastCallAt":"2026-10-09T08:12:00.000Z"}}}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sipTrunkId":{"type":"string","description":"SIP trunk to dial out from. Get this from POST /phones/sip-trunks/query."},"callerId":{"type":"string","description":"The phone number or SIP URI shown to the recipient as the caller. When set, this overrides the SIP trunk default caller ID. Use a full E.164 phone number (e.g. \"+302101234567\") or a SIP identity (e.g. \"sip:user@domain.com\"). If omitted, the trunk's own caller ID is used."},"outBoundCallerIdPrefix":{"type":"string","description":"Outbound caller ID prefix — determines which phone number we dial out from"},"destinationNumber":{"type":"string","description":"Destination phone number"},"isInternalCall":{"type":"boolean","description":"Whether this is an internal call to an extension (no AI agent needed)"},"agentId":{"type":"string","description":"Agent identifier. Required for outbound AI calls, optional for internal extension calls."},"contextForAi":{"type":"string","maxLength":12000,"description":"Additional context information for the AI agent. This text will be appended to the agent's system prompt for this specific call. Typically contains information about the client/customer, their situation, history, preferences, or any relevant details that will help the AI agent personalize the conversation. Example: \"Customer John Doe has an outstanding invoice of $500 from last month. He previously mentioned preferring payment via bank transfer.\""},"emailAddress":{"type":"string","description":"Email address"},"dynamicVariables":{"type":"object","additionalProperties":{"type":"string"},"description":"Dynamic variables for the call"},"superVariables":{"type":"object","additionalProperties":{"type":"object","properties":{"placeholder":{"type":"string","description":"Placeholder text to be replaced"},"value":{"type":"string","description":"Value to replace the placeholder"},"type":{"type":"string","enum":["text","number","boolean","date","time"],"description":"Type of the variable"}},"required":["placeholder","value"],"description":"Schema for super variable","example":{"placeholder":"{{customer_name}}","value":"John Doe","type":"text"}},"description":"Super variables for the call"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional metadata"},"overrideTimeRestriction":{"type":"boolean","description":"Whether to override time restrictions. Time restrictions block calls between 21:00-09:00 local time in the destination country. Set to true to bypass these restrictions."},"overrideDayRestriction":{"type":"boolean","description":"Whether to override day restrictions. Day restrictions may block calls on weekends or specific days based on the destination country regulations. Set to true to bypass these restrictions."},"useAntiHarassmentProtection":{"type":"boolean","description":"Whether to use anti-harassment protections. When enabled (default), enforces: (1) Max 3 successful outbound calls per number per day, (2) Max 3 failed outbound calls per number per day, (3) 1-hour cooldown between successful outbound calls, (4) No duplicate active/scheduled outbound calls. Inbound calls do not count. Numbers in campaign allowlist bypass all protections. Set to false to disable these protections."},"isWelcomeMessageAIGenerated":{"type":"boolean","description":"Whether to use AI generated welcome message"},"scheduledAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"retryDelayMinutes":{"type":"number","minimum":30,"maximum":1440,"description":"Delay between retry attempts in minutes (minimum 30, maximum 1440, default 30). Works in conjunction with maxRetries. If the call fails (busy, missed, voicemail, no answer), the system will wait this many minutes before the next retry attempt. Example: 120 minutes = 2 hours between retries. Default behavior applies if not specified."},"maxRetries":{"type":"number","minimum":0,"maximum":3,"default":3,"description":"Maximum number of dial attempts in total, including the first call (0–3, default 3). If the call fails (recipient busy, voicemail, no answer, missed), the system dials again until this many attempts were made. Each retry is delayed by retryDelayMinutes. Example: maxRetries=3 means the first call plus up to 2 retries. 0 or 1 means no automatic retries: send it when your own system handles retries. A callback the recipient asks for during the call is still scheduled."},"additionalPhoneNumbers":{"oneOf":[{"oneOf":[{"type":"string"},{"type":"number"}]},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}}],"description":"Additional phone numbers to call. Accepts a number, a string, or an array. Values may be comma- or space-separated; non-digit characters are stripped automatically."}},"required":["sipTrunkId","destinationNumber","additionalPhoneNumbers"],"description":"Schema for API call request","example":{"sipTrunkId":"your_sip_trunk_id","destinationNumber":"+302103009090","agentId":"your_agent_id","contextForAi":"Customer John Doe has an outstanding invoice from last month","dynamicVariables":{"customer_name":"John Doe","order_id":"ORD123"},"overrideTimeRestriction":true,"overrideDayRestriction":true,"retryDelayMinutes":120,"maxRetries":3}},"example":{"sipTrunkId":"your_sip_trunk_id","destinationNumber":"+302103009090","agentId":"your_agent_id","contextForAi":"Customer John Doe has an outstanding invoice from last month","dynamicVariables":{"customer_name":"John Doe","order_id":"ORD123"},"overrideTimeRestriction":true,"overrideDayRestriction":true,"retryDelayMinutes":120,"maxRetries":3}}}},"security":[{"apiKey":[]}],"tags":["Phones - Calls"]}},"/api/v1/phones/calls/{id}":{"get":{"summary":"Get a single call by ID (the call record: details, recording, transcript, AI analysis).","description":"Retrieve complete information about a specific call including recordings, transcriptions, AI analysis, and all metadata.\n\n**Response Includes:**\n- Call status and timestamps (start, end, duration)\n- Phone numbers (source and destination)\n- Agent or user who handled the call\n- Recording URL and transcription text\n- AI-generated summary and analysis\n- Dynamic variables used during the call\n- Call direction (inbound/outbound)\n- Campaign information (if applicable)\n- Transfer history (if call was transferred)\n- Retry information (for failed calls)\n\n**Use Cases:**\n- Review call details and conversation flow\n- Access call recording and transcription\n- Analyze AI agent performance\n- Audit call handling for quality assurance\n- Debug failed or problematic calls","responses":{"200":{"description":"Call retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"callId":{"type":"string","description":"Call identifier"},"callerId":{"type":"string","description":"Caller identifier"},"contactId":{"type":"string","description":"Contact identifier"},"userId":{"type":"string","description":"User identifier"},"userName":{"type":"string","description":"Display name of userId — stamped on list responses so grids need no second lookup"},"voipPhoneId":{"type":"string","description":"VoIP phone identifier"},"sipTrunkId":{"type":"string","description":"SIP trunk identifier (for trunk-routed calls)"},"agentId":{"type":"string","description":"Agent identifier"},"agentVersionId":{"type":"string","description":"Agent version/staging snapshot used for this call"},"agentVersionNumber":{"type":"number","description":"Version number dialed (0 = staging); omitted for prod"},"agentVersionKind":{"type":"string","enum":["prod","staging","version"],"description":"prod, or a named version"},"agentVersionDescription":{"type":"string","description":"Version name shown on the call when not Prod"},"phoneNumber":{"type":"string","description":"Phone number"},"status":{"type":"string","enum":["failed","cancelled","answered_elsewhere","transferring","transferred","failed_during_call","to_be_processed","trying","ringing","busy","missed","in_call","answered","voice_mail","session_progress","scheduled"],"description":"Call status"},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["Agent","User","Contact","Tool","System"],"description":"Role of the message sender"},"toolCallId":{"type":"string","nullable":true,"description":"Tool call identifier if applicable"},"content":{"type":"string","description":"Message content"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp when message was sent"},"seconds":{"type":"number","description":"Duration in seconds"},"agentId":{"type":"string","nullable":true,"description":"Agent identifier if applicable"},"contactId":{"type":"string","nullable":true,"description":"Contact identifier if applicable"},"userId":{"type":"string","nullable":true,"description":"User identifier if applicable"},"completionTurnMs":{"type":"number","description":"Completion turn time in milliseconds"},"voiceTurnMs":{"type":"number","description":"Voice turn time in milliseconds"},"totalTurnMs":{"type":"number","description":"Total turn time in milliseconds"},"speakerId":{"type":"number","description":"Speaker identifier"},"participantLabel":{"type":"string","description":"Label of the participant (e.g. \"Caller: 6982364479\", \"Transfer: 2103009090\")"},"translatedContent":{"type":"string","description":"Live-translated version of `content`, when live translation was active for this turn."},"originalLanguage":{"type":"string","description":"Detected spoken language of `content` (ISO 639-1, e.g. \"de\")."},"translatedLanguage":{"type":"string","description":"Target language of `translatedContent` (ISO 639-1, e.g. \"el\")."}},"required":["role","content","timestamp","seconds"],"description":"Schema for call message","example":{"role":"Agent","toolCallId":"tool_call_123","agentId":"agent_456","contactId":"contact_789","userId":"user_101","content":"Hello, how can I help you today?","timestamp":"2024-01-15T10:30:00.000Z","seconds":30,"completionTurnMs":1500,"voiceTurnMs":2000,"totalTurnMs":3500,"speakerId":1}},"description":"Call messages. Empty when recordingEnabled is false — the verbatim transcript is withheld by policy for calls made with recording disabled."},"recordingEnabled":{"type":"boolean","description":"Whether recording was enabled by policy when the call ran. false → messages/aiDialogue/transcription files are withheld (summary and post-analysis remain); absent on older calls (treated as recorded)."},"recordingFileId":{"type":"string","description":"Recording file identifier"},"humanRecordingFileId":{"type":"string","description":"Human recording file identifier"},"originalRecordingFileId":{"type":"string","description":"Original (untranslated) recording file identifier, present when live translation was active"},"transcriptionFileId":{"type":"string","description":"Transcription file identifier"},"humanTranscriptionFileId":{"type":"string","description":"Human transcription file identifier"},"endCallReason":{"type":"string","enum":["caller_hungup","user_hungup","caller_voice_mail","caller_does_not_exist","wrong_set_number","call_maximum_time_reached","caller_unresponsive_after_nudges","call_transferred","caller_busy","caller_declined","no_channels","unavailable","voip_phone_offline","voip_phone_service_failed","no_agent_id","phone_number_not_found","agent_not_found","no_remote_rtp_address","no_selected_codec","no_remote_rtp_port","voip_provider_issue","inbound_calls_blocked","no_rtp_stream","no_pickup_after_ringing_max_seconds","sdp_error","not_acceptable_here","voip_temporary_issue","voip_phone_not_exist","caller_does_not_speak","message_left","no_channels_available_in_plan","forbidden","failed_to_connect","call_stuck","no_seconds_available_in_plan","maximum_time","subscription_issue","incorect_code","transfer_request_true","transfer_request_false","no_voip_connection","insufficient_balance_in_voip_provider","caller_called_back","campaign_not_active","outside_campaign_schedule","agent_handoff","off_hours_welcome_message","answered_elsewhere"],"description":"End call reason"},"sipFailure":{"type":"object","properties":{"code":{"type":"number","description":"SIP status code of the final INVITE response"},"reason":{"type":"string","description":"SIP reason phrase as the carrier sent it"},"warning":{"type":"string","description":"SIP Warning header"},"q850":{"type":"number","description":"Q.850 cause from the Reason header"},"kind":{"type":"string","enum":["number_not_in_service","invalid_number","rejected","barred","phone_unreachable","network_busy","no_credit"],"description":"Plain-language category for the user"}},"required":["code"],"description":"What the carrier said when it refused the call (failed calls only)"},"duration":{"type":"number","description":"Call duration in seconds"},"hertz":{"type":"number","description":"Audio frequency in hertz"},"humanInCall":{"type":"boolean","description":"Whether human is in call"},"summary":{"type":"string","description":"Call summary"},"shortSummary":{"type":"string","description":"One-line summary for call cards"},"callDirection":{"type":"string","enum":["inbound","outbound"],"description":"Call direction"},"voiceCost":{"type":"object","properties":{"cost":{"type":"number","description":"Current cost"},"savedCost":{"type":"number","description":"Saved cost"},"totalCost":{"type":"number","description":"Total cost"},"characters":{"type":"number","description":"Number of characters"},"charactersSaved":{"type":"number","description":"Number of characters saved"},"totalCharacters":{"type":"number","description":"Total number of characters"}},"required":["cost","savedCost","totalCost","characters","charactersSaved","totalCharacters"],"description":"Schema for call voice cost information","example":{"cost":0.05,"savedCost":0.02,"totalCost":0.07,"characters":150,"charactersSaved":50,"totalCharacters":200}},"transcriptionCost":{"type":"number","description":"Transcription cost"},"completionCost":{"type":"object","properties":{"inputTokens":{"type":"number","description":"Number of input tokens"},"cachedInputTokens":{"type":"number","description":"Number of cached input tokens (served from prompt cache)"},"cacheWriteTokens":{"type":"number","description":"Input tokens written to the provider prompt cache (billed at a premium on GPT-5.6+)"},"outputTokens":{"type":"number","description":"Number of output tokens"},"reasoningTokens":{"type":"number","description":"Number of reasoning tokens (for reasoning models like o1, o3, gpt-5)"},"totalTokens":{"type":"number","description":"Total number of tokens"},"inputCost":{"type":"number","description":"Input cost"},"cachedInputCost":{"type":"number","description":"Cached input cost (typically 90% cheaper than regular input)"},"completionCost":{"type":"number","description":"Completion cost"},"reasoningCost":{"type":"number","description":"Reasoning tokens cost (billed as output tokens)"},"totalCost":{"type":"number","description":"Total cost"},"callCompletionCost":{"type":"number","description":"Call completion cost"},"analysisCompletionCost":{"type":"number","description":"Analysis completion cost"},"speculative":{"type":"boolean","description":"This request was a speculative pre-<end> fire (tag rides through to ModelUsage)"}},"required":["inputTokens","outputTokens","totalTokens","inputCost","completionCost","totalCost"],"description":"Schema for call completion cost information","example":{"inputTokens":100,"cachedInputTokens":50,"outputTokens":50,"reasoningTokens":10,"totalTokens":210,"inputCost":0.02,"cachedInputCost":0.001,"completionCost":0.01,"reasoningCost":0.002,"totalCost":0.033}},"totalCost":{"type":"number","description":"Total cost"},"consumerCost":{"type":"number","description":"Total Cost of the Call for the Consumer"},"dynamicVariables":{"type":"object","additionalProperties":{"type":"string"},"description":"Dynamic variables"},"source":{"type":"string","enum":["app","api","web","mcp","phone","mobile","mobile-bridge","scheduled","waitlist","campaign","workflow","recording","transfer","google-meet","meeting","whatsapp","viber","telegram","instagram","instagram_comment","messenger","messenger_comment","email","vicidial-seat","campaign-seat","vicidial","phone-verification"],"description":"Source of the call"},"mobileTransferKind":{"type":"string","enum":["pin_bridge","busy_forward","callback","no_answer_forward"],"description":"Mobile transfer mode: pin_bridge or busy_forward"},"mobileUserId":{"type":"string","description":"Mobile seat user id for PIN bridge / busy-forward"},"mobileTransferAiFallback":{"type":"boolean","description":"Busy-forward fell back to AI for the waiting caller"},"mobileTransferAiFallbackReason":{"type":"string","description":"Why busy-forward fell back to AI"},"messageOnly":{"type":"boolean","description":"Personal assistant with no voice minutes: welcome message, then recorded the caller only (analysis minutes)"},"mobileBridgeNoDestLeg":{"type":"boolean","description":"Hidden bridge leg whose transfer never produced a destination leg — kept visible so the call is not lost from the grid"},"participants":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ai","trunk","softphone","app","transfer","meet"],"description":"Legacy transport-flavoured type. New writers populate `role` + `deviceKind` instead."},"role":{"type":"string","enum":["Agent","User","Contact"],"description":"Conversational role β€” Agent (AI), User (VL user being reached on a device), or Contact (external CRM contact). Mirrors `CallMessage.role`. The carrier/trunk is transport, not a participant."},"status":{"type":"string","enum":["invited","ringing","joined","left","no_answer","rejected","failed","cancelled","unreachable"],"description":"Lifecycle status. Transitions invited β†’ joined β†’ left on the happy path; invited β†’ no_answer/rejected/failed/cancelled/unreachable otherwise."},"invitedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"joinedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"leftAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"deviceKind":{"type":"string","enum":["app","sip","mobile","trunk","meet"],"description":"How the participant is connected. `app`/`sip`/`mobile` for VL users; `trunk` for an external party reached via SIP carrier; `meet` for Google Meet participants."},"participantId":{"type":"string","description":"Stable id for this participant within the call (Rust sub-call ID for RTP legs, Meet participant resource name for Meet)"},"extensionNumber":{"type":"string","description":"Internal extension number for softphone / app participants β€” the user's extensionNumber at the time the call leg was created. Static for the call, no rename concern."},"phoneNumber":{"type":"string","description":"Dialed / caller external phone number for trunk / transfer / meet participants. Captured at participant create time; for Contact display, prefer the live `contact.mainPhoneNumber` first and fall back to this."},"callId":{"type":"string","description":"Rust-side call ID for this channel"},"codec":{"type":"string","description":"Codec used (PCMA, PCMU, G722, PCM16, …). Sample rate is `hertz`, not part of the codec name."},"hertz":{"type":"number","description":"Audio sample rate in Hz (8000 for SIP and the app UDP leg)."},"rtpPort":{"type":"number","description":"Allocated RTP port on Rust"},"serverIp":{"type":"string","description":"Rust server IP"},"remoteAddress":{"type":"string","description":"Remote RTP address"},"remotePort":{"type":"number","description":"Remote RTP port"},"transcribe":{"type":"boolean","description":"Whether to start transcription for this participant"},"initiator":{"type":"boolean","description":"Whether this participant initiated the call (hangup = end for all)"},"contactId":{"type":"string","description":"Contact ID for this participant (external party β€” CRM contact)"},"contactName":{"type":"string","description":"Denormalized contact display name for fast UI rendering β€” set at participant create time so the frontend doesn't have to refetch the Contact doc just to label a transcript turn."},"contact":{"type":"object","description":"Any valid JSON value"},"userId":{"type":"string","description":"VL user ID for this participant (internal user on their mobile/app β€” distinct from contactId which is a CRM contact)"},"userName":{"type":"string","description":"Denormalized VL user name for fast UI rendering. Same rationale as contactName."},"user":{"type":"object","description":"Any valid JSON value"},"agentId":{"type":"string","description":"AI Agent ID when this participant is the AI leg (type=ai) or when the participant is being analyzed/transcribed by a specific agent (type=trunk/softphone/app on a transcriptionOnly call). Lets the frontend show \"Sales Agent\" next to the AI's turns and link to the agent definition."},"agentName":{"type":"string","description":"Denormalized agent name for fast UI rendering."},"agent":{"type":"object","description":"Any valid JSON value"},"displayName":{"type":"string","description":"Display name (Meet/Zoom/Teams)"},"email":{"type":"string","description":"Email address (Meet/Zoom/Teams)"},"isOrganizer":{"type":"boolean","description":"Whether this participant is the meeting organizer (Meet/Zoom/Teams)"},"joinKind":{"type":"string","enum":["signed_in","phone","anonymous"],"description":"How the participant joined (Meet/Zoom/Teams)"},"durationSeconds":{"type":"number","description":"Total seconds the participant was joined (Meet/Zoom/Teams)"}}},"description":"Conversational participants β€” Agent / User / Contact. The carrier/trunk is transport, not a participant. Append-only with lifecycle status."},"ringTargets":{"type":"array","items":{"type":"object","properties":{"participantId":{"type":"string","description":"Participant this ring target belongs to. Same value as the participant's `participantId`."},"userId":{"type":"string","description":"VL user being reached (when the participant is role=User)."},"contactId":{"type":"string","description":"CRM contact being reached (when the participant is role=Contact)."},"deviceKind":{"type":"string","enum":["app","sip","mobile","trunk","meet"],"description":"Which device kind was tried."},"deviceId":{"type":"string","description":"Identifier for the specific device: UserEndpoint id, ExtensionRegistration id, or phone-number hash for mobile-callback."},"address":{"type":"string","description":"Dialed address β€” SIP URI, mobile number, etc. For debugging / CDR display."},"status":{"type":"string","enum":["invited","ringing","joined","left","no_answer","rejected","failed","cancelled","unreachable"],"description":"Outcome of this ring attempt."},"startedAt":{"type":"string","format":"date-time","description":"When the INVITE / push went out."},"endedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"failureReason":{"type":"string","description":"Free-text reason when status is failed/unreachable (e.g. \"no registration\", \"5xx from softphone\", \"carrier rejected\")."}},"required":["participantId","deviceKind","status","startedAt"]},"description":"Per-device dial attempts when one participant was forked to multiple devices."},"meetRecordingDriveFileId":{"type":"string","description":"Google Drive file ID of the Meet recording (only for source=google-meet)"},"meetAlternateDriveFileIds":{"type":"array","items":{"type":"string"},"description":"Other teammates Drive copies of the same Meet recording"},"meetConferenceRecordId":{"type":"string","description":"Google Meet conferenceRecord resource name (only for source=google-meet)"},"meetParticipantEmails":{"type":"array","items":{"type":"string"},"description":"Resolved participant email addresses (only for source=google-meet)"},"meetOrganizerEmail":{"type":"string","description":"Email of the meeting organizer (only for source=google-meet)"},"analysedByAi":{"type":"string","enum":["pending","failed","created","completed"],"description":"Whether the call was analysed by AI"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Metadata - Common examples include: appointmentReminder (true/false), reminderMinutes (number as string), eventId, eventIds (JSON string), calendarId, contactId, agentId, callId, voipPhoneId, phoneNumber, totalAppointments (number as string), callBack (true/false), viewUrl, viewHumanRecordingUrl, priority (high/medium/low), category (support/sales/billing), source (inbound/outbound), campaign_type, lead_score"},"superVariables":{"type":"object","additionalProperties":{"type":"object","properties":{"placeholder":{"type":"string","description":"Placeholder text to be replaced"},"value":{"type":"string","description":"Value to replace the placeholder"},"type":{"type":"string","enum":["text","number","boolean","date","time"],"description":"Type of the variable"}},"required":["placeholder","value"],"description":"Schema for super variable","example":{"placeholder":"{{customer_name}}","value":"John Doe","type":"text"}},"description":"Super variables - Typed key-value pairs with placeholders for advanced call data"},"contextForAi":{"type":"string","description":"Context for AI"},"llmConversationId":{"type":"string","description":"LLM conversation ID for maintaining stateful context across provider APIs (Gemini Interactions, OpenAI Responses, etc.)"},"postAnalysisResults":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},{"type":"object","properties":{}}]},"description":"Post analysis results - AI-generated analysis data from call processing (includes scalars and arrays such as email_recipients / email_cc_recipients / sms_recipients)"},"feedback":{"type":"object","properties":{"rating":{"type":"number","minimum":1,"maximum":5},"comment":{"type":"string"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"channel":{"type":"string","enum":["widget","sms"]}},"required":["rating"],"description":"Post-conversation customer satisfaction feedback (widget or SMS form)"},"callerVerification":{"type":"object","properties":{"status":{"type":"string","enum":["unverified","pending","verified"]},"channel":{"type":"string","enum":["email","sms","google","known_field"]},"associateId":{"type":"string"},"verifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["status"],"description":"Caller verification status (OTP or Google; no OTP stored)"},"encryptedId":{"type":"string","description":"Encrypted identifier - Encrypted call identifier for security"},"campaignId":{"type":"string","description":"Campaign identifier"},"campaignLeadId":{"type":"string","description":"Campaign lead identifier"},"outboundResult":{"type":"object","properties":{"humanJoined":{"type":"boolean"},"humanResponded":{"type":"boolean","description":"Callee spoke — not SIP answer, not voicemail"},"askedToNeverCallAgain":{"type":"boolean"},"askedToCallBackLater":{"type":"boolean"},"dateTimeToCallBack":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"description":"Outbound call result"},"rtpPort":{"type":"number","description":"RTP port"},"rtpIp":{"type":"string","description":"RTP IP address"},"startAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"endAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contact":{"type":"object","description":"Any valid JSON value"},"user":{"type":"object","description":"Any valid JSON value"},"voipPhone":{"type":"object","description":"Any valid JSON value"},"callInformation":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Call information"},"agent":{"type":"object","description":"Any valid JSON value"},"recordingFile":{"type":"object","description":"Any valid JSON value"},"humanRecordingFile":{"type":"object","description":"Any valid JSON value"},"originalRecordingFile":{"type":"object","description":"Any valid JSON value"},"transcriptionFile":{"type":"object","description":"Any valid JSON value"},"humanTranscriptionFile":{"type":"object","description":"Any valid JSON value"},"campaign":{"type":"object","description":"Any valid JSON value"},"campaignLead":{"type":"object","description":"Any valid JSON value"},"aiDialogue":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"role":{"type":"string","enum":["developer"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]}}]},"name":{"type":"string"}},"required":["role","content"]},{"type":"object","properties":{"role":{"type":"string","enum":["system"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]}}]},"name":{"type":"string"}},"required":["role","content"]},{"type":"object","properties":{"role":{"type":"string","enum":["user"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"oneOf":[{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]},{"type":"object","properties":{"image_url":{"type":"object","properties":{"url":{"type":"string"},"detail":{"type":"string","enum":["auto","low","high"]}},"required":["url"]},"type":{"type":"string","enum":["image_url"]}},"required":["image_url","type"]},{"type":"object","properties":{"input_audio":{"type":"object","properties":{"data":{"type":"string"},"format":{"type":"string","enum":["wav","mp3"]}},"required":["data","format"]},"type":{"type":"string","enum":["input_audio"]}},"required":["input_audio","type"]}]}}]},"name":{"type":"string"}},"required":["role","content"]},{"type":"object","properties":{"role":{"type":"string","enum":["assistant"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]}},{"type":"array","items":{"type":"object","properties":{"refusal":{"type":"string"},"type":{"type":"string","enum":["refusal"]}},"required":["refusal","type"]}}],"nullable":true},"name":{"type":"string"},"tool_calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["function"]},"function":{"type":"object","properties":{"name":{"type":"string"},"arguments":{"type":"string"}},"required":["name","arguments"]}},"required":["id","type","function"]}},"function_call":{"type":"object","properties":{"name":{"type":"string"},"arguments":{"type":"string"}},"required":["name","arguments"],"nullable":true},"audio":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"nullable":true},"refusal":{"type":"string","nullable":true}},"required":["role"]},{"type":"object","properties":{"role":{"type":"string","enum":["tool"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]}}]},"tool_call_id":{"type":"string"}},"required":["role","content","tool_call_id"]},{"type":"object","properties":{"role":{"type":"string","enum":["function"]},"content":{"type":"string","nullable":true},"name":{"type":"string"}},"required":["role","name"]}]},"description":"AI dialogue messages"},"sensitiveData":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"placeholder":{"type":"string"},"type":{"type":"string","enum":["amka","afm","personal_number","id_card","passport","gemi","cy_tic","iban","card","cvv","pin","email","phone"]},"last4":{"type":"string"}},"required":["placeholder","type","last4"]}},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"recordingRedactedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"clipPlaceholders":{"type":"array","items":{"type":"string"}}},"required":["entries"],"description":"Placeholders in this call's transcript and their last four characters. Real values: the reveal endpoint (sensitive-data permission, audited)."},"scheduledAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"retries":{"type":"number","description":"Number of retries"},"maxRetries":{"type":"number","description":"Maximum number of retries"},"retryDelayMinutes":{"type":"number","description":"Retry delay in minutes"},"transferringDetails":{"type":"object","properties":{"callSourceId":{"type":"string","description":"Call source ID"},"callSourceCallId":{"type":"string","description":"Call source call ID"},"transferringStatus":{"type":"string","enum":["transferring","pending_confirmation","success","failed","aborted"],"description":"Transferring status"},"transferFailedReason":{"type":"string","description":"The reason the transfer failed"},"callDestinationId":{"type":"string","description":"Call destination ID"},"callDestinationCallId":{"type":"string","description":"Call destination call ID"},"announceTransferReason":{"type":"boolean","description":"Whether to announce the transfer reason"},"transferReason":{"type":"string","description":"The transfer reason"},"showCallerId":{"type":"boolean","description":"Whether to show the caller ID"},"callerId":{"type":"string","description":"The caller ID"},"transferMode":{"type":"string","enum":["blind","warm","attended"],"description":"Transfer mode for this in-flight transfer"},"blindTransfer":{"type":"boolean","description":"Deprecated — use transferMode"},"consultPhase":{"type":"string","enum":["idle","consulting_ringing","consulting_dest","back_with_caller","merged","cancelled"],"description":"Warm/attended consult: dest rings, talk to dest, swap back to caller, then merge or cancel"},"consultOperatorCallId":{"type":"string","description":"Operator call (B) that placed this consult leg"},"secondsToWaitForCallerToAnswer":{"type":"number","description":"The number of seconds to wait for the caller to answer the call"},"forwardedFrom":{"type":"string","description":"The number the call was forwarded from"},"destinationType":{"oneOf":[{"type":"string","enum":["User","External","Agent"]},{"type":"string","enum":["UserGroup"]},{"type":"string","enum":["UserEndpoint"]}],"description":"The type of the destination to transfer the call to"},"destinationId":{"type":"string","description":"The id of the destination (userId / userGroupId / agentId). Used to route an internal blind transfer looped back to our DID; destinationNumber still carries the dialable number for External."},"destinationNumber":{"type":"string","description":"The number to transfer the call to"},"agentIdToTransferTo":{"type":"string","description":"The agent ID to transfer the call to"},"agentVersionIdToTransferTo":{"type":"string","description":"Optional saved agent version to load after transfer"},"messageToPersonWantingToBeTransferred":{"type":"string","description":"The message to the person wanting to be transferred"},"analyzeTransferredCall":{"type":"boolean","description":"Whether to analyze the transferred call"},"agentIdToAnalyzeTransferredCall":{"type":"string","description":"The agent ID to analyze the transferred call"},"routedVia":{"type":"string","enum":["outbound_route","customer_pbx_inbound_fallback","remote_pbx_extension_fallback","provider_trunk_inbound_fallback"],"description":"How the outbound leg was routed for an external transfer."},"outboundTrunkId":{"type":"string","description":"SipTrunk id used for the outbound leg of an external transfer."},"outboundRouteId":{"type":"string","description":"OutboundRoute id that matched the destination, when an explicit route was used."},"inviteSentAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"referAcceptedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["callSourceId","callSourceCallId","transferringStatus","callerId","destinationType","destinationNumber"],"description":"Transferring details"},"transferAttempts":{"type":"array","items":{"type":"object","properties":{"destinationNumber":{"type":"string","description":"The number the transfer was attempted to"},"destinationType":{"type":"string","enum":["User","External","Agent"],"description":"The type of the transfer destination"},"status":{"type":"string","enum":["transferring","pending_confirmation","success","failed","aborted"],"description":"Terminal outcome of this attempt (success/failed)"},"transferReason":{"type":"string","description":"Why the agent transferred the call"},"transferFailedReason":{"type":"string","description":"Why this attempt failed, when recorded"},"at":{"type":"string","format":"date-time","description":"When the attempt reached its terminal status"}},"required":["status","at"]},"description":"History of finished transfer attempts (multi-attempt calls)"},"chatHandoff":{"type":"object","properties":{"status":{"type":"string","enum":["none","offering","live","offering_retransfer"]},"ownerUserId":{"type":"string","description":"Write lock — only this user may send live messages"},"ownerUserName":{"type":"string"},"offeredUserId":{"type":"string"},"offeredUserIds":{"type":"array","items":{"type":"string"},"description":"Every user currently ringing on a group offer. First accept cancels the rest."},"offeredUserName":{"type":"string"},"offeredByUserId":{"type":"string","description":"AI offer leaves this empty; retransfer sets the previous owner"},"destinationType":{"type":"string","enum":["UserEndpoint","UserGroup"]},"destinationId":{"type":"string","description":"UserEndpoint or UserGroup id currently offered or owned"},"reason":{"type":"string"},"offeredAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"acceptedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"secondsToWait":{"type":"number","minimum":5,"maximum":60}},"required":["status"],"description":"Live WhatsApp/widget human takeover — current offer or owner"},"chatHandoffAttempts":{"type":"array","items":{"type":"object","properties":{"fromUserId":{"type":"string","description":"Previous owner, if this was a user-to-user retransfer. Omitted when the AI offered."},"toUserId":{"type":"string","description":"User who was offered the thread"},"toUserName":{"type":"string"},"destinationId":{"type":"string","description":"UserEndpoint id that was offered"},"reason":{"type":"string"},"outcome":{"type":"string","enum":["accepted","declined","timeout","cancelled"]},"at":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["toUserId","outcome","at"]},"description":"History of finished chat handoff offers"},"networkQuality":{"type":"object","properties":{"packetsReceived":{"type":"number","description":"Total RTP packets received from the caller"},"packetsLost":{"type":"number","description":"Packets lost (from RTP sequence gaps)"},"lossPct":{"type":"number","description":"Cumulative packet loss percentage (0-100)"},"packetsOutOfOrder":{"type":"number","description":"Packets that arrived duplicated or out of order"},"jitterMs":{"type":"number","description":"Smoothed inter-arrival jitter in milliseconds"},"farEnd":{"type":"object","properties":{"reports":{"type":"number","description":"How many RTCP reception reports the far end sent"},"lossPct":{"type":"number","description":"Loss of OUR audio in the most recent report (0-100)"},"worstLossPct":{"type":"number","description":"Worst loss of OUR audio seen in any report (0-100)"},"packetsLost":{"type":"number","description":"Cumulative packets of ours the far end never received"},"jitter":{"type":"number","description":"Jitter the far end measured on our stream (RTP timestamp units)"}},"required":["reports","lossPct","worstLossPct","packetsLost","jitter"],"description":"The far end view of the audio we sent it, from its RTCP reception reports"}},"required":["packetsReceived","packetsLost","lossPct","packetsOutOfOrder","jitterMs"],"description":"Network quality summary (packet loss/jitter) from the RTP server"},"scenarioTest":{"type":"object","properties":{"scenarioId":{"type":"string","description":"AgentScenario under test"},"resultId":{"type":"string","description":"AgentScenarioResult row this leg belongs to"},"runId":{"type":"string","description":"Batch run id shared by all repetitions"},"role":{"type":"string","enum":["caller","agent_under_test"],"description":"caller = simulator leg, agent_under_test = inbound leg graded by the judge"},"useRealTools":{"type":"boolean","description":"When false, tools not mocked by the scenario must be blocked"},"mockedTools":{"type":"array","items":{"type":"object","properties":{"toolName":{"type":"string","description":"Function call / tool name to intercept"},"mode":{"type":"string","enum":["mock","real","block"],"description":"mock = return canned responses, real = execute normally, block = return a generic \"unavailable\" result"},"responses":{"type":"array","items":{"type":"object","properties":{"response":{"type":"string","description":"Payload the LLM receives as the tool result"},"delayMs":{"type":"number","description":"Artificial latency before returning the mock"},"fail":{"type":"boolean","description":"Simulate a tool error instead of a successful result"}},"required":["response"]},"description":"Sequential responses; the last entry repeats for further invocations"}},"required":["toolName","mode"]},"description":"Per-tool interception config stamped from the scenario for FunctionCallRunner"},"frozenNow":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"callDirection":{"type":"string","enum":["inbound","outbound"],"description":"Direction the scenario tests. The test leg is always inbound SIP-wise, so \"outbound\" only makes the agent prompt read as an outgoing call"},"scenarioName":{"type":"string","description":"Scenario text, written back after judging so call lists can label the test without a scenario lookup"},"passed":{"type":"boolean","description":"Judge verdict written back after evaluation — absent while the run is in progress or errored"},"score":{"type":"number","description":"Judge score 1-10 written back after evaluation"},"abruptEndAfterSeconds":{"type":"number","description":"Dropped-line simulation: hang this call up this many seconds after it connects, with no goodbye. Armed in-process by RtpService, which owns the call."}},"required":["scenarioId","resultId","role"],"description":"Set when this call is a live agent-scenario test leg"},"originalCallId":{"type":"string","description":"Original call identifier"},"scheduledReason":{"type":"string","enum":["retry","customer_callback","dropped_call"],"description":"Why this call was scheduled: retry, customer_callback (the person asked to be called back) or dropped_call"},"previousCallId":{"type":"string","description":"For agent-handoff legs: the `_id` of the previous Call doc that was finalized when the agent identity was swapped. Walking the chain backwards reconstructs the full per-agent timeline."},"useAntiHarassmentProtection":{"type":"boolean","description":"Whether to use anti-harassment protections (daily limits, cooldown, etc.)"},"overrideTimeRestriction":{"type":"boolean","description":"Whether to override time restrictions"},"overrideDayRestriction":{"type":"boolean","description":"Whether to override day restrictions"},"isWelcomeMessageAIGenerated":{"type":"boolean","description":"Whether the welcome message is AI generated"},"welcomeMessageOverride":{"type":"string","description":"Per-call welcome message spoken verbatim by the answering agent, overriding its configured first message."},"hostedOutbound":{"type":"boolean","description":"Whether this outbound call used the company/distributor trunk with a verified caller ID."},"fallbackForUserId":{"type":"string","description":"When the AI answered as a direct-to-extension fallback, the user the call was originally routed to. Scopes AI-created callbacks to that user."},"aiDisclosure":{"type":"object","properties":{"required":{"type":"boolean"},"played":{"type":"boolean"},"skippedReason":{"type":"string","enum":["disabled","transfer_whisper","session_resume","welcome_skipped","exception"]},"source":{"type":"string","enum":["welcome_text","composed","none"]},"matchedTerm":{"type":"string"},"language":{"type":"string"},"text":{"type":"string"},"playedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"recordingOffsetMs":{"type":"number"}},"required":["required","played"],"description":"Art. 50 AI disclosure snapshot for this call"},"useOwnApiKey":{"type":"boolean","description":"Whether the clients is using their own API key"},"rescheduled":{"type":"boolean","description":"Whether the call is scheduled"},"rescheduledAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"funnelStatus":{"type":"string","enum":["resolved","escalated","dropped","early_abandon","human_handled","technical_issue","frustrated_hung_up"],"description":"High-level funnel status for analytics (resolved, escalated, dropped, pending)"},"resolutionStatus":{"type":"string","enum":["converted","appointment_scheduled","lead_qualified","information_provided","issue_resolved","partially_resolved","callback_requested","contact_unavailable","not_interested","do_not_call","wrong_contact"],"description":"Detailed resolution outcome of the call"},"escalationReason":{"type":"string","enum":["complex_query","user_requested","user_frustration","knowledge_gap","sensitive_data_required","verification_failed","language_barrier","audio_quality_issues","vip_customer"],"description":"Reason why call was escalated to human (only applicable if escalated)"},"conversionStatus":{"type":"string","enum":["converted","not_converted"],"description":"Whether business goal was achieved (converted, not_converted)"},"callCategoryIds":{"type":"array","items":{"type":"string"},"description":"Array of call category identifiers for this call"},"callCategories":{"type":"array","items":{"type":"object","description":"Any valid JSON value"},"description":"Call categories information (populated from CallCategory)"},"postCallAnalysis":{"type":"string","enum":["not_started","in_progress","failed","completed"],"description":"Status of post call analysis (not-started, in_progress, failed, completed)"},"postCallAnalysisStages":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string","enum":["summary","transcription","analysis","workflow","appointment_reminder","send_skroutz_data","update_confirmed_appointment_with_data","has_asked_to_never_call_again","has_asked_for_callback","has_called_dropped","should_schedule_call_back_campaign_lead","auto_create_task","resolve_contact_callbacks","evaluate_conversation","evaluation","knowledge_unanswered","knowledge_gap_answers","knowledge_staff_answers","all","job"],"description":"Action to perform on the stage"},"status":{"type":"string","enum":["not_started","in_progress","failed","completed"],"description":"Status of the stage"},"retryCount":{"type":"number","description":"Number of retry attempts made"},"lastAttemptAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"error":{"type":"string","description":"Error message from the last failed attempt"}},"required":["action","status"]},"description":"Schema for post call analysis stages","example":{"stages":[{"action":"summary","status":"completed","retryCount":0,"lastAttemptAt":"2026-10-20T15:02:36.517Z"}]}},"evaluatedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"planId":{"type":"string","description":"The subscription plan ID active at the time of the call"},"resellerId":{"type":"string","description":"The reseller company ID linked with the customer at the time of the call"},"callHandler":{"type":"string","enum":["voip_phone","pbx_softphone","pbx_trunk","extension"],"description":"Which system processed the call (voip_phone, pbx_softphone, pbx_trunk)"},"appClientParticipantId":{"type":"string","description":"Rust participant sub-call ID for the app client (used to remove it on transfer)"},"seen":{"type":"array","items":{"type":"object","properties":{"seenByUserId":{"type":"string","description":"User who has seen this call"},"seenAt":{"type":"string","format":"date-time","description":"When the user saw the call"}},"required":["seenByUserId","seenAt"]},"description":"Users who have marked/viewed this call as seen"},"callerCard":{"type":"object","properties":{"links":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"customerKey":{"type":"string"},"label":{"type":"string"},"icon":{"type":"string"},"url":{"type":"string"},"kind":{"type":"string","enum":["record","no_match"]},"primary":{"type":"boolean"},"autoOpen":{"type":"string","enum":["off","on_answer","on_ring"]}},"required":["provider","label","icon","url","kind","primary","autoOpen"]}},"matches":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"customerKey":{"type":"string"},"label":{"type":"string"},"recordId":{"type":"string"},"displayName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"company":{"type":"string"},"url":{"type":"string"}},"required":["provider","customerKey","label"]}},"contact":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"company":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"}},"required":["id"]},"primaryProvider":{"type":"string"},"autoOpenUrl":{"type":"string"},"autoOpen":{"type":"string","enum":["off","on_answer","on_ring"]},"builtAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["links","matches","autoOpen","builtAt"],"description":"CRM caller card (matched records + \"Open in\" links) as shown when the call came in"},"isPrivate":{"type":"boolean","description":"Private call — visible only to its own user and super-admins"},"legalHold":{"type":"boolean","description":"Legal hold — retention and deletion skip this call until released"},"analysisOnDemand":{"type":"boolean","description":"Analysis on demand: the call was recorded but not transcribed or analysed; POST /phones/call/:id/analyze runs it"},"analysisRequestedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["id","createdAt","active","createdBy","createdById","companyId","callId","callerId","phoneNumber","status","messages","hertz","callDirection"],"description":"Response schema for call including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","callId":"call_123456789","callerId":"caller_987654321","contactId":"contact_456789","userId":"user_101112","voipPhoneId":"voip_131415","agentId":"agent_161718","phoneNumber":"+1234567890","status":"in_call","messages":[],"recordingFileId":"recording_192021","humanRecordingFileId":"human_recording_232425","transcriptionFileId":"transcription_222324","humanTranscriptionFileId":"human_transcription_262728","endCallReason":"caller_hungup","duration":180,"hertz":8000,"humanInCall":true,"summary":"Customer called about billing issue","callDirection":"inbound","transcriptionCost":0.03,"totalCost":0.2,"consumerCost":0.1,"dynamicVariables":{"customer_name":"John Doe","order_id":"ORD123"},"metadata":{"priority":"high","category":"support","appointmentReminder":"true","reminderMinutes":"30","eventId":"event_123","calendarId":"calendar_456","callBack":"false","viewUrl":"https://example.com/call/123","viewHumanRecordingUrl":"https://example.com/call/123/human","source":"inbound","campaign_type":"follow_up"},"superVariables":{"customer_name":{"placeholder":"{{customer_name}}","value":"John Doe","type":"text"},"appointment_date":{"placeholder":"{{appointment_date}}","value":"2024-01-15","type":"date"},"is_vip":{"placeholder":"{{is_vip}}","value":"true","type":"boolean"}},"contextForAi":"Customer is calling about a billing issue from last month","postAnalysisResults":{"sentiment":"positive","intent":"support"},"campaignId":"campaign_252627","campaignLeadId":"lead_282930","rtpPort":10000,"rtpIp":"192.168.1.100","startAt":"2024-01-15T10:30:00.000Z","endAt":"2024-01-15T10:33:00.000Z","scheduledAt":"2024-01-15T10:30:00.000Z","retries":0,"maxRetries":3,"retryDelayMinutes":10,"callInformation":{"priority":"high","category":"support"},"transferringStatus":"transferring","postCallAnalysis":"completed","postCallAnalysisStages":[{"action":"summary","status":"completed","retryCount":0,"lastAttemptAt":"2026-10-20T15:02:36.522Z"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"404":{"description":"Call not found","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Phones - Calls"]},"delete":{"summary":"Delete call record","responses":{"200":{"description":"Call deleted successfully","content":{"application/json":{}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"404":{"description":"Call not found","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Phones - Calls"]}},"/api/v1/phones/calls/{id}/full":{"get":{"summary":"Get a single call as a superset: its details, app call logs, and SIP frames.","responses":{"200":{"description":"Call superset — the call record plus its app call logs and SIP frames","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"callId":{"type":"string","description":"Call identifier"},"callerId":{"type":"string","description":"Caller identifier"},"contactId":{"type":"string","description":"Contact identifier"},"userId":{"type":"string","description":"User identifier"},"userName":{"type":"string","description":"Display name of userId — stamped on list responses so grids need no second lookup"},"voipPhoneId":{"type":"string","description":"VoIP phone identifier"},"sipTrunkId":{"type":"string","description":"SIP trunk identifier (for trunk-routed calls)"},"agentId":{"type":"string","description":"Agent identifier"},"agentVersionId":{"type":"string","description":"Agent version/staging snapshot used for this call"},"agentVersionNumber":{"type":"number","description":"Version number dialed (0 = staging); omitted for prod"},"agentVersionKind":{"type":"string","enum":["prod","staging","version"],"description":"prod, or a named version"},"agentVersionDescription":{"type":"string","description":"Version name shown on the call when not Prod"},"phoneNumber":{"type":"string","description":"Phone number"},"status":{"type":"string","enum":["failed","cancelled","answered_elsewhere","transferring","transferred","failed_during_call","to_be_processed","trying","ringing","busy","missed","in_call","answered","voice_mail","session_progress","scheduled"],"description":"Call status"},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["Agent","User","Contact","Tool","System"],"description":"Role of the message sender"},"toolCallId":{"type":"string","nullable":true,"description":"Tool call identifier if applicable"},"content":{"type":"string","description":"Message content"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp when message was sent"},"seconds":{"type":"number","description":"Duration in seconds"},"agentId":{"type":"string","nullable":true,"description":"Agent identifier if applicable"},"contactId":{"type":"string","nullable":true,"description":"Contact identifier if applicable"},"userId":{"type":"string","nullable":true,"description":"User identifier if applicable"},"completionTurnMs":{"type":"number","description":"Completion turn time in milliseconds"},"voiceTurnMs":{"type":"number","description":"Voice turn time in milliseconds"},"totalTurnMs":{"type":"number","description":"Total turn time in milliseconds"},"speakerId":{"type":"number","description":"Speaker identifier"},"participantLabel":{"type":"string","description":"Label of the participant (e.g. \"Caller: 6982364479\", \"Transfer: 2103009090\")"},"translatedContent":{"type":"string","description":"Live-translated version of `content`, when live translation was active for this turn."},"originalLanguage":{"type":"string","description":"Detected spoken language of `content` (ISO 639-1, e.g. \"de\")."},"translatedLanguage":{"type":"string","description":"Target language of `translatedContent` (ISO 639-1, e.g. \"el\")."}},"required":["role","content","timestamp","seconds"],"description":"Schema for call message","example":{"role":"Agent","toolCallId":"tool_call_123","agentId":"agent_456","contactId":"contact_789","userId":"user_101","content":"Hello, how can I help you today?","timestamp":"2024-01-15T10:30:00.000Z","seconds":30,"completionTurnMs":1500,"voiceTurnMs":2000,"totalTurnMs":3500,"speakerId":1}},"description":"Call messages. Empty when recordingEnabled is false — the verbatim transcript is withheld by policy for calls made with recording disabled."},"recordingEnabled":{"type":"boolean","description":"Whether recording was enabled by policy when the call ran. false → messages/aiDialogue/transcription files are withheld (summary and post-analysis remain); absent on older calls (treated as recorded)."},"recordingFileId":{"type":"string","description":"Recording file identifier"},"humanRecordingFileId":{"type":"string","description":"Human recording file identifier"},"originalRecordingFileId":{"type":"string","description":"Original (untranslated) recording file identifier, present when live translation was active"},"transcriptionFileId":{"type":"string","description":"Transcription file identifier"},"humanTranscriptionFileId":{"type":"string","description":"Human transcription file identifier"},"endCallReason":{"type":"string","enum":["caller_hungup","user_hungup","caller_voice_mail","caller_does_not_exist","wrong_set_number","call_maximum_time_reached","caller_unresponsive_after_nudges","call_transferred","caller_busy","caller_declined","no_channels","unavailable","voip_phone_offline","voip_phone_service_failed","no_agent_id","phone_number_not_found","agent_not_found","no_remote_rtp_address","no_selected_codec","no_remote_rtp_port","voip_provider_issue","inbound_calls_blocked","no_rtp_stream","no_pickup_after_ringing_max_seconds","sdp_error","not_acceptable_here","voip_temporary_issue","voip_phone_not_exist","caller_does_not_speak","message_left","no_channels_available_in_plan","forbidden","failed_to_connect","call_stuck","no_seconds_available_in_plan","maximum_time","subscription_issue","incorect_code","transfer_request_true","transfer_request_false","no_voip_connection","insufficient_balance_in_voip_provider","caller_called_back","campaign_not_active","outside_campaign_schedule","agent_handoff","off_hours_welcome_message","answered_elsewhere"],"description":"End call reason"},"sipFailure":{"type":"object","properties":{"code":{"type":"number","description":"SIP status code of the final INVITE response"},"reason":{"type":"string","description":"SIP reason phrase as the carrier sent it"},"warning":{"type":"string","description":"SIP Warning header"},"q850":{"type":"number","description":"Q.850 cause from the Reason header"},"kind":{"type":"string","enum":["number_not_in_service","invalid_number","rejected","barred","phone_unreachable","network_busy","no_credit"],"description":"Plain-language category for the user"}},"required":["code"],"description":"What the carrier said when it refused the call (failed calls only)"},"duration":{"type":"number","description":"Call duration in seconds"},"hertz":{"type":"number","description":"Audio frequency in hertz"},"humanInCall":{"type":"boolean","description":"Whether human is in call"},"summary":{"type":"string","description":"Call summary"},"shortSummary":{"type":"string","description":"One-line summary for call cards"},"callDirection":{"type":"string","enum":["inbound","outbound"],"description":"Call direction"},"voiceCost":{"type":"object","properties":{"cost":{"type":"number","description":"Current cost"},"savedCost":{"type":"number","description":"Saved cost"},"totalCost":{"type":"number","description":"Total cost"},"characters":{"type":"number","description":"Number of characters"},"charactersSaved":{"type":"number","description":"Number of characters saved"},"totalCharacters":{"type":"number","description":"Total number of characters"}},"required":["cost","savedCost","totalCost","characters","charactersSaved","totalCharacters"],"description":"Schema for call voice cost information","example":{"cost":0.05,"savedCost":0.02,"totalCost":0.07,"characters":150,"charactersSaved":50,"totalCharacters":200}},"transcriptionCost":{"type":"number","description":"Transcription cost"},"completionCost":{"type":"object","properties":{"inputTokens":{"type":"number","description":"Number of input tokens"},"cachedInputTokens":{"type":"number","description":"Number of cached input tokens (served from prompt cache)"},"cacheWriteTokens":{"type":"number","description":"Input tokens written to the provider prompt cache (billed at a premium on GPT-5.6+)"},"outputTokens":{"type":"number","description":"Number of output tokens"},"reasoningTokens":{"type":"number","description":"Number of reasoning tokens (for reasoning models like o1, o3, gpt-5)"},"totalTokens":{"type":"number","description":"Total number of tokens"},"inputCost":{"type":"number","description":"Input cost"},"cachedInputCost":{"type":"number","description":"Cached input cost (typically 90% cheaper than regular input)"},"completionCost":{"type":"number","description":"Completion cost"},"reasoningCost":{"type":"number","description":"Reasoning tokens cost (billed as output tokens)"},"totalCost":{"type":"number","description":"Total cost"},"callCompletionCost":{"type":"number","description":"Call completion cost"},"analysisCompletionCost":{"type":"number","description":"Analysis completion cost"},"speculative":{"type":"boolean","description":"This request was a speculative pre-<end> fire (tag rides through to ModelUsage)"}},"required":["inputTokens","outputTokens","totalTokens","inputCost","completionCost","totalCost"],"description":"Schema for call completion cost information","example":{"inputTokens":100,"cachedInputTokens":50,"outputTokens":50,"reasoningTokens":10,"totalTokens":210,"inputCost":0.02,"cachedInputCost":0.001,"completionCost":0.01,"reasoningCost":0.002,"totalCost":0.033}},"totalCost":{"type":"number","description":"Total cost"},"consumerCost":{"type":"number","description":"Total Cost of the Call for the Consumer"},"dynamicVariables":{"type":"object","additionalProperties":{"type":"string"},"description":"Dynamic variables"},"source":{"type":"string","enum":["app","api","web","mcp","phone","mobile","mobile-bridge","scheduled","waitlist","campaign","workflow","recording","transfer","google-meet","meeting","whatsapp","viber","telegram","instagram","instagram_comment","messenger","messenger_comment","email","vicidial-seat","campaign-seat","vicidial","phone-verification"],"description":"Source of the call"},"mobileTransferKind":{"type":"string","enum":["pin_bridge","busy_forward","callback","no_answer_forward"],"description":"Mobile transfer mode: pin_bridge or busy_forward"},"mobileUserId":{"type":"string","description":"Mobile seat user id for PIN bridge / busy-forward"},"mobileTransferAiFallback":{"type":"boolean","description":"Busy-forward fell back to AI for the waiting caller"},"mobileTransferAiFallbackReason":{"type":"string","description":"Why busy-forward fell back to AI"},"messageOnly":{"type":"boolean","description":"Personal assistant with no voice minutes: welcome message, then recorded the caller only (analysis minutes)"},"mobileBridgeNoDestLeg":{"type":"boolean","description":"Hidden bridge leg whose transfer never produced a destination leg — kept visible so the call is not lost from the grid"},"participants":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ai","trunk","softphone","app","transfer","meet"],"description":"Legacy transport-flavoured type. New writers populate `role` + `deviceKind` instead."},"role":{"type":"string","enum":["Agent","User","Contact"],"description":"Conversational role β€” Agent (AI), User (VL user being reached on a device), or Contact (external CRM contact). Mirrors `CallMessage.role`. The carrier/trunk is transport, not a participant."},"status":{"type":"string","enum":["invited","ringing","joined","left","no_answer","rejected","failed","cancelled","unreachable"],"description":"Lifecycle status. Transitions invited β†’ joined β†’ left on the happy path; invited β†’ no_answer/rejected/failed/cancelled/unreachable otherwise."},"invitedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"joinedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"leftAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"deviceKind":{"type":"string","enum":["app","sip","mobile","trunk","meet"],"description":"How the participant is connected. `app`/`sip`/`mobile` for VL users; `trunk` for an external party reached via SIP carrier; `meet` for Google Meet participants."},"participantId":{"type":"string","description":"Stable id for this participant within the call (Rust sub-call ID for RTP legs, Meet participant resource name for Meet)"},"extensionNumber":{"type":"string","description":"Internal extension number for softphone / app participants β€” the user's extensionNumber at the time the call leg was created. Static for the call, no rename concern."},"phoneNumber":{"type":"string","description":"Dialed / caller external phone number for trunk / transfer / meet participants. Captured at participant create time; for Contact display, prefer the live `contact.mainPhoneNumber` first and fall back to this."},"callId":{"type":"string","description":"Rust-side call ID for this channel"},"codec":{"type":"string","description":"Codec used (PCMA, PCMU, G722, PCM16, …). Sample rate is `hertz`, not part of the codec name."},"hertz":{"type":"number","description":"Audio sample rate in Hz (8000 for SIP and the app UDP leg)."},"rtpPort":{"type":"number","description":"Allocated RTP port on Rust"},"serverIp":{"type":"string","description":"Rust server IP"},"remoteAddress":{"type":"string","description":"Remote RTP address"},"remotePort":{"type":"number","description":"Remote RTP port"},"transcribe":{"type":"boolean","description":"Whether to start transcription for this participant"},"initiator":{"type":"boolean","description":"Whether this participant initiated the call (hangup = end for all)"},"contactId":{"type":"string","description":"Contact ID for this participant (external party β€” CRM contact)"},"contactName":{"type":"string","description":"Denormalized contact display name for fast UI rendering β€” set at participant create time so the frontend doesn't have to refetch the Contact doc just to label a transcript turn."},"contact":{"type":"object","description":"Any valid JSON value"},"userId":{"type":"string","description":"VL user ID for this participant (internal user on their mobile/app β€” distinct from contactId which is a CRM contact)"},"userName":{"type":"string","description":"Denormalized VL user name for fast UI rendering. Same rationale as contactName."},"user":{"type":"object","description":"Any valid JSON value"},"agentId":{"type":"string","description":"AI Agent ID when this participant is the AI leg (type=ai) or when the participant is being analyzed/transcribed by a specific agent (type=trunk/softphone/app on a transcriptionOnly call). Lets the frontend show \"Sales Agent\" next to the AI's turns and link to the agent definition."},"agentName":{"type":"string","description":"Denormalized agent name for fast UI rendering."},"agent":{"type":"object","description":"Any valid JSON value"},"displayName":{"type":"string","description":"Display name (Meet/Zoom/Teams)"},"email":{"type":"string","description":"Email address (Meet/Zoom/Teams)"},"isOrganizer":{"type":"boolean","description":"Whether this participant is the meeting organizer (Meet/Zoom/Teams)"},"joinKind":{"type":"string","enum":["signed_in","phone","anonymous"],"description":"How the participant joined (Meet/Zoom/Teams)"},"durationSeconds":{"type":"number","description":"Total seconds the participant was joined (Meet/Zoom/Teams)"}}},"description":"Conversational participants β€” Agent / User / Contact. The carrier/trunk is transport, not a participant. Append-only with lifecycle status."},"ringTargets":{"type":"array","items":{"type":"object","properties":{"participantId":{"type":"string","description":"Participant this ring target belongs to. Same value as the participant's `participantId`."},"userId":{"type":"string","description":"VL user being reached (when the participant is role=User)."},"contactId":{"type":"string","description":"CRM contact being reached (when the participant is role=Contact)."},"deviceKind":{"type":"string","enum":["app","sip","mobile","trunk","meet"],"description":"Which device kind was tried."},"deviceId":{"type":"string","description":"Identifier for the specific device: UserEndpoint id, ExtensionRegistration id, or phone-number hash for mobile-callback."},"address":{"type":"string","description":"Dialed address β€” SIP URI, mobile number, etc. For debugging / CDR display."},"status":{"type":"string","enum":["invited","ringing","joined","left","no_answer","rejected","failed","cancelled","unreachable"],"description":"Outcome of this ring attempt."},"startedAt":{"type":"string","format":"date-time","description":"When the INVITE / push went out."},"endedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"failureReason":{"type":"string","description":"Free-text reason when status is failed/unreachable (e.g. \"no registration\", \"5xx from softphone\", \"carrier rejected\")."}},"required":["participantId","deviceKind","status","startedAt"]},"description":"Per-device dial attempts when one participant was forked to multiple devices."},"meetRecordingDriveFileId":{"type":"string","description":"Google Drive file ID of the Meet recording (only for source=google-meet)"},"meetAlternateDriveFileIds":{"type":"array","items":{"type":"string"},"description":"Other teammates Drive copies of the same Meet recording"},"meetConferenceRecordId":{"type":"string","description":"Google Meet conferenceRecord resource name (only for source=google-meet)"},"meetParticipantEmails":{"type":"array","items":{"type":"string"},"description":"Resolved participant email addresses (only for source=google-meet)"},"meetOrganizerEmail":{"type":"string","description":"Email of the meeting organizer (only for source=google-meet)"},"analysedByAi":{"type":"string","enum":["pending","failed","created","completed"],"description":"Whether the call was analysed by AI"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Metadata - Common examples include: appointmentReminder (true/false), reminderMinutes (number as string), eventId, eventIds (JSON string), calendarId, contactId, agentId, callId, voipPhoneId, phoneNumber, totalAppointments (number as string), callBack (true/false), viewUrl, viewHumanRecordingUrl, priority (high/medium/low), category (support/sales/billing), source (inbound/outbound), campaign_type, lead_score"},"superVariables":{"type":"object","additionalProperties":{"type":"object","properties":{"placeholder":{"type":"string","description":"Placeholder text to be replaced"},"value":{"type":"string","description":"Value to replace the placeholder"},"type":{"type":"string","enum":["text","number","boolean","date","time"],"description":"Type of the variable"}},"required":["placeholder","value"],"description":"Schema for super variable","example":{"placeholder":"{{customer_name}}","value":"John Doe","type":"text"}},"description":"Super variables - Typed key-value pairs with placeholders for advanced call data"},"contextForAi":{"type":"string","description":"Context for AI"},"llmConversationId":{"type":"string","description":"LLM conversation ID for maintaining stateful context across provider APIs (Gemini Interactions, OpenAI Responses, etc.)"},"postAnalysisResults":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},{"type":"object","properties":{}}]},"description":"Post analysis results - AI-generated analysis data from call processing (includes scalars and arrays such as email_recipients / email_cc_recipients / sms_recipients)"},"feedback":{"type":"object","properties":{"rating":{"type":"number","minimum":1,"maximum":5},"comment":{"type":"string"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"channel":{"type":"string","enum":["widget","sms"]}},"required":["rating"],"description":"Post-conversation customer satisfaction feedback (widget or SMS form)"},"callerVerification":{"type":"object","properties":{"status":{"type":"string","enum":["unverified","pending","verified"]},"channel":{"type":"string","enum":["email","sms","google","known_field"]},"associateId":{"type":"string"},"verifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["status"],"description":"Caller verification status (OTP or Google; no OTP stored)"},"encryptedId":{"type":"string","description":"Encrypted identifier - Encrypted call identifier for security"},"campaignId":{"type":"string","description":"Campaign identifier"},"campaignLeadId":{"type":"string","description":"Campaign lead identifier"},"outboundResult":{"type":"object","properties":{"humanJoined":{"type":"boolean"},"humanResponded":{"type":"boolean","description":"Callee spoke — not SIP answer, not voicemail"},"askedToNeverCallAgain":{"type":"boolean"},"askedToCallBackLater":{"type":"boolean"},"dateTimeToCallBack":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"description":"Outbound call result"},"rtpPort":{"type":"number","description":"RTP port"},"rtpIp":{"type":"string","description":"RTP IP address"},"startAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"endAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contact":{"type":"object","description":"Any valid JSON value"},"user":{"type":"object","description":"Any valid JSON value"},"voipPhone":{"type":"object","description":"Any valid JSON value"},"callInformation":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Call information"},"agent":{"type":"object","description":"Any valid JSON value"},"recordingFile":{"type":"object","description":"Any valid JSON value"},"humanRecordingFile":{"type":"object","description":"Any valid JSON value"},"originalRecordingFile":{"type":"object","description":"Any valid JSON value"},"transcriptionFile":{"type":"object","description":"Any valid JSON value"},"humanTranscriptionFile":{"type":"object","description":"Any valid JSON value"},"campaign":{"type":"object","description":"Any valid JSON value"},"campaignLead":{"type":"object","description":"Any valid JSON value"},"aiDialogue":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"role":{"type":"string","enum":["developer"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]}}]},"name":{"type":"string"}},"required":["role","content"]},{"type":"object","properties":{"role":{"type":"string","enum":["system"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]}}]},"name":{"type":"string"}},"required":["role","content"]},{"type":"object","properties":{"role":{"type":"string","enum":["user"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"oneOf":[{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]},{"type":"object","properties":{"image_url":{"type":"object","properties":{"url":{"type":"string"},"detail":{"type":"string","enum":["auto","low","high"]}},"required":["url"]},"type":{"type":"string","enum":["image_url"]}},"required":["image_url","type"]},{"type":"object","properties":{"input_audio":{"type":"object","properties":{"data":{"type":"string"},"format":{"type":"string","enum":["wav","mp3"]}},"required":["data","format"]},"type":{"type":"string","enum":["input_audio"]}},"required":["input_audio","type"]}]}}]},"name":{"type":"string"}},"required":["role","content"]},{"type":"object","properties":{"role":{"type":"string","enum":["assistant"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]}},{"type":"array","items":{"type":"object","properties":{"refusal":{"type":"string"},"type":{"type":"string","enum":["refusal"]}},"required":["refusal","type"]}}],"nullable":true},"name":{"type":"string"},"tool_calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["function"]},"function":{"type":"object","properties":{"name":{"type":"string"},"arguments":{"type":"string"}},"required":["name","arguments"]}},"required":["id","type","function"]}},"function_call":{"type":"object","properties":{"name":{"type":"string"},"arguments":{"type":"string"}},"required":["name","arguments"],"nullable":true},"audio":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"nullable":true},"refusal":{"type":"string","nullable":true}},"required":["role"]},{"type":"object","properties":{"role":{"type":"string","enum":["tool"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]}}]},"tool_call_id":{"type":"string"}},"required":["role","content","tool_call_id"]},{"type":"object","properties":{"role":{"type":"string","enum":["function"]},"content":{"type":"string","nullable":true},"name":{"type":"string"}},"required":["role","name"]}]},"description":"AI dialogue messages"},"sensitiveData":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"placeholder":{"type":"string"},"type":{"type":"string","enum":["amka","afm","personal_number","id_card","passport","gemi","cy_tic","iban","card","cvv","pin","email","phone"]},"last4":{"type":"string"}},"required":["placeholder","type","last4"]}},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"recordingRedactedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"clipPlaceholders":{"type":"array","items":{"type":"string"}}},"required":["entries"],"description":"Placeholders in this call's transcript and their last four characters. Real values: the reveal endpoint (sensitive-data permission, audited)."},"scheduledAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"retries":{"type":"number","description":"Number of retries"},"maxRetries":{"type":"number","description":"Maximum number of retries"},"retryDelayMinutes":{"type":"number","description":"Retry delay in minutes"},"transferringDetails":{"type":"object","properties":{"callSourceId":{"type":"string","description":"Call source ID"},"callSourceCallId":{"type":"string","description":"Call source call ID"},"transferringStatus":{"type":"string","enum":["transferring","pending_confirmation","success","failed","aborted"],"description":"Transferring status"},"transferFailedReason":{"type":"string","description":"The reason the transfer failed"},"callDestinationId":{"type":"string","description":"Call destination ID"},"callDestinationCallId":{"type":"string","description":"Call destination call ID"},"announceTransferReason":{"type":"boolean","description":"Whether to announce the transfer reason"},"transferReason":{"type":"string","description":"The transfer reason"},"showCallerId":{"type":"boolean","description":"Whether to show the caller ID"},"callerId":{"type":"string","description":"The caller ID"},"transferMode":{"type":"string","enum":["blind","warm","attended"],"description":"Transfer mode for this in-flight transfer"},"blindTransfer":{"type":"boolean","description":"Deprecated — use transferMode"},"consultPhase":{"type":"string","enum":["idle","consulting_ringing","consulting_dest","back_with_caller","merged","cancelled"],"description":"Warm/attended consult: dest rings, talk to dest, swap back to caller, then merge or cancel"},"consultOperatorCallId":{"type":"string","description":"Operator call (B) that placed this consult leg"},"secondsToWaitForCallerToAnswer":{"type":"number","description":"The number of seconds to wait for the caller to answer the call"},"forwardedFrom":{"type":"string","description":"The number the call was forwarded from"},"destinationType":{"oneOf":[{"type":"string","enum":["User","External","Agent"]},{"type":"string","enum":["UserGroup"]},{"type":"string","enum":["UserEndpoint"]}],"description":"The type of the destination to transfer the call to"},"destinationId":{"type":"string","description":"The id of the destination (userId / userGroupId / agentId). Used to route an internal blind transfer looped back to our DID; destinationNumber still carries the dialable number for External."},"destinationNumber":{"type":"string","description":"The number to transfer the call to"},"agentIdToTransferTo":{"type":"string","description":"The agent ID to transfer the call to"},"agentVersionIdToTransferTo":{"type":"string","description":"Optional saved agent version to load after transfer"},"messageToPersonWantingToBeTransferred":{"type":"string","description":"The message to the person wanting to be transferred"},"analyzeTransferredCall":{"type":"boolean","description":"Whether to analyze the transferred call"},"agentIdToAnalyzeTransferredCall":{"type":"string","description":"The agent ID to analyze the transferred call"},"routedVia":{"type":"string","enum":["outbound_route","customer_pbx_inbound_fallback","remote_pbx_extension_fallback","provider_trunk_inbound_fallback"],"description":"How the outbound leg was routed for an external transfer."},"outboundTrunkId":{"type":"string","description":"SipTrunk id used for the outbound leg of an external transfer."},"outboundRouteId":{"type":"string","description":"OutboundRoute id that matched the destination, when an explicit route was used."},"inviteSentAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"referAcceptedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["callSourceId","callSourceCallId","transferringStatus","callerId","destinationType","destinationNumber"],"description":"Transferring details"},"transferAttempts":{"type":"array","items":{"type":"object","properties":{"destinationNumber":{"type":"string","description":"The number the transfer was attempted to"},"destinationType":{"type":"string","enum":["User","External","Agent"],"description":"The type of the transfer destination"},"status":{"type":"string","enum":["transferring","pending_confirmation","success","failed","aborted"],"description":"Terminal outcome of this attempt (success/failed)"},"transferReason":{"type":"string","description":"Why the agent transferred the call"},"transferFailedReason":{"type":"string","description":"Why this attempt failed, when recorded"},"at":{"type":"string","format":"date-time","description":"When the attempt reached its terminal status"}},"required":["status","at"]},"description":"History of finished transfer attempts (multi-attempt calls)"},"chatHandoff":{"type":"object","properties":{"status":{"type":"string","enum":["none","offering","live","offering_retransfer"]},"ownerUserId":{"type":"string","description":"Write lock — only this user may send live messages"},"ownerUserName":{"type":"string"},"offeredUserId":{"type":"string"},"offeredUserIds":{"type":"array","items":{"type":"string"},"description":"Every user currently ringing on a group offer. First accept cancels the rest."},"offeredUserName":{"type":"string"},"offeredByUserId":{"type":"string","description":"AI offer leaves this empty; retransfer sets the previous owner"},"destinationType":{"type":"string","enum":["UserEndpoint","UserGroup"]},"destinationId":{"type":"string","description":"UserEndpoint or UserGroup id currently offered or owned"},"reason":{"type":"string"},"offeredAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"acceptedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"secondsToWait":{"type":"number","minimum":5,"maximum":60}},"required":["status"],"description":"Live WhatsApp/widget human takeover — current offer or owner"},"chatHandoffAttempts":{"type":"array","items":{"type":"object","properties":{"fromUserId":{"type":"string","description":"Previous owner, if this was a user-to-user retransfer. Omitted when the AI offered."},"toUserId":{"type":"string","description":"User who was offered the thread"},"toUserName":{"type":"string"},"destinationId":{"type":"string","description":"UserEndpoint id that was offered"},"reason":{"type":"string"},"outcome":{"type":"string","enum":["accepted","declined","timeout","cancelled"]},"at":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["toUserId","outcome","at"]},"description":"History of finished chat handoff offers"},"networkQuality":{"type":"object","properties":{"packetsReceived":{"type":"number","description":"Total RTP packets received from the caller"},"packetsLost":{"type":"number","description":"Packets lost (from RTP sequence gaps)"},"lossPct":{"type":"number","description":"Cumulative packet loss percentage (0-100)"},"packetsOutOfOrder":{"type":"number","description":"Packets that arrived duplicated or out of order"},"jitterMs":{"type":"number","description":"Smoothed inter-arrival jitter in milliseconds"},"farEnd":{"type":"object","properties":{"reports":{"type":"number","description":"How many RTCP reception reports the far end sent"},"lossPct":{"type":"number","description":"Loss of OUR audio in the most recent report (0-100)"},"worstLossPct":{"type":"number","description":"Worst loss of OUR audio seen in any report (0-100)"},"packetsLost":{"type":"number","description":"Cumulative packets of ours the far end never received"},"jitter":{"type":"number","description":"Jitter the far end measured on our stream (RTP timestamp units)"}},"required":["reports","lossPct","worstLossPct","packetsLost","jitter"],"description":"The far end view of the audio we sent it, from its RTCP reception reports"}},"required":["packetsReceived","packetsLost","lossPct","packetsOutOfOrder","jitterMs"],"description":"Network quality summary (packet loss/jitter) from the RTP server"},"scenarioTest":{"type":"object","properties":{"scenarioId":{"type":"string","description":"AgentScenario under test"},"resultId":{"type":"string","description":"AgentScenarioResult row this leg belongs to"},"runId":{"type":"string","description":"Batch run id shared by all repetitions"},"role":{"type":"string","enum":["caller","agent_under_test"],"description":"caller = simulator leg, agent_under_test = inbound leg graded by the judge"},"useRealTools":{"type":"boolean","description":"When false, tools not mocked by the scenario must be blocked"},"mockedTools":{"type":"array","items":{"type":"object","properties":{"toolName":{"type":"string","description":"Function call / tool name to intercept"},"mode":{"type":"string","enum":["mock","real","block"],"description":"mock = return canned responses, real = execute normally, block = return a generic \"unavailable\" result"},"responses":{"type":"array","items":{"type":"object","properties":{"response":{"type":"string","description":"Payload the LLM receives as the tool result"},"delayMs":{"type":"number","description":"Artificial latency before returning the mock"},"fail":{"type":"boolean","description":"Simulate a tool error instead of a successful result"}},"required":["response"]},"description":"Sequential responses; the last entry repeats for further invocations"}},"required":["toolName","mode"]},"description":"Per-tool interception config stamped from the scenario for FunctionCallRunner"},"frozenNow":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"callDirection":{"type":"string","enum":["inbound","outbound"],"description":"Direction the scenario tests. The test leg is always inbound SIP-wise, so \"outbound\" only makes the agent prompt read as an outgoing call"},"scenarioName":{"type":"string","description":"Scenario text, written back after judging so call lists can label the test without a scenario lookup"},"passed":{"type":"boolean","description":"Judge verdict written back after evaluation — absent while the run is in progress or errored"},"score":{"type":"number","description":"Judge score 1-10 written back after evaluation"},"abruptEndAfterSeconds":{"type":"number","description":"Dropped-line simulation: hang this call up this many seconds after it connects, with no goodbye. Armed in-process by RtpService, which owns the call."}},"required":["scenarioId","resultId","role"],"description":"Set when this call is a live agent-scenario test leg"},"originalCallId":{"type":"string","description":"Original call identifier"},"scheduledReason":{"type":"string","enum":["retry","customer_callback","dropped_call"],"description":"Why this call was scheduled: retry, customer_callback (the person asked to be called back) or dropped_call"},"previousCallId":{"type":"string","description":"For agent-handoff legs: the `_id` of the previous Call doc that was finalized when the agent identity was swapped. Walking the chain backwards reconstructs the full per-agent timeline."},"useAntiHarassmentProtection":{"type":"boolean","description":"Whether to use anti-harassment protections (daily limits, cooldown, etc.)"},"overrideTimeRestriction":{"type":"boolean","description":"Whether to override time restrictions"},"overrideDayRestriction":{"type":"boolean","description":"Whether to override day restrictions"},"isWelcomeMessageAIGenerated":{"type":"boolean","description":"Whether the welcome message is AI generated"},"welcomeMessageOverride":{"type":"string","description":"Per-call welcome message spoken verbatim by the answering agent, overriding its configured first message."},"hostedOutbound":{"type":"boolean","description":"Whether this outbound call used the company/distributor trunk with a verified caller ID."},"fallbackForUserId":{"type":"string","description":"When the AI answered as a direct-to-extension fallback, the user the call was originally routed to. Scopes AI-created callbacks to that user."},"aiDisclosure":{"type":"object","properties":{"required":{"type":"boolean"},"played":{"type":"boolean"},"skippedReason":{"type":"string","enum":["disabled","transfer_whisper","session_resume","welcome_skipped","exception"]},"source":{"type":"string","enum":["welcome_text","composed","none"]},"matchedTerm":{"type":"string"},"language":{"type":"string"},"text":{"type":"string"},"playedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"recordingOffsetMs":{"type":"number"}},"required":["required","played"],"description":"Art. 50 AI disclosure snapshot for this call"},"useOwnApiKey":{"type":"boolean","description":"Whether the clients is using their own API key"},"rescheduled":{"type":"boolean","description":"Whether the call is scheduled"},"rescheduledAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"funnelStatus":{"type":"string","enum":["resolved","escalated","dropped","early_abandon","human_handled","technical_issue","frustrated_hung_up"],"description":"High-level funnel status for analytics (resolved, escalated, dropped, pending)"},"resolutionStatus":{"type":"string","enum":["converted","appointment_scheduled","lead_qualified","information_provided","issue_resolved","partially_resolved","callback_requested","contact_unavailable","not_interested","do_not_call","wrong_contact"],"description":"Detailed resolution outcome of the call"},"escalationReason":{"type":"string","enum":["complex_query","user_requested","user_frustration","knowledge_gap","sensitive_data_required","verification_failed","language_barrier","audio_quality_issues","vip_customer"],"description":"Reason why call was escalated to human (only applicable if escalated)"},"conversionStatus":{"type":"string","enum":["converted","not_converted"],"description":"Whether business goal was achieved (converted, not_converted)"},"callCategoryIds":{"type":"array","items":{"type":"string"},"description":"Array of call category identifiers for this call"},"callCategories":{"type":"array","items":{"type":"object","description":"Any valid JSON value"},"description":"Call categories information (populated from CallCategory)"},"postCallAnalysis":{"type":"string","enum":["not_started","in_progress","failed","completed"],"description":"Status of post call analysis (not-started, in_progress, failed, completed)"},"postCallAnalysisStages":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string","enum":["summary","transcription","analysis","workflow","appointment_reminder","send_skroutz_data","update_confirmed_appointment_with_data","has_asked_to_never_call_again","has_asked_for_callback","has_called_dropped","should_schedule_call_back_campaign_lead","auto_create_task","resolve_contact_callbacks","evaluate_conversation","evaluation","knowledge_unanswered","knowledge_gap_answers","knowledge_staff_answers","all","job"],"description":"Action to perform on the stage"},"status":{"type":"string","enum":["not_started","in_progress","failed","completed"],"description":"Status of the stage"},"retryCount":{"type":"number","description":"Number of retry attempts made"},"lastAttemptAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"error":{"type":"string","description":"Error message from the last failed attempt"}},"required":["action","status"]},"description":"Schema for post call analysis stages","example":{"stages":[{"action":"summary","status":"completed","retryCount":0,"lastAttemptAt":"2026-10-20T15:02:36.517Z"}]}},"evaluatedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"planId":{"type":"string","description":"The subscription plan ID active at the time of the call"},"resellerId":{"type":"string","description":"The reseller company ID linked with the customer at the time of the call"},"callHandler":{"type":"string","enum":["voip_phone","pbx_softphone","pbx_trunk","extension"],"description":"Which system processed the call (voip_phone, pbx_softphone, pbx_trunk)"},"appClientParticipantId":{"type":"string","description":"Rust participant sub-call ID for the app client (used to remove it on transfer)"},"seen":{"type":"array","items":{"type":"object","properties":{"seenByUserId":{"type":"string","description":"User who has seen this call"},"seenAt":{"type":"string","format":"date-time","description":"When the user saw the call"}},"required":["seenByUserId","seenAt"]},"description":"Users who have marked/viewed this call as seen"},"callerCard":{"type":"object","properties":{"links":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"customerKey":{"type":"string"},"label":{"type":"string"},"icon":{"type":"string"},"url":{"type":"string"},"kind":{"type":"string","enum":["record","no_match"]},"primary":{"type":"boolean"},"autoOpen":{"type":"string","enum":["off","on_answer","on_ring"]}},"required":["provider","label","icon","url","kind","primary","autoOpen"]}},"matches":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"customerKey":{"type":"string"},"label":{"type":"string"},"recordId":{"type":"string"},"displayName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"company":{"type":"string"},"url":{"type":"string"}},"required":["provider","customerKey","label"]}},"contact":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"company":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"}},"required":["id"]},"primaryProvider":{"type":"string"},"autoOpenUrl":{"type":"string"},"autoOpen":{"type":"string","enum":["off","on_answer","on_ring"]},"builtAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["links","matches","autoOpen","builtAt"],"description":"CRM caller card (matched records + \"Open in\" links) as shown when the call came in"},"isPrivate":{"type":"boolean","description":"Private call — visible only to its own user and super-admins"},"legalHold":{"type":"boolean","description":"Legal hold — retention and deletion skip this call until released"},"analysisOnDemand":{"type":"boolean","description":"Analysis on demand: the call was recorded but not transcribed or analysed; POST /phones/call/:id/analyze runs it"},"analysisRequestedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["id","createdAt","active","createdBy","createdById","companyId","callId","callerId","phoneNumber","status","messages","hertz","callDirection"],"description":"Response schema for call including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","callId":"call_123456789","callerId":"caller_987654321","contactId":"contact_456789","userId":"user_101112","voipPhoneId":"voip_131415","agentId":"agent_161718","phoneNumber":"+1234567890","status":"in_call","messages":[],"recordingFileId":"recording_192021","humanRecordingFileId":"human_recording_232425","transcriptionFileId":"transcription_222324","humanTranscriptionFileId":"human_transcription_262728","endCallReason":"caller_hungup","duration":180,"hertz":8000,"humanInCall":true,"summary":"Customer called about billing issue","callDirection":"inbound","transcriptionCost":0.03,"totalCost":0.2,"consumerCost":0.1,"dynamicVariables":{"customer_name":"John Doe","order_id":"ORD123"},"metadata":{"priority":"high","category":"support","appointmentReminder":"true","reminderMinutes":"30","eventId":"event_123","calendarId":"calendar_456","callBack":"false","viewUrl":"https://example.com/call/123","viewHumanRecordingUrl":"https://example.com/call/123/human","source":"inbound","campaign_type":"follow_up"},"superVariables":{"customer_name":{"placeholder":"{{customer_name}}","value":"John Doe","type":"text"},"appointment_date":{"placeholder":"{{appointment_date}}","value":"2024-01-15","type":"date"},"is_vip":{"placeholder":"{{is_vip}}","value":"true","type":"boolean"}},"contextForAi":"Customer is calling about a billing issue from last month","postAnalysisResults":{"sentiment":"positive","intent":"support"},"campaignId":"campaign_252627","campaignLeadId":"lead_282930","rtpPort":10000,"rtpIp":"192.168.1.100","startAt":"2024-01-15T10:30:00.000Z","endAt":"2024-01-15T10:33:00.000Z","scheduledAt":"2024-01-15T10:30:00.000Z","retries":0,"maxRetries":3,"retryDelayMinutes":10,"callInformation":{"priority":"high","category":"support"},"transferringStatus":"transferring","postCallAnalysis":"completed","postCallAnalysisStages":[{"action":"summary","status":"completed","retryCount":0,"lastAttemptAt":"2026-10-20T15:02:36.522Z"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"404":{"description":"Call not found","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Phones - Calls"]}},"/api/v1/phones/calls/bulk":{"delete":{"summary":"Delete several call records at once","responses":{"200":{"description":"Deletion result — how many were deleted and which ids failed","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"number","description":"How many calls were deleted"},"failed":{"type":"array","items":{"type":"string"},"description":"IDs that could not be deleted (not found or not owned by the company)"}},"required":["deleted","failed"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":500,"description":"IDs of the calls to delete (max 500 per request)"}},"required":["ids"]}}}},"security":[{"apiKey":[]}],"tags":["Phones - Calls"]}},"/api/v1/phones/calls/query":{"post":{"summary":"Query calls with filters, sorting and pagination","description":"Retrieve call records with advanced filtering, sorting, and pagination. Access detailed call information including recordings, transcriptions, AI analysis, and call metadata.\n\n**Query Capabilities:**\n- Filter by call status (completed, failed, in_progress, scheduled, etc.)\n- Filter by date range (createdAt) using `matchMode: 10` (Between)\n- Search by phone numbers (destination or source)\n- Filter by agent, user, or campaign\n- Sort by any field (date, duration, status, etc.)\n- Paginate with `pageSize` and `nextId`\n\n**Filter Match Modes:**\n- `1`: Equal - Exact match\n- `2`: NotEqual - Not equal to value\n- `3`: LessThan - Less than value\n- `4`: LessThanOrEqual - Less than or equal to value\n- `5`: GreaterThan - Greater than value\n- `6`: GreaterThanOrEqual - Greater than or equal to value\n- `7`: Like - Pattern matching (SQL LIKE)\n- `8`: Contains - Field contains value\n- `10`: Between - Value is between range (use `rangeValues` with `start` and `end`)\n- `11`: In - Value is in array (use `values` array)\n\n**Common Filter Fields:**\n- `createdAt`: Call creation timestamp (ISO 8601 date string) - use for date range queries\n- `status`: Call status (answered, failed, missed, in_call, etc.)\n- `phoneNumber`: Destination phone number\n- `agentId`: AI agent that handled the call\n- `callDirection`: inbound or outbound\n- `duration`: Call duration in seconds\n- `source`: Call source (api, web, phone, scheduled, campaign, workflow)\n\n**Example Request:**\nThe example below shows how to query calls from January 2024 with status \"answered\", sorted by creation date descending.\n\n**Response Includes:**\n- Call details (duration, status, timestamps)\n- Phone numbers (source and destination)\n- Contactd agent or user information\n- Recording and transcription URLs\n- AI analysis and summary\n- Dynamic variables and metadata\n- Call direction (inbound/outbound)\n\n**Common Use Cases:**\n- Export call logs for reporting\n- Find all failed calls for retry\n- Get calls for a specific customer or agent\n- Retrieve calls within a date range for analytics","responses":{"200":{"description":"Got paginated result successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"_def":{"unknownKeys":"strip","catchall":{"_def":{"typeName":"ZodNever"},"~standard":{"version":1,"vendor":"zod"}},"typeName":"ZodObject","meta":{"example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","callId":"call_123456789","callerId":"caller_987654321","contactId":"contact_456789","userId":"user_101112","voipPhoneId":"voip_131415","agentId":"agent_161718","phoneNumber":"+1234567890","status":"in_call","messages":[],"recordingFileId":"recording_192021","humanRecordingFileId":"human_recording_232425","transcriptionFileId":"transcription_222324","humanTranscriptionFileId":"human_transcription_262728","endCallReason":"caller_hungup","duration":180,"hertz":8000,"humanInCall":true,"summary":"Customer called about billing issue","callDirection":"inbound","transcriptionCost":0.03,"totalCost":0.2,"consumerCost":0.1,"dynamicVariables":{"customer_name":"John Doe","order_id":"ORD123"},"metadata":{"priority":"high","category":"support","appointmentReminder":"true","reminderMinutes":"30","eventId":"event_123","calendarId":"calendar_456","callBack":"false","viewUrl":"https://example.com/call/123","viewHumanRecordingUrl":"https://example.com/call/123/human","source":"inbound","campaign_type":"follow_up"},"superVariables":{"customer_name":{"placeholder":"{{customer_name}}","value":"John Doe","type":"text"},"appointment_date":{"placeholder":"{{appointment_date}}","value":"2024-01-15","type":"date"},"is_vip":{"placeholder":"{{is_vip}}","value":"true","type":"boolean"}},"contextForAi":"Customer is calling about a billing issue from last month","postAnalysisResults":{"sentiment":"positive","intent":"support"},"campaignId":"campaign_252627","campaignLeadId":"lead_282930","rtpPort":10000,"rtpIp":"192.168.1.100","startAt":"2024-01-15T10:30:00.000Z","endAt":"2024-01-15T10:33:00.000Z","scheduledAt":"2024-01-15T10:30:00.000Z","retries":0,"maxRetries":3,"retryDelayMinutes":10,"callInformation":{"priority":"high","category":"support"},"transferringStatus":"transferring","postCallAnalysis":"completed","postCallAnalysisStages":[{"action":"summary","status":"completed","retryCount":0,"lastAttemptAt":"2026-10-20T15:02:36.522Z"}]}},"description":"Response schema for call including company metadata"},"~standard":{"version":1,"vendor":"zod"},"_cached":null},"description":"Array of response data"},"total":{"type":"integer","description":"Total number of records"},"nextId":{"type":"string","nullable":true,"description":"ID of the next page, if available"},"currentTotal":{"type":"integer","description":"Number of records in the current response"}},"required":["data","total","currentTotal"],"example":{"data":[{}],"total":1,"nextId":null,"currentTotal":1}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"pagedListRequest":{"type":"object","properties":{"nextId":{"type":"string","nullable":true,"description":"ID of the next page for cursor-based pagination. Use null for the first page, then use the ID returned in the response for subsequent pages."},"pageSize":{"type":"integer","default":50,"description":"Number of calls to return per page (default: 50, max: 100)"}},"description":"Pagination settings"},"queryOptionsRequest":{"type":"object","properties":{"filtersRequest":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"Field name to filter on (e.g., \"createdAt\", \"status\", \"phoneNumber\", \"agentId\", \"callDirection\")"},"matchMode":{"type":"number","description":"Filter match mode: 1=Equal, 2=NotEqual, 3=LessThan, 4=LessThanOrEqual, 5=GreaterThan, 6=GreaterThanOrEqual, 7=Like, 8=Contains, 10=Between (for date ranges), 11=In"},"operator":{"type":"number","nullable":true,"description":"Logical operator between multiple filters: 1=AND, 2=OR"},"value":{"type":"object","description":"Single value to filter against (for Equal, Like, etc.)","nullable":true},"values":{"type":"array","items":{"type":"object","description":"Any valid JSON value"},"nullable":true,"description":"Array of values for In operations"},"rangeValues":{"type":"object","properties":{"start":{"type":"object","description":"Start value of the range (ISO 8601 date string for date fields)"},"end":{"type":"object","description":"End value of the range (ISO 8601 date string for date fields)"}},"required":["start","end"],"nullable":true,"description":"Range values for Between operations (used for date ranges)"},"ignoreCase":{"type":"boolean","nullable":true,"description":"Whether to perform case-insensitive comparison"}},"required":["field","matchMode"]},"description":"List of filters to apply to the query"},"sortRequest":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"Field name to sort by (e.g., \"createdAt\", \"duration\", \"status\")"},"direction":{"type":"number","description":"Sort direction: 0=Ascending, 1=Descending"},"priority":{"type":"integer","description":"Sort priority when multiple sort fields are specified (lower number = higher priority)"}},"required":["field","direction","priority"]},"description":"List of sort operations to apply"},"includes":{"type":"array","items":{"type":"string"},"description":"Related entities to include in the response: \"agent\", \"contact\", \"voipPhone\", \"user\", \"recordingFile\", \"transcriptionFile\", \"campaign\", \"humanRecordingFile\", \"humanTranscriptionFile\""},"selectFields":{"type":"array","items":{"type":"string"},"description":"Specific fields to return in the response. Leave empty to return all fields."},"excludeFields":{"type":"array","items":{"type":"string"},"description":"Fields to leave out (ignored when selectFields is set), e.g. \"messages\", \"aiDialogue\". \"agent.systemPrompt\" slims an included record."}},"required":["filtersRequest","sortRequest","includes","selectFields"],"description":"Query filter, sort, and include options"}},"required":["pagedListRequest","queryOptionsRequest"],"description":"Request schema for querying calls with filters, sorting, and pagination","example":{"pagedListRequest":{"nextId":null,"pageSize":50},"queryOptionsRequest":{"filtersRequest":[{"field":"createdAt","matchMode":10,"operator":1,"value":null,"values":null,"rangeValues":{"start":"2024-01-01T00:00:00.000Z","end":"2024-01-31T23:59:59.999Z"},"ignoreCase":null},{"field":"status","matchMode":1,"operator":1,"value":"answered","values":null,"rangeValues":null,"ignoreCase":true}],"sortRequest":[{"field":"createdAt","direction":1,"priority":1}],"includes":["agent","contact","voipPhone"],"selectFields":[]}}},"example":{"pagedListRequest":{"nextId":null,"pageSize":50},"queryOptionsRequest":{"filtersRequest":[{"field":"createdAt","matchMode":10,"operator":1,"value":null,"values":null,"rangeValues":{"start":"2024-01-01T00:00:00.000Z","end":"2024-01-31T23:59:59.999Z"},"ignoreCase":null},{"field":"status","matchMode":1,"operator":1,"value":"answered","values":null,"rangeValues":null,"ignoreCase":true}],"sortRequest":[{"field":"createdAt","direction":1,"priority":1}],"includes":["agent","contact","voipPhone"],"selectFields":[]}}}}},"security":[{"apiKey":[]}],"tags":["Phones - Calls"]}},"/api/v1/phones/calls/count":{"post":{"summary":"Count calls matching a query","description":"Total number of calls matching the same `queryOptionsRequest` filters as POST /query. Split out so the page of rows never waits on the count; pagination and sort are ignored.","responses":{"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"pagedListRequest":{"type":"object","properties":{"nextId":{"type":"string","nullable":true,"description":"ID of the next page for cursor-based pagination. Use null for the first page, then use the ID returned in the response for subsequent pages."},"pageSize":{"type":"integer","default":50,"description":"Number of calls to return per page (default: 50, max: 100)"}},"description":"Pagination settings"},"queryOptionsRequest":{"type":"object","properties":{"filtersRequest":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"Field name to filter on (e.g., \"createdAt\", \"status\", \"phoneNumber\", \"agentId\", \"callDirection\")"},"matchMode":{"type":"number","description":"Filter match mode: 1=Equal, 2=NotEqual, 3=LessThan, 4=LessThanOrEqual, 5=GreaterThan, 6=GreaterThanOrEqual, 7=Like, 8=Contains, 10=Between (for date ranges), 11=In"},"operator":{"type":"number","nullable":true,"description":"Logical operator between multiple filters: 1=AND, 2=OR"},"value":{"type":"object","description":"Single value to filter against (for Equal, Like, etc.)","nullable":true},"values":{"type":"array","items":{"type":"object","description":"Any valid JSON value"},"nullable":true,"description":"Array of values for In operations"},"rangeValues":{"type":"object","properties":{"start":{"type":"object","description":"Start value of the range (ISO 8601 date string for date fields)"},"end":{"type":"object","description":"End value of the range (ISO 8601 date string for date fields)"}},"required":["start","end"],"nullable":true,"description":"Range values for Between operations (used for date ranges)"},"ignoreCase":{"type":"boolean","nullable":true,"description":"Whether to perform case-insensitive comparison"}},"required":["field","matchMode"]},"description":"List of filters to apply to the query"},"sortRequest":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"Field name to sort by (e.g., \"createdAt\", \"duration\", \"status\")"},"direction":{"type":"number","description":"Sort direction: 0=Ascending, 1=Descending"},"priority":{"type":"integer","description":"Sort priority when multiple sort fields are specified (lower number = higher priority)"}},"required":["field","direction","priority"]},"description":"List of sort operations to apply"},"includes":{"type":"array","items":{"type":"string"},"description":"Related entities to include in the response: \"agent\", \"contact\", \"voipPhone\", \"user\", \"recordingFile\", \"transcriptionFile\", \"campaign\", \"humanRecordingFile\", \"humanTranscriptionFile\""},"selectFields":{"type":"array","items":{"type":"string"},"description":"Specific fields to return in the response. Leave empty to return all fields."},"excludeFields":{"type":"array","items":{"type":"string"},"description":"Fields to leave out (ignored when selectFields is set), e.g. \"messages\", \"aiDialogue\". \"agent.systemPrompt\" slims an included record."}},"required":["filtersRequest","sortRequest","includes","selectFields"],"description":"Query filter, sort, and include options"}},"required":["pagedListRequest","queryOptionsRequest"],"description":"Request schema for querying calls with filters, sorting, and pagination","example":{"pagedListRequest":{"nextId":null,"pageSize":50},"queryOptionsRequest":{"filtersRequest":[{"field":"createdAt","matchMode":10,"operator":1,"value":null,"values":null,"rangeValues":{"start":"2024-01-01T00:00:00.000Z","end":"2024-01-31T23:59:59.999Z"},"ignoreCase":null},{"field":"status","matchMode":1,"operator":1,"value":"answered","values":null,"rangeValues":null,"ignoreCase":true}],"sortRequest":[{"field":"createdAt","direction":1,"priority":1}],"includes":["agent","contact","voipPhone"],"selectFields":[]}}},"example":{"pagedListRequest":{"nextId":null,"pageSize":50},"queryOptionsRequest":{"filtersRequest":[{"field":"createdAt","matchMode":10,"operator":1,"value":null,"values":null,"rangeValues":{"start":"2024-01-01T00:00:00.000Z","end":"2024-01-31T23:59:59.999Z"},"ignoreCase":null},{"field":"status","matchMode":1,"operator":1,"value":"answered","values":null,"rangeValues":null,"ignoreCase":true}],"sortRequest":[{"field":"createdAt","direction":1,"priority":1}],"includes":["agent","contact","voipPhone"],"selectFields":[]}}}}},"security":[{"apiKey":[]}],"tags":["Phones - Calls"]}},"/api/v1/phones/calls/upload-recording":{"post":{"summary":"Upload call recording file with metadata","description":"Upload a call recording file along with linked metadata for storage and processing. The system will store the recording, generate transcriptions, and create AI analysis.\n\n**Required Fields:**\n- `recording`: Audio file (multipart/form-data, supported formats: WAV, MP3, OGG)\n- `callStart`: Call start timestamp (ISO 8601 format)\n- `companyPhoneNumber`: Your company's phone number\n- `contactPhoneNumber`: Customer/contact phone number\n- `callDirection`: \"inbound\" or \"outbound\"\n\n**Optional Fields:**\n- `callId`: Link to existing call record\n- `agentId`: Contact with specific agent\n- `duration`: Call duration in seconds\n- `notes`: Additional notes about the call\n- `companyEmailAddress`: Company email\n- `contactEmailAddress`: Contact email\n- `companyTimezone`: Timezone for timestamps\n\n**Processing:**\n- Recording is stored securely in cloud storage\n- Automatic transcription is generated\n- AI analysis creates call summary and insights\n- Metadata is indexed for search and reporting\n\n**Use Cases:**\n- Import recordings from external phone systems\n- Backup call recordings for compliance\n- Add historical calls to Voice Logica for analysis\n- Integrate third-party telephony systems","responses":{"200":{"description":"Call recording uploaded successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"callId":{"type":"string","description":"Call identifier"},"callerId":{"type":"string","description":"Caller identifier"},"contactId":{"type":"string","description":"Contact identifier"},"userId":{"type":"string","description":"User identifier"},"userName":{"type":"string","description":"Display name of userId — stamped on list responses so grids need no second lookup"},"voipPhoneId":{"type":"string","description":"VoIP phone identifier"},"sipTrunkId":{"type":"string","description":"SIP trunk identifier (for trunk-routed calls)"},"agentId":{"type":"string","description":"Agent identifier"},"agentVersionId":{"type":"string","description":"Agent version/staging snapshot used for this call"},"agentVersionNumber":{"type":"number","description":"Version number dialed (0 = staging); omitted for prod"},"agentVersionKind":{"type":"string","enum":["prod","staging","version"],"description":"prod, or a named version"},"agentVersionDescription":{"type":"string","description":"Version name shown on the call when not Prod"},"phoneNumber":{"type":"string","description":"Phone number"},"status":{"type":"string","enum":["failed","cancelled","answered_elsewhere","transferring","transferred","failed_during_call","to_be_processed","trying","ringing","busy","missed","in_call","answered","voice_mail","session_progress","scheduled"],"description":"Call status"},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["Agent","User","Contact","Tool","System"],"description":"Role of the message sender"},"toolCallId":{"type":"string","nullable":true,"description":"Tool call identifier if applicable"},"content":{"type":"string","description":"Message content"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp when message was sent"},"seconds":{"type":"number","description":"Duration in seconds"},"agentId":{"type":"string","nullable":true,"description":"Agent identifier if applicable"},"contactId":{"type":"string","nullable":true,"description":"Contact identifier if applicable"},"userId":{"type":"string","nullable":true,"description":"User identifier if applicable"},"completionTurnMs":{"type":"number","description":"Completion turn time in milliseconds"},"voiceTurnMs":{"type":"number","description":"Voice turn time in milliseconds"},"totalTurnMs":{"type":"number","description":"Total turn time in milliseconds"},"speakerId":{"type":"number","description":"Speaker identifier"},"participantLabel":{"type":"string","description":"Label of the participant (e.g. \"Caller: 6982364479\", \"Transfer: 2103009090\")"},"translatedContent":{"type":"string","description":"Live-translated version of `content`, when live translation was active for this turn."},"originalLanguage":{"type":"string","description":"Detected spoken language of `content` (ISO 639-1, e.g. \"de\")."},"translatedLanguage":{"type":"string","description":"Target language of `translatedContent` (ISO 639-1, e.g. \"el\")."}},"required":["role","content","timestamp","seconds"],"description":"Schema for call message","example":{"role":"Agent","toolCallId":"tool_call_123","agentId":"agent_456","contactId":"contact_789","userId":"user_101","content":"Hello, how can I help you today?","timestamp":"2024-01-15T10:30:00.000Z","seconds":30,"completionTurnMs":1500,"voiceTurnMs":2000,"totalTurnMs":3500,"speakerId":1}},"description":"Call messages. Empty when recordingEnabled is false — the verbatim transcript is withheld by policy for calls made with recording disabled."},"recordingEnabled":{"type":"boolean","description":"Whether recording was enabled by policy when the call ran. false → messages/aiDialogue/transcription files are withheld (summary and post-analysis remain); absent on older calls (treated as recorded)."},"recordingFileId":{"type":"string","description":"Recording file identifier"},"humanRecordingFileId":{"type":"string","description":"Human recording file identifier"},"originalRecordingFileId":{"type":"string","description":"Original (untranslated) recording file identifier, present when live translation was active"},"transcriptionFileId":{"type":"string","description":"Transcription file identifier"},"humanTranscriptionFileId":{"type":"string","description":"Human transcription file identifier"},"endCallReason":{"type":"string","enum":["caller_hungup","user_hungup","caller_voice_mail","caller_does_not_exist","wrong_set_number","call_maximum_time_reached","caller_unresponsive_after_nudges","call_transferred","caller_busy","caller_declined","no_channels","unavailable","voip_phone_offline","voip_phone_service_failed","no_agent_id","phone_number_not_found","agent_not_found","no_remote_rtp_address","no_selected_codec","no_remote_rtp_port","voip_provider_issue","inbound_calls_blocked","no_rtp_stream","no_pickup_after_ringing_max_seconds","sdp_error","not_acceptable_here","voip_temporary_issue","voip_phone_not_exist","caller_does_not_speak","message_left","no_channels_available_in_plan","forbidden","failed_to_connect","call_stuck","no_seconds_available_in_plan","maximum_time","subscription_issue","incorect_code","transfer_request_true","transfer_request_false","no_voip_connection","insufficient_balance_in_voip_provider","caller_called_back","campaign_not_active","outside_campaign_schedule","agent_handoff","off_hours_welcome_message","answered_elsewhere"],"description":"End call reason"},"sipFailure":{"type":"object","properties":{"code":{"type":"number","description":"SIP status code of the final INVITE response"},"reason":{"type":"string","description":"SIP reason phrase as the carrier sent it"},"warning":{"type":"string","description":"SIP Warning header"},"q850":{"type":"number","description":"Q.850 cause from the Reason header"},"kind":{"type":"string","enum":["number_not_in_service","invalid_number","rejected","barred","phone_unreachable","network_busy","no_credit"],"description":"Plain-language category for the user"}},"required":["code"],"description":"What the carrier said when it refused the call (failed calls only)"},"duration":{"type":"number","description":"Call duration in seconds"},"hertz":{"type":"number","description":"Audio frequency in hertz"},"humanInCall":{"type":"boolean","description":"Whether human is in call"},"summary":{"type":"string","description":"Call summary"},"shortSummary":{"type":"string","description":"One-line summary for call cards"},"callDirection":{"type":"string","enum":["inbound","outbound"],"description":"Call direction"},"voiceCost":{"type":"object","properties":{"cost":{"type":"number","description":"Current cost"},"savedCost":{"type":"number","description":"Saved cost"},"totalCost":{"type":"number","description":"Total cost"},"characters":{"type":"number","description":"Number of characters"},"charactersSaved":{"type":"number","description":"Number of characters saved"},"totalCharacters":{"type":"number","description":"Total number of characters"}},"required":["cost","savedCost","totalCost","characters","charactersSaved","totalCharacters"],"description":"Schema for call voice cost information","example":{"cost":0.05,"savedCost":0.02,"totalCost":0.07,"characters":150,"charactersSaved":50,"totalCharacters":200}},"transcriptionCost":{"type":"number","description":"Transcription cost"},"completionCost":{"type":"object","properties":{"inputTokens":{"type":"number","description":"Number of input tokens"},"cachedInputTokens":{"type":"number","description":"Number of cached input tokens (served from prompt cache)"},"cacheWriteTokens":{"type":"number","description":"Input tokens written to the provider prompt cache (billed at a premium on GPT-5.6+)"},"outputTokens":{"type":"number","description":"Number of output tokens"},"reasoningTokens":{"type":"number","description":"Number of reasoning tokens (for reasoning models like o1, o3, gpt-5)"},"totalTokens":{"type":"number","description":"Total number of tokens"},"inputCost":{"type":"number","description":"Input cost"},"cachedInputCost":{"type":"number","description":"Cached input cost (typically 90% cheaper than regular input)"},"completionCost":{"type":"number","description":"Completion cost"},"reasoningCost":{"type":"number","description":"Reasoning tokens cost (billed as output tokens)"},"totalCost":{"type":"number","description":"Total cost"},"callCompletionCost":{"type":"number","description":"Call completion cost"},"analysisCompletionCost":{"type":"number","description":"Analysis completion cost"},"speculative":{"type":"boolean","description":"This request was a speculative pre-<end> fire (tag rides through to ModelUsage)"}},"required":["inputTokens","outputTokens","totalTokens","inputCost","completionCost","totalCost"],"description":"Schema for call completion cost information","example":{"inputTokens":100,"cachedInputTokens":50,"outputTokens":50,"reasoningTokens":10,"totalTokens":210,"inputCost":0.02,"cachedInputCost":0.001,"completionCost":0.01,"reasoningCost":0.002,"totalCost":0.033}},"totalCost":{"type":"number","description":"Total cost"},"consumerCost":{"type":"number","description":"Total Cost of the Call for the Consumer"},"dynamicVariables":{"type":"object","additionalProperties":{"type":"string"},"description":"Dynamic variables"},"source":{"type":"string","enum":["app","api","web","mcp","phone","mobile","mobile-bridge","scheduled","waitlist","campaign","workflow","recording","transfer","google-meet","meeting","whatsapp","viber","telegram","instagram","instagram_comment","messenger","messenger_comment","email","vicidial-seat","campaign-seat","vicidial","phone-verification"],"description":"Source of the call"},"mobileTransferKind":{"type":"string","enum":["pin_bridge","busy_forward","callback","no_answer_forward"],"description":"Mobile transfer mode: pin_bridge or busy_forward"},"mobileUserId":{"type":"string","description":"Mobile seat user id for PIN bridge / busy-forward"},"mobileTransferAiFallback":{"type":"boolean","description":"Busy-forward fell back to AI for the waiting caller"},"mobileTransferAiFallbackReason":{"type":"string","description":"Why busy-forward fell back to AI"},"messageOnly":{"type":"boolean","description":"Personal assistant with no voice minutes: welcome message, then recorded the caller only (analysis minutes)"},"mobileBridgeNoDestLeg":{"type":"boolean","description":"Hidden bridge leg whose transfer never produced a destination leg — kept visible so the call is not lost from the grid"},"participants":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ai","trunk","softphone","app","transfer","meet"],"description":"Legacy transport-flavoured type. New writers populate `role` + `deviceKind` instead."},"role":{"type":"string","enum":["Agent","User","Contact"],"description":"Conversational role β€” Agent (AI), User (VL user being reached on a device), or Contact (external CRM contact). Mirrors `CallMessage.role`. The carrier/trunk is transport, not a participant."},"status":{"type":"string","enum":["invited","ringing","joined","left","no_answer","rejected","failed","cancelled","unreachable"],"description":"Lifecycle status. Transitions invited β†’ joined β†’ left on the happy path; invited β†’ no_answer/rejected/failed/cancelled/unreachable otherwise."},"invitedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"joinedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"leftAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"deviceKind":{"type":"string","enum":["app","sip","mobile","trunk","meet"],"description":"How the participant is connected. `app`/`sip`/`mobile` for VL users; `trunk` for an external party reached via SIP carrier; `meet` for Google Meet participants."},"participantId":{"type":"string","description":"Stable id for this participant within the call (Rust sub-call ID for RTP legs, Meet participant resource name for Meet)"},"extensionNumber":{"type":"string","description":"Internal extension number for softphone / app participants β€” the user's extensionNumber at the time the call leg was created. Static for the call, no rename concern."},"phoneNumber":{"type":"string","description":"Dialed / caller external phone number for trunk / transfer / meet participants. Captured at participant create time; for Contact display, prefer the live `contact.mainPhoneNumber` first and fall back to this."},"callId":{"type":"string","description":"Rust-side call ID for this channel"},"codec":{"type":"string","description":"Codec used (PCMA, PCMU, G722, PCM16, …). Sample rate is `hertz`, not part of the codec name."},"hertz":{"type":"number","description":"Audio sample rate in Hz (8000 for SIP and the app UDP leg)."},"rtpPort":{"type":"number","description":"Allocated RTP port on Rust"},"serverIp":{"type":"string","description":"Rust server IP"},"remoteAddress":{"type":"string","description":"Remote RTP address"},"remotePort":{"type":"number","description":"Remote RTP port"},"transcribe":{"type":"boolean","description":"Whether to start transcription for this participant"},"initiator":{"type":"boolean","description":"Whether this participant initiated the call (hangup = end for all)"},"contactId":{"type":"string","description":"Contact ID for this participant (external party β€” CRM contact)"},"contactName":{"type":"string","description":"Denormalized contact display name for fast UI rendering β€” set at participant create time so the frontend doesn't have to refetch the Contact doc just to label a transcript turn."},"contact":{"type":"object","description":"Any valid JSON value"},"userId":{"type":"string","description":"VL user ID for this participant (internal user on their mobile/app β€” distinct from contactId which is a CRM contact)"},"userName":{"type":"string","description":"Denormalized VL user name for fast UI rendering. Same rationale as contactName."},"user":{"type":"object","description":"Any valid JSON value"},"agentId":{"type":"string","description":"AI Agent ID when this participant is the AI leg (type=ai) or when the participant is being analyzed/transcribed by a specific agent (type=trunk/softphone/app on a transcriptionOnly call). Lets the frontend show \"Sales Agent\" next to the AI's turns and link to the agent definition."},"agentName":{"type":"string","description":"Denormalized agent name for fast UI rendering."},"agent":{"type":"object","description":"Any valid JSON value"},"displayName":{"type":"string","description":"Display name (Meet/Zoom/Teams)"},"email":{"type":"string","description":"Email address (Meet/Zoom/Teams)"},"isOrganizer":{"type":"boolean","description":"Whether this participant is the meeting organizer (Meet/Zoom/Teams)"},"joinKind":{"type":"string","enum":["signed_in","phone","anonymous"],"description":"How the participant joined (Meet/Zoom/Teams)"},"durationSeconds":{"type":"number","description":"Total seconds the participant was joined (Meet/Zoom/Teams)"}}},"description":"Conversational participants β€” Agent / User / Contact. The carrier/trunk is transport, not a participant. Append-only with lifecycle status."},"ringTargets":{"type":"array","items":{"type":"object","properties":{"participantId":{"type":"string","description":"Participant this ring target belongs to. Same value as the participant's `participantId`."},"userId":{"type":"string","description":"VL user being reached (when the participant is role=User)."},"contactId":{"type":"string","description":"CRM contact being reached (when the participant is role=Contact)."},"deviceKind":{"type":"string","enum":["app","sip","mobile","trunk","meet"],"description":"Which device kind was tried."},"deviceId":{"type":"string","description":"Identifier for the specific device: UserEndpoint id, ExtensionRegistration id, or phone-number hash for mobile-callback."},"address":{"type":"string","description":"Dialed address β€” SIP URI, mobile number, etc. For debugging / CDR display."},"status":{"type":"string","enum":["invited","ringing","joined","left","no_answer","rejected","failed","cancelled","unreachable"],"description":"Outcome of this ring attempt."},"startedAt":{"type":"string","format":"date-time","description":"When the INVITE / push went out."},"endedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"failureReason":{"type":"string","description":"Free-text reason when status is failed/unreachable (e.g. \"no registration\", \"5xx from softphone\", \"carrier rejected\")."}},"required":["participantId","deviceKind","status","startedAt"]},"description":"Per-device dial attempts when one participant was forked to multiple devices."},"meetRecordingDriveFileId":{"type":"string","description":"Google Drive file ID of the Meet recording (only for source=google-meet)"},"meetAlternateDriveFileIds":{"type":"array","items":{"type":"string"},"description":"Other teammates Drive copies of the same Meet recording"},"meetConferenceRecordId":{"type":"string","description":"Google Meet conferenceRecord resource name (only for source=google-meet)"},"meetParticipantEmails":{"type":"array","items":{"type":"string"},"description":"Resolved participant email addresses (only for source=google-meet)"},"meetOrganizerEmail":{"type":"string","description":"Email of the meeting organizer (only for source=google-meet)"},"analysedByAi":{"type":"string","enum":["pending","failed","created","completed"],"description":"Whether the call was analysed by AI"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Metadata - Common examples include: appointmentReminder (true/false), reminderMinutes (number as string), eventId, eventIds (JSON string), calendarId, contactId, agentId, callId, voipPhoneId, phoneNumber, totalAppointments (number as string), callBack (true/false), viewUrl, viewHumanRecordingUrl, priority (high/medium/low), category (support/sales/billing), source (inbound/outbound), campaign_type, lead_score"},"superVariables":{"type":"object","additionalProperties":{"type":"object","properties":{"placeholder":{"type":"string","description":"Placeholder text to be replaced"},"value":{"type":"string","description":"Value to replace the placeholder"},"type":{"type":"string","enum":["text","number","boolean","date","time"],"description":"Type of the variable"}},"required":["placeholder","value"],"description":"Schema for super variable","example":{"placeholder":"{{customer_name}}","value":"John Doe","type":"text"}},"description":"Super variables - Typed key-value pairs with placeholders for advanced call data"},"contextForAi":{"type":"string","description":"Context for AI"},"llmConversationId":{"type":"string","description":"LLM conversation ID for maintaining stateful context across provider APIs (Gemini Interactions, OpenAI Responses, etc.)"},"postAnalysisResults":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},{"type":"object","properties":{}}]},"description":"Post analysis results - AI-generated analysis data from call processing (includes scalars and arrays such as email_recipients / email_cc_recipients / sms_recipients)"},"feedback":{"type":"object","properties":{"rating":{"type":"number","minimum":1,"maximum":5},"comment":{"type":"string"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"channel":{"type":"string","enum":["widget","sms"]}},"required":["rating"],"description":"Post-conversation customer satisfaction feedback (widget or SMS form)"},"callerVerification":{"type":"object","properties":{"status":{"type":"string","enum":["unverified","pending","verified"]},"channel":{"type":"string","enum":["email","sms","google","known_field"]},"associateId":{"type":"string"},"verifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["status"],"description":"Caller verification status (OTP or Google; no OTP stored)"},"encryptedId":{"type":"string","description":"Encrypted identifier - Encrypted call identifier for security"},"campaignId":{"type":"string","description":"Campaign identifier"},"campaignLeadId":{"type":"string","description":"Campaign lead identifier"},"outboundResult":{"type":"object","properties":{"humanJoined":{"type":"boolean"},"humanResponded":{"type":"boolean","description":"Callee spoke — not SIP answer, not voicemail"},"askedToNeverCallAgain":{"type":"boolean"},"askedToCallBackLater":{"type":"boolean"},"dateTimeToCallBack":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"description":"Outbound call result"},"rtpPort":{"type":"number","description":"RTP port"},"rtpIp":{"type":"string","description":"RTP IP address"},"startAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"endAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contact":{"type":"object","description":"Any valid JSON value"},"user":{"type":"object","description":"Any valid JSON value"},"voipPhone":{"type":"object","description":"Any valid JSON value"},"callInformation":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Call information"},"agent":{"type":"object","description":"Any valid JSON value"},"recordingFile":{"type":"object","description":"Any valid JSON value"},"humanRecordingFile":{"type":"object","description":"Any valid JSON value"},"originalRecordingFile":{"type":"object","description":"Any valid JSON value"},"transcriptionFile":{"type":"object","description":"Any valid JSON value"},"humanTranscriptionFile":{"type":"object","description":"Any valid JSON value"},"campaign":{"type":"object","description":"Any valid JSON value"},"campaignLead":{"type":"object","description":"Any valid JSON value"},"aiDialogue":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"role":{"type":"string","enum":["developer"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]}}]},"name":{"type":"string"}},"required":["role","content"]},{"type":"object","properties":{"role":{"type":"string","enum":["system"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]}}]},"name":{"type":"string"}},"required":["role","content"]},{"type":"object","properties":{"role":{"type":"string","enum":["user"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"oneOf":[{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]},{"type":"object","properties":{"image_url":{"type":"object","properties":{"url":{"type":"string"},"detail":{"type":"string","enum":["auto","low","high"]}},"required":["url"]},"type":{"type":"string","enum":["image_url"]}},"required":["image_url","type"]},{"type":"object","properties":{"input_audio":{"type":"object","properties":{"data":{"type":"string"},"format":{"type":"string","enum":["wav","mp3"]}},"required":["data","format"]},"type":{"type":"string","enum":["input_audio"]}},"required":["input_audio","type"]}]}}]},"name":{"type":"string"}},"required":["role","content"]},{"type":"object","properties":{"role":{"type":"string","enum":["assistant"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]}},{"type":"array","items":{"type":"object","properties":{"refusal":{"type":"string"},"type":{"type":"string","enum":["refusal"]}},"required":["refusal","type"]}}],"nullable":true},"name":{"type":"string"},"tool_calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["function"]},"function":{"type":"object","properties":{"name":{"type":"string"},"arguments":{"type":"string"}},"required":["name","arguments"]}},"required":["id","type","function"]}},"function_call":{"type":"object","properties":{"name":{"type":"string"},"arguments":{"type":"string"}},"required":["name","arguments"],"nullable":true},"audio":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"nullable":true},"refusal":{"type":"string","nullable":true}},"required":["role"]},{"type":"object","properties":{"role":{"type":"string","enum":["tool"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["text"]}},"required":["text","type"]}}]},"tool_call_id":{"type":"string"}},"required":["role","content","tool_call_id"]},{"type":"object","properties":{"role":{"type":"string","enum":["function"]},"content":{"type":"string","nullable":true},"name":{"type":"string"}},"required":["role","name"]}]},"description":"AI dialogue messages"},"sensitiveData":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"placeholder":{"type":"string"},"type":{"type":"string","enum":["amka","afm","personal_number","id_card","passport","gemi","cy_tic","iban","card","cvv","pin","email","phone"]},"last4":{"type":"string"}},"required":["placeholder","type","last4"]}},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"recordingRedactedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"clipPlaceholders":{"type":"array","items":{"type":"string"}}},"required":["entries"],"description":"Placeholders in this call's transcript and their last four characters. Real values: the reveal endpoint (sensitive-data permission, audited)."},"scheduledAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"retries":{"type":"number","description":"Number of retries"},"maxRetries":{"type":"number","description":"Maximum number of retries"},"retryDelayMinutes":{"type":"number","description":"Retry delay in minutes"},"transferringDetails":{"type":"object","properties":{"callSourceId":{"type":"string","description":"Call source ID"},"callSourceCallId":{"type":"string","description":"Call source call ID"},"transferringStatus":{"type":"string","enum":["transferring","pending_confirmation","success","failed","aborted"],"description":"Transferring status"},"transferFailedReason":{"type":"string","description":"The reason the transfer failed"},"callDestinationId":{"type":"string","description":"Call destination ID"},"callDestinationCallId":{"type":"string","description":"Call destination call ID"},"announceTransferReason":{"type":"boolean","description":"Whether to announce the transfer reason"},"transferReason":{"type":"string","description":"The transfer reason"},"showCallerId":{"type":"boolean","description":"Whether to show the caller ID"},"callerId":{"type":"string","description":"The caller ID"},"transferMode":{"type":"string","enum":["blind","warm","attended"],"description":"Transfer mode for this in-flight transfer"},"blindTransfer":{"type":"boolean","description":"Deprecated — use transferMode"},"consultPhase":{"type":"string","enum":["idle","consulting_ringing","consulting_dest","back_with_caller","merged","cancelled"],"description":"Warm/attended consult: dest rings, talk to dest, swap back to caller, then merge or cancel"},"consultOperatorCallId":{"type":"string","description":"Operator call (B) that placed this consult leg"},"secondsToWaitForCallerToAnswer":{"type":"number","description":"The number of seconds to wait for the caller to answer the call"},"forwardedFrom":{"type":"string","description":"The number the call was forwarded from"},"destinationType":{"oneOf":[{"type":"string","enum":["User","External","Agent"]},{"type":"string","enum":["UserGroup"]},{"type":"string","enum":["UserEndpoint"]}],"description":"The type of the destination to transfer the call to"},"destinationId":{"type":"string","description":"The id of the destination (userId / userGroupId / agentId). Used to route an internal blind transfer looped back to our DID; destinationNumber still carries the dialable number for External."},"destinationNumber":{"type":"string","description":"The number to transfer the call to"},"agentIdToTransferTo":{"type":"string","description":"The agent ID to transfer the call to"},"agentVersionIdToTransferTo":{"type":"string","description":"Optional saved agent version to load after transfer"},"messageToPersonWantingToBeTransferred":{"type":"string","description":"The message to the person wanting to be transferred"},"analyzeTransferredCall":{"type":"boolean","description":"Whether to analyze the transferred call"},"agentIdToAnalyzeTransferredCall":{"type":"string","description":"The agent ID to analyze the transferred call"},"routedVia":{"type":"string","enum":["outbound_route","customer_pbx_inbound_fallback","remote_pbx_extension_fallback","provider_trunk_inbound_fallback"],"description":"How the outbound leg was routed for an external transfer."},"outboundTrunkId":{"type":"string","description":"SipTrunk id used for the outbound leg of an external transfer."},"outboundRouteId":{"type":"string","description":"OutboundRoute id that matched the destination, when an explicit route was used."},"inviteSentAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"referAcceptedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["callSourceId","callSourceCallId","transferringStatus","callerId","destinationType","destinationNumber"],"description":"Transferring details"},"transferAttempts":{"type":"array","items":{"type":"object","properties":{"destinationNumber":{"type":"string","description":"The number the transfer was attempted to"},"destinationType":{"type":"string","enum":["User","External","Agent"],"description":"The type of the transfer destination"},"status":{"type":"string","enum":["transferring","pending_confirmation","success","failed","aborted"],"description":"Terminal outcome of this attempt (success/failed)"},"transferReason":{"type":"string","description":"Why the agent transferred the call"},"transferFailedReason":{"type":"string","description":"Why this attempt failed, when recorded"},"at":{"type":"string","format":"date-time","description":"When the attempt reached its terminal status"}},"required":["status","at"]},"description":"History of finished transfer attempts (multi-attempt calls)"},"chatHandoff":{"type":"object","properties":{"status":{"type":"string","enum":["none","offering","live","offering_retransfer"]},"ownerUserId":{"type":"string","description":"Write lock — only this user may send live messages"},"ownerUserName":{"type":"string"},"offeredUserId":{"type":"string"},"offeredUserIds":{"type":"array","items":{"type":"string"},"description":"Every user currently ringing on a group offer. First accept cancels the rest."},"offeredUserName":{"type":"string"},"offeredByUserId":{"type":"string","description":"AI offer leaves this empty; retransfer sets the previous owner"},"destinationType":{"type":"string","enum":["UserEndpoint","UserGroup"]},"destinationId":{"type":"string","description":"UserEndpoint or UserGroup id currently offered or owned"},"reason":{"type":"string"},"offeredAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"acceptedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"secondsToWait":{"type":"number","minimum":5,"maximum":60}},"required":["status"],"description":"Live WhatsApp/widget human takeover — current offer or owner"},"chatHandoffAttempts":{"type":"array","items":{"type":"object","properties":{"fromUserId":{"type":"string","description":"Previous owner, if this was a user-to-user retransfer. Omitted when the AI offered."},"toUserId":{"type":"string","description":"User who was offered the thread"},"toUserName":{"type":"string"},"destinationId":{"type":"string","description":"UserEndpoint id that was offered"},"reason":{"type":"string"},"outcome":{"type":"string","enum":["accepted","declined","timeout","cancelled"]},"at":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["toUserId","outcome","at"]},"description":"History of finished chat handoff offers"},"networkQuality":{"type":"object","properties":{"packetsReceived":{"type":"number","description":"Total RTP packets received from the caller"},"packetsLost":{"type":"number","description":"Packets lost (from RTP sequence gaps)"},"lossPct":{"type":"number","description":"Cumulative packet loss percentage (0-100)"},"packetsOutOfOrder":{"type":"number","description":"Packets that arrived duplicated or out of order"},"jitterMs":{"type":"number","description":"Smoothed inter-arrival jitter in milliseconds"},"farEnd":{"type":"object","properties":{"reports":{"type":"number","description":"How many RTCP reception reports the far end sent"},"lossPct":{"type":"number","description":"Loss of OUR audio in the most recent report (0-100)"},"worstLossPct":{"type":"number","description":"Worst loss of OUR audio seen in any report (0-100)"},"packetsLost":{"type":"number","description":"Cumulative packets of ours the far end never received"},"jitter":{"type":"number","description":"Jitter the far end measured on our stream (RTP timestamp units)"}},"required":["reports","lossPct","worstLossPct","packetsLost","jitter"],"description":"The far end view of the audio we sent it, from its RTCP reception reports"}},"required":["packetsReceived","packetsLost","lossPct","packetsOutOfOrder","jitterMs"],"description":"Network quality summary (packet loss/jitter) from the RTP server"},"scenarioTest":{"type":"object","properties":{"scenarioId":{"type":"string","description":"AgentScenario under test"},"resultId":{"type":"string","description":"AgentScenarioResult row this leg belongs to"},"runId":{"type":"string","description":"Batch run id shared by all repetitions"},"role":{"type":"string","enum":["caller","agent_under_test"],"description":"caller = simulator leg, agent_under_test = inbound leg graded by the judge"},"useRealTools":{"type":"boolean","description":"When false, tools not mocked by the scenario must be blocked"},"mockedTools":{"type":"array","items":{"type":"object","properties":{"toolName":{"type":"string","description":"Function call / tool name to intercept"},"mode":{"type":"string","enum":["mock","real","block"],"description":"mock = return canned responses, real = execute normally, block = return a generic \"unavailable\" result"},"responses":{"type":"array","items":{"type":"object","properties":{"response":{"type":"string","description":"Payload the LLM receives as the tool result"},"delayMs":{"type":"number","description":"Artificial latency before returning the mock"},"fail":{"type":"boolean","description":"Simulate a tool error instead of a successful result"}},"required":["response"]},"description":"Sequential responses; the last entry repeats for further invocations"}},"required":["toolName","mode"]},"description":"Per-tool interception config stamped from the scenario for FunctionCallRunner"},"frozenNow":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"callDirection":{"type":"string","enum":["inbound","outbound"],"description":"Direction the scenario tests. The test leg is always inbound SIP-wise, so \"outbound\" only makes the agent prompt read as an outgoing call"},"scenarioName":{"type":"string","description":"Scenario text, written back after judging so call lists can label the test without a scenario lookup"},"passed":{"type":"boolean","description":"Judge verdict written back after evaluation — absent while the run is in progress or errored"},"score":{"type":"number","description":"Judge score 1-10 written back after evaluation"},"abruptEndAfterSeconds":{"type":"number","description":"Dropped-line simulation: hang this call up this many seconds after it connects, with no goodbye. Armed in-process by RtpService, which owns the call."}},"required":["scenarioId","resultId","role"],"description":"Set when this call is a live agent-scenario test leg"},"originalCallId":{"type":"string","description":"Original call identifier"},"scheduledReason":{"type":"string","enum":["retry","customer_callback","dropped_call"],"description":"Why this call was scheduled: retry, customer_callback (the person asked to be called back) or dropped_call"},"previousCallId":{"type":"string","description":"For agent-handoff legs: the `_id` of the previous Call doc that was finalized when the agent identity was swapped. Walking the chain backwards reconstructs the full per-agent timeline."},"useAntiHarassmentProtection":{"type":"boolean","description":"Whether to use anti-harassment protections (daily limits, cooldown, etc.)"},"overrideTimeRestriction":{"type":"boolean","description":"Whether to override time restrictions"},"overrideDayRestriction":{"type":"boolean","description":"Whether to override day restrictions"},"isWelcomeMessageAIGenerated":{"type":"boolean","description":"Whether the welcome message is AI generated"},"welcomeMessageOverride":{"type":"string","description":"Per-call welcome message spoken verbatim by the answering agent, overriding its configured first message."},"hostedOutbound":{"type":"boolean","description":"Whether this outbound call used the company/distributor trunk with a verified caller ID."},"fallbackForUserId":{"type":"string","description":"When the AI answered as a direct-to-extension fallback, the user the call was originally routed to. Scopes AI-created callbacks to that user."},"aiDisclosure":{"type":"object","properties":{"required":{"type":"boolean"},"played":{"type":"boolean"},"skippedReason":{"type":"string","enum":["disabled","transfer_whisper","session_resume","welcome_skipped","exception"]},"source":{"type":"string","enum":["welcome_text","composed","none"]},"matchedTerm":{"type":"string"},"language":{"type":"string"},"text":{"type":"string"},"playedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"recordingOffsetMs":{"type":"number"}},"required":["required","played"],"description":"Art. 50 AI disclosure snapshot for this call"},"useOwnApiKey":{"type":"boolean","description":"Whether the clients is using their own API key"},"rescheduled":{"type":"boolean","description":"Whether the call is scheduled"},"rescheduledAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"funnelStatus":{"type":"string","enum":["resolved","escalated","dropped","early_abandon","human_handled","technical_issue","frustrated_hung_up"],"description":"High-level funnel status for analytics (resolved, escalated, dropped, pending)"},"resolutionStatus":{"type":"string","enum":["converted","appointment_scheduled","lead_qualified","information_provided","issue_resolved","partially_resolved","callback_requested","contact_unavailable","not_interested","do_not_call","wrong_contact"],"description":"Detailed resolution outcome of the call"},"escalationReason":{"type":"string","enum":["complex_query","user_requested","user_frustration","knowledge_gap","sensitive_data_required","verification_failed","language_barrier","audio_quality_issues","vip_customer"],"description":"Reason why call was escalated to human (only applicable if escalated)"},"conversionStatus":{"type":"string","enum":["converted","not_converted"],"description":"Whether business goal was achieved (converted, not_converted)"},"callCategoryIds":{"type":"array","items":{"type":"string"},"description":"Array of call category identifiers for this call"},"callCategories":{"type":"array","items":{"type":"object","description":"Any valid JSON value"},"description":"Call categories information (populated from CallCategory)"},"postCallAnalysis":{"type":"string","enum":["not_started","in_progress","failed","completed"],"description":"Status of post call analysis (not-started, in_progress, failed, completed)"},"postCallAnalysisStages":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string","enum":["summary","transcription","analysis","workflow","appointment_reminder","send_skroutz_data","update_confirmed_appointment_with_data","has_asked_to_never_call_again","has_asked_for_callback","has_called_dropped","should_schedule_call_back_campaign_lead","auto_create_task","resolve_contact_callbacks","evaluate_conversation","evaluation","knowledge_unanswered","knowledge_gap_answers","knowledge_staff_answers","all","job"],"description":"Action to perform on the stage"},"status":{"type":"string","enum":["not_started","in_progress","failed","completed"],"description":"Status of the stage"},"retryCount":{"type":"number","description":"Number of retry attempts made"},"lastAttemptAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"error":{"type":"string","description":"Error message from the last failed attempt"}},"required":["action","status"]},"description":"Schema for post call analysis stages","example":{"stages":[{"action":"summary","status":"completed","retryCount":0,"lastAttemptAt":"2026-10-20T15:02:36.517Z"}]}},"evaluatedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"planId":{"type":"string","description":"The subscription plan ID active at the time of the call"},"resellerId":{"type":"string","description":"The reseller company ID linked with the customer at the time of the call"},"callHandler":{"type":"string","enum":["voip_phone","pbx_softphone","pbx_trunk","extension"],"description":"Which system processed the call (voip_phone, pbx_softphone, pbx_trunk)"},"appClientParticipantId":{"type":"string","description":"Rust participant sub-call ID for the app client (used to remove it on transfer)"},"seen":{"type":"array","items":{"type":"object","properties":{"seenByUserId":{"type":"string","description":"User who has seen this call"},"seenAt":{"type":"string","format":"date-time","description":"When the user saw the call"}},"required":["seenByUserId","seenAt"]},"description":"Users who have marked/viewed this call as seen"},"callerCard":{"type":"object","properties":{"links":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"customerKey":{"type":"string"},"label":{"type":"string"},"icon":{"type":"string"},"url":{"type":"string"},"kind":{"type":"string","enum":["record","no_match"]},"primary":{"type":"boolean"},"autoOpen":{"type":"string","enum":["off","on_answer","on_ring"]}},"required":["provider","label","icon","url","kind","primary","autoOpen"]}},"matches":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"customerKey":{"type":"string"},"label":{"type":"string"},"recordId":{"type":"string"},"displayName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"company":{"type":"string"},"url":{"type":"string"}},"required":["provider","customerKey","label"]}},"contact":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"company":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"}},"required":["id"]},"primaryProvider":{"type":"string"},"autoOpenUrl":{"type":"string"},"autoOpen":{"type":"string","enum":["off","on_answer","on_ring"]},"builtAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["links","matches","autoOpen","builtAt"],"description":"CRM caller card (matched records + \"Open in\" links) as shown when the call came in"},"isPrivate":{"type":"boolean","description":"Private call — visible only to its own user and super-admins"},"legalHold":{"type":"boolean","description":"Legal hold — retention and deletion skip this call until released"},"analysisOnDemand":{"type":"boolean","description":"Analysis on demand: the call was recorded but not transcribed or analysed; POST /phones/call/:id/analyze runs it"},"analysisRequestedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["id","createdAt","active","createdBy","createdById","companyId","callId","callerId","phoneNumber","status","messages","hertz","callDirection"],"description":"Response schema for call including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","callId":"call_123456789","callerId":"caller_987654321","contactId":"contact_456789","userId":"user_101112","voipPhoneId":"voip_131415","agentId":"agent_161718","phoneNumber":"+1234567890","status":"in_call","messages":[],"recordingFileId":"recording_192021","humanRecordingFileId":"human_recording_232425","transcriptionFileId":"transcription_222324","humanTranscriptionFileId":"human_transcription_262728","endCallReason":"caller_hungup","duration":180,"hertz":8000,"humanInCall":true,"summary":"Customer called about billing issue","callDirection":"inbound","transcriptionCost":0.03,"totalCost":0.2,"consumerCost":0.1,"dynamicVariables":{"customer_name":"John Doe","order_id":"ORD123"},"metadata":{"priority":"high","category":"support","appointmentReminder":"true","reminderMinutes":"30","eventId":"event_123","calendarId":"calendar_456","callBack":"false","viewUrl":"https://example.com/call/123","viewHumanRecordingUrl":"https://example.com/call/123/human","source":"inbound","campaign_type":"follow_up"},"superVariables":{"customer_name":{"placeholder":"{{customer_name}}","value":"John Doe","type":"text"},"appointment_date":{"placeholder":"{{appointment_date}}","value":"2024-01-15","type":"date"},"is_vip":{"placeholder":"{{is_vip}}","value":"true","type":"boolean"}},"contextForAi":"Customer is calling about a billing issue from last month","postAnalysisResults":{"sentiment":"positive","intent":"support"},"campaignId":"campaign_252627","campaignLeadId":"lead_282930","rtpPort":10000,"rtpIp":"192.168.1.100","startAt":"2024-01-15T10:30:00.000Z","endAt":"2024-01-15T10:33:00.000Z","scheduledAt":"2024-01-15T10:30:00.000Z","retries":0,"maxRetries":3,"retryDelayMinutes":10,"callInformation":{"priority":"high","category":"support"},"transferringStatus":"transferring","postCallAnalysis":"completed","postCallAnalysisStages":[{"action":"summary","status":"completed","retryCount":0,"lastAttemptAt":"2026-10-20T15:02:36.522Z"}]}}}}},"400":{"description":"Bad request - Invalid file or metadata","content":{"application/json":{}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"recording":{"type":"string","format":"binary","description":"Call recording audio file"},"callStart":{"type":"string","format":"date-time","description":"Call start time (ISO string)"},"companyPhoneNumber":{"type":"string","description":"Company phone number"},"companyEmailAddress":{"type":"string","description":"Company email address"},"contactPhoneNumber":{"type":"string","description":"Contact phone number"},"contactEmailAddress":{"type":"string","description":"Contact email address"},"companyTimezone":{"type":"string","description":"Company timezone"},"callDirection":{"type":"string","enum":["inbound","outbound"],"description":"Call direction"},"callId":{"type":"string","description":"Linked call ID"},"agentId":{"type":"string","description":"Agent ID who handled the call"},"duration":{"type":"number","description":"Call duration in seconds"},"notes":{"type":"string","description":"Additional notes about the call"}}}}}},"security":[{"apiKey":[]}],"tags":["Phones - Calls"]}},"/api/v1/phones/calls/initiate-bulk":{"post":{"summary":"Initiate bulk outbound calls with AI agent","description":"Initiate multiple outbound AI phone calls in a single request. Each call is scheduled and processed independently, allowing partial success — some calls may succeed while others fail.\n\n**Use Case:**\nUse this endpoint instead of calling initiate-call repeatedly when you need to reach multiple phone numbers. Ideal for campaigns, batch follow-ups, appointment reminders, or any scenario requiring parallel outreach.\n\n**Request:**\n- `calls`: Array of 1–50 call requests, each with a phone number and optional per-call settings\n- Each call entry accepts the same fields as the single initiate-call endpoint\n- If `agentId` or `voipPhoneId` are omitted, the company's MCP default settings are used\n\n**Per-Call Fields:**\n- `phoneNumber` (required): Destination number in E.164 format (e.g., +306912345678)\n- `agentId` (optional): AI agent to handle this specific call\n- `voipPhoneId` (optional): VoIP phone to use for this specific call\n- `callerId` (optional): Override caller ID shown to the recipient\n- `contextForAi` (optional): Additional context appended to the agent's system prompt\n- `dynamicVariables` (optional): Key-value pairs accessible to the agent (e.g., customer name, order ID)\n- `scheduledAt` (optional): ISO 8601 date-time to schedule the call for a future time\n- `maxRetries` (optional): Retry attempts if call fails (0–3, default 2). Retries occur after 10 minutes\n- `overrideTimeRestriction` (optional): Bypass 9 AM – 9 PM local time restrictions\n\n**Scheduling Behavior:**\n- All bulk calls are created as **scheduled** calls (status: \"scheduled\")\n- If `scheduledAt` is provided and is in the future, the call is scheduled for that time\n- If `scheduledAt` is omitted or in the past, the call is scheduled 1 minute from now\n- The system processes scheduled calls automatically at their scheduled time\n\n**Anti-Harassment Protection:**\n- All bulk calls have anti-harassment protection enabled by default\n- Limits: max 3 outbound calls/day, 1-hour cooldown between outbound calls to the same number\n- Calls that violate these limits will fail with a descriptive error\n\n**Response:**\nReturns an array of results in the same order as the input calls array. Each result contains:\n- `phoneNumber`: The destination number\n- `success`: Whether the call was scheduled successfully\n- `id`: Call ID for tracking (on success) — use with GET /{id} or cancel-scheduled-calls\n- `status`: Always \"scheduled\" on success\n- `message`: Human-readable status with scheduling details\n- `error`: Error description (on failure)\n\n**Limits:**\n- Maximum 50 calls per request\n- Subject to your plan's concurrent call limits and available channels\n- Each call counts toward anti-harassment quotas independently\n\n**HTTP Status Codes:**\n- `200 OK`: Request processed (check individual results for per-call success/failure)\n- `400 Bad Request`: Invalid request body (empty array, exceeds 50 calls, or schema validation error)\n- `500 Internal Server Error`: Server-side error (retry later)\n\n**Example Workflow:**\n1. Call this endpoint with an array of phone numbers and per-call context\n2. Check the response for per-call success/failure\n3. Use GET /calls/{id} to check individual call results after they complete\n4. Use GET /calls/statistics to see aggregate campaign performance","responses":{"200":{"description":"Bulk calls processed — per-call results returned","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"The destination phone number for this call"},"success":{"type":"boolean","description":"Whether the call was successfully scheduled"},"id":{"type":"string","description":"Call ID if successful — use this to track the call via get-call-by-id or cancel via cancel-scheduled-calls"},"status":{"type":"string","description":"Call status if successful (always \"scheduled\" for bulk calls)"},"callerId":{"type":"string","description":"Caller ID if successful"},"message":{"type":"string","description":"Human-readable status message with scheduling details and guidance"},"error":{"type":"string","description":"Error description if the call could not be scheduled"}},"required":["phoneNumber","success"],"description":"Per-call result within a bulk call response","example":{"phoneNumber":"+306912345678","success":true,"id":"507f1f77bcf86cd799439011","status":"scheduled","callerId":"+306912345678","message":"Call scheduled for 2026-03-21T14:01:00.000Z. Use leads_query (action \"get_scheduled_calls\") to monitor or leads_execute (action \"cancel_scheduled_calls\") to cancel."}},"description":"Array of per-call results — one entry per call in the request, in the same order","example":[{"phoneNumber":"+306912345678","success":true,"id":"507f1f77bcf86cd799439011","status":"scheduled","callerId":"+306912345678","message":"Call scheduled for 2026-03-21T14:01:00.000Z. Use leads_query (action \"get_scheduled_calls\") to monitor or leads_execute (action \"cancel_scheduled_calls\") to cancel."},{"phoneNumber":"+306987654321","success":false,"error":"Daily call limit reached for this phone number (max 3 calls/day)."}]}}}},"400":{"description":"Bad Request — invalid request body or empty calls array","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["agent_not_found","voip_phone_not_found","distributor_not_found","call_already_scheduled","failed_to_schedule_call","yuboto_allowed_dialer_not_found","maximum_authentication_attempts_exceeded","contact_not_found"],"description":"Error code indicating a validation or business rule violation. Fix the request before retrying."},"reason":{"type":"string","description":"Human-readable error message explaining what went wrong and suggested action"}},"required":["error","reason"],"description":"Bad Request Error Response (400) - Validation errors. Fix the request before retrying.","example":{"error":"agent_not_found","reason":"Agent not found"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"calls":{"type":"array","items":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Destination phone number to call (E.164 format preferred, e.g., +306912345678)"},"agentId":{"type":"string","description":"Agent ID to handle the call. Falls back to company's default agent from MCP settings if not provided"},"voipPhoneId":{"type":"string","description":"VoIP phone ID for the call. Falls back to company's default VoIP phone from MCP settings if not provided"},"callerId":{"type":"string","description":"The phone number or SIP URI shown to the recipient as the caller. Overrides the default caller ID of the VoIP phone. Use a full E.164 phone number (e.g. \"+302101234567\") or a SIP identity (e.g. \"sip:user@domain.com\"). If omitted, the VoIP phone's own caller ID is used."},"contextForAi":{"type":"string","maxLength":12000,"description":"Additional context appended to the agent's system prompt for this specific call. Typically contains customer details, call purpose, or situation-specific information. Example: \"Customer has open support ticket #1234, prefers communication in Greek.\""},"dynamicVariables":{"type":"object","additionalProperties":{"type":"string"},"description":"Key-value pairs accessible to the AI agent during the call as named template variables. Example: { \"customer_name\": \"John Doe\", \"order_id\": \"ORD-123\" }"},"scheduledAt":{"type":"string","description":"Schedule the call for a future date/time (ISO 8601 format, e.g. \"2026-03-22T14:00:00Z\"). If not provided or in the past, the call is scheduled 1 minute from now."},"maxRetries":{"type":"number","minimum":0,"maximum":3,"description":"Total calls to this number, the first one included (0–3, default 2): 2 = the first call plus 1 retry; 0 or 1 = no retry. A retry is placed 10 minutes after a busy line, no answer, voicemail or a failed call."},"overrideTimeRestriction":{"type":"boolean","description":"Bypass 9 AM – 9 PM local time restrictions for the destination country. Set to true to call at any time."}},"required":["phoneNumber"]},"minItems":1,"maxItems":50,"description":"Array of call requests to process (1–50 calls per request). Each entry follows the same schema as the single initiate-call endpoint."}},"required":["calls"],"description":"Request schema for initiating bulk outbound AI phone calls","example":{"calls":[{"phoneNumber":"+306912345678","agentId":"your_agent_id","contextForAi":"Customer has open support ticket #1234","dynamicVariables":{"customer_name":"John Doe","ticket_id":"1234"}},{"phoneNumber":"+306987654321","contextForAi":"Follow up on quote sent last week","dynamicVariables":{"customer_name":"Jane Smith","quote_id":"Q-567"},"scheduledAt":"2026-03-22T14:00:00Z"}]}},"example":{"calls":[{"phoneNumber":"+306912345678","agentId":"your_agent_id","contextForAi":"Customer has open support ticket #1234","dynamicVariables":{"customer_name":"John Doe","ticket_id":"1234"}},{"phoneNumber":"+306987654321","contextForAi":"Follow up on quote sent last week","dynamicVariables":{"customer_name":"Jane Smith","quote_id":"Q-567"},"scheduledAt":"2026-03-22T14:00:00Z"}]}}}},"security":[{"apiKey":[]}],"tags":["Phones - Calls"]}},"/api/v1/phones/calls/scheduled":{"post":{"summary":"List pending scheduled calls","description":"List all pending scheduled calls for the company — calls with status \"scheduled\" or \"to_be_processed\" whose scheduled time is in the future, sorted by scheduled time ascending.\n\n**Filters (all optional):**\n- `agentId`: Only calls assigned to this agent\n- `phoneNumber`: Only calls to this destination number (matched with and without country-code prefix)\n- `limit`: Maximum results (default 100, max 500)\n\n**Response:**\nEach entry includes the call `id` (use it with the cancel-scheduled endpoint), destination number, scheduled time, agent, VoIP phone, AI context, dynamic variables, and retry counters.\n\n**Typical Workflow:**\n1. Schedule calls via initiate-call (`scheduledAt`) or initiate-bulk\n2. Call this endpoint to review what is queued\n3. Cancel unwanted calls via the cancel-scheduled endpoint","responses":{"200":{"description":"Scheduled calls retrieved","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Call ID (use this to cancel the call)"},"phoneNumber":{"type":"string","description":"Destination phone number"},"scheduledAt":{"type":"string","format":"date-time","description":"When the call is scheduled to be placed"},"agentId":{"type":"string","description":"Agent ID handling the call"},"voipPhoneId":{"type":"string","description":"VoIP phone ID used for the call (legacy)"},"sipTrunkId":{"type":"string","description":"SIP trunk ID used for the call"},"contextForAi":{"type":"string","description":"AI context for the call"},"dynamicVariables":{"type":"object","additionalProperties":{"type":"string"},"description":"Dynamic variables for the call"},"retries":{"type":"number","description":"Current retry count"},"maxRetries":{"type":"number","description":"Maximum retries allowed"},"createdAt":{"type":"string","format":"date-time","description":"When the call was created"}},"required":["id","phoneNumber","scheduledAt","createdAt"]},"description":"Pending scheduled calls, sorted by scheduled time ascending","example":[{"id":"507f1f77bcf86cd799439011","phoneNumber":"+306912345678","scheduledAt":"2026-03-21T14:00:00.000Z","agentId":"507f1f77bcf86cd799439012","voipPhoneId":"507f1f77bcf86cd799439013","contextForAi":"Customer requested a callback about their pending order.","dynamicVariables":{"customer_name":"John Doe","order_id":"ORD-123"},"retries":0,"maxRetries":2,"createdAt":"2026-03-20T09:15:00.000Z"}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"agentId":{"type":"string","description":"Filter scheduled calls by agent ID"},"phoneNumber":{"type":"string","description":"Filter scheduled calls by destination phone number"},"limit":{"type":"number","minimum":1,"maximum":500,"default":100,"description":"Maximum number of scheduled calls to return (default: 100, max: 500)"}}}}}},"security":[{"apiKey":[]}],"tags":["Phones - Calls"]}},"/api/v1/phones/calls/cancel-scheduled":{"post":{"summary":"Cancel scheduled calls","description":"Cancel one or more scheduled calls by their IDs. Only calls with status \"scheduled\" or \"to_be_processed\" can be cancelled; calls that already started or completed are reported as already processed.\n\n**Request:**\n- `callIds`: Array of 1–100 call IDs. Get the IDs from the scheduled-calls list endpoint or from the initiate-call/initiate-bulk response.\n\n**Response:**\nAggregate counters (`totalRequested`, `cancelled`, `alreadyProcessed`, `notFound`) plus per-call `results` with a `reason` for each failure. Cancellation is partial: valid IDs are cancelled even if others in the same request fail.\n\n**Note:** Cancelled calls are marked as cancelled with end reason \"Cancelled by user\" and are not retried.","responses":{"200":{"description":"Cancellation processed — per-call results returned","content":{"application/json":{"schema":{"type":"object","properties":{"totalRequested":{"type":"number","description":"Number of call IDs provided"},"cancelled":{"type":"number","description":"Number of calls successfully cancelled"},"alreadyProcessed":{"type":"number","description":"Number of calls that were already processed (not scheduled)"},"notFound":{"type":"number","description":"Number of call IDs that were not found"},"results":{"type":"array","items":{"type":"object","properties":{"callId":{"type":"string"},"success":{"type":"boolean"},"reason":{"type":"string"}},"required":["callId","success"]},"description":"Per-call cancellation results"}},"required":["totalRequested","cancelled","alreadyProcessed","notFound","results"],"example":{"totalRequested":2,"cancelled":1,"alreadyProcessed":1,"notFound":0,"results":[{"callId":"507f1f77bcf86cd799439011","success":true},{"callId":"507f1f77bcf86cd799439014","success":false,"reason":"Call is already answered"}]}}}}},"400":{"description":"Bad Request — invalid request body or empty callIds array","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["agent_not_found","voip_phone_not_found","distributor_not_found","call_already_scheduled","failed_to_schedule_call","yuboto_allowed_dialer_not_found","maximum_authentication_attempts_exceeded","contact_not_found"],"description":"Error code indicating a validation or business rule violation. Fix the request before retrying."},"reason":{"type":"string","description":"Human-readable error message explaining what went wrong and suggested action"}},"required":["error","reason"],"description":"Bad Request Error Response (400) - Validation errors. Fix the request before retrying.","example":{"error":"agent_not_found","reason":"Agent not found"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"callIds":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100,"description":"Array of call IDs to cancel (1–100). Use leads_query (action \"get_scheduled_calls\") to find the IDs."}},"required":["callIds"]}}}},"security":[{"apiKey":[]}],"tags":["Phones - Calls"]}},"/api/v1/phones/sip-trunks/query":{"post":{"summary":"Query SIP trunks with filters, sorting and pagination","description":"List SIP trunks for the company with standard query parameters.","responses":{"200":{"description":"SIP trunks retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"_def":{"unknownKeys":"strip","catchall":{"_def":{"typeName":"ZodNever"},"~standard":{"version":1,"vendor":"zod"}},"typeName":"ZodObject","meta":{"example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Carrier A","host":"sip.carrier.example","port":5060,"transport":"udp","sipTrunkRole":"provider_trunk","source":"custom","supportsInbound":true,"supportsOutbound":true,"inboundAuthType":"ip_auth","outboundAuthType":"registration","username":"user","password":"secret","ipWhitelist":["203.0.113.10"],"domain":"carrier.example","sipProxy":"vpbx-sbc.carrier.example","defaultPhoneNumber":"2192192051","codecs":["pcmu","pcma","telephone-event"],"enabled":true,"allowOriginationThroughRemotePbx":false,"registered":true,"lastRegisteredAt":"2024-01-15T09:00:00.000Z","registrationExpiresSeconds":300,"registrationRefreshSeconds":240,"destinationType":"ai_agent","destinationId":"507f1f77bcf86cd799439022","trunkNumberCount":2,"inboundTrunkNumberCount":1,"outboundCallerIdTrunkNumberCount":2,"hasInboundTrunkNumbers":true,"inboundPeers":[]}},"description":"Response schema for a SIP trunk including company metadata, audit fields, and registration state"},"~standard":{"version":1,"vendor":"zod"},"_cached":null},"description":"Array of response data"},"total":{"type":"integer","description":"Total number of records"},"nextId":{"type":"string","nullable":true,"description":"ID of the next page, if available"},"currentTotal":{"type":"integer","description":"Number of records in the current response"}},"required":["data","total","currentTotal"],"example":{"data":[{}],"total":1,"nextId":null,"currentTotal":1}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"pagedListRequest":{"type":"object","properties":{"nextId":{"type":"string","nullable":true,"description":"The ID of the next page"},"pageSize":{"type":"integer","default":10,"description":"The number of items per page"}}},"queryOptionsRequest":{"type":"object","properties":{"filtersRequest":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"The name of the column filter is going to be applied on"},"matchMode":{"type":"integer","enum":["Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Like","Contains","Any","Between","In","NotIn","NotContains","StartsWith","EndsWith",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"description":"The mode of the filter, which determines how the filter is applied.\n                Possible values include:\n                - Equal: Matches values that are exactly the same.\n                - NotEqual: Matches values that are not the same.\n                - LessThan: Matches values that are less than the specified value.\n                - LessThanOrEqual: Matches values that are less than or equal to the specified value.\n                - GreaterThan: Matches values that are greater than the specified value.\n                - GreaterThanOrEqual: Matches values that are greater than or equal to the specified value.\n                - Like: Matches values that are similar to the specified pattern.\n                - Contains: Matches values that contain the specified substring.\n                - NotContains: Matches values that do not contain the specified substring.\n                - Any: Matches any value.\n                - Between: Matches values that fall within a specified range.\n                - In: Matches values that are within a specified set.\n                - NotIn: Matches values that are not within a specified set.\n                - StartsWith: Matches values that start with the specified substring.\n                - EndsWith: Matches values that end with the specified substring.\n                Equal, NotEqual, LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual, Like, Contains, Any, Between, In, NotIn, NotContains, StartsWith, EndsWith, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15"},"operator":{"type":"integer","enum":["And","Or",1,2],"nullable":true,"description":"The operator of the filter, which determines how multiple filters are combined.\n                Possible values include:\n                - And: All specified filters must be satisfied.\n                - Or: At least one of the specified filters must be satisfied.\n                And, Or, 1, 2"},"value":{"nullable":true,"description":"The value against which the filter is going to be applied (can be any type: string, number, boolean, object, array, or null)"},"values":{"type":"array","items":{},"nullable":true,"description":"The values against which the filter is going to be applied (array items can be any type)"},"rangeValues":{"type":"object","properties":{"start":{"description":"The start value of the range (can be any type: string, number, date, etc.)"},"end":{"description":"The end value of the range (can be any type: string, number, date, etc.)"}},"nullable":true,"description":"The range of values to be checked between"},"ignoreCase":{"type":"boolean","nullable":true,"description":"Whether case should be ignored or not"}},"required":["field","matchMode"]},"description":"The list of filters to be applied"},"sortRequest":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"The name of the column to be sorted"},"direction":{"type":"integer","enum":["Ascending","Descending",0,1],"description":"The direction of sorting, which indicates how the results should be ordered.\n                Possible values include:\n                - Ascending (0): Sorts the results from the lowest to the highest value.\n                - Descending (1): Sorts the results from the highest to the lowest value.\n                Ascending, Descending, 0, 1"},"priority":{"type":"integer","description":"The priority of sorting"}},"required":["field","direction","priority"]},"description":"The list of sort requests"},"includes":{"type":"array","items":{"type":"string"},"description":"The list of table names whose records are needed to be fetched along with current table's records"},"selectFields":{"type":"array","items":{"type":"string"},"description":"The list of field names that should be included in the response. If not specified, all fields will be returned. Note: Essential fields like _id, createdAt, companyId, etc. are always included for proper toResponse() functionality."}}}}}}}},"security":[{"apiKey":[]}],"tags":["Phones - Sip Trunks"]}},"/api/v1/phones/sip-trunks/:id":{"get":{"summary":"Get SIP trunk by ID","responses":{"200":{"description":"SIP trunk retrieved","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for this SIP trunk"},"host":{"type":"string","description":"Remote SIP host, FQDN, or IP"},"port":{"type":"integer","description":"Remote SIP port"},"transport":{"type":"string","enum":["udp","tcp","tls"],"description":"SIP transport (udp, tcp, tls)"},"sipTrunkRole":{"type":"string","enum":["provider_trunk","remote_pbx_extension","customer_pbx_trunk"],"default":"provider_trunk","description":"Business role for this SIP trunk"},"source":{"type":"string","enum":["system","custom"],"default":"custom","description":"Who provisioned this trunk: 'system' (VL free DID) or 'custom' (customer-configured)"},"provider":{"type":"string","enum":["msteams"],"description":"Managed peer preset ('msteams' = Microsoft Teams Direct Routing; peer fields are server-controlled). The customer pairs <trunkId>.sip.voicelogica.ai as the SBC in their Microsoft tenant."},"sipDomain":{"type":"string","description":"Incoming PBX trunk SIP domain slug; render as <slug>.sip.voicelogica.ai"},"supportsInbound":{"type":"boolean","default":true,"description":"Whether this provider trunk can receive inbound calls"},"supportsOutbound":{"type":"boolean","default":true,"description":"Whether this provider trunk can originate outbound calls"},"blockInternationalCalls":{"type":"boolean","description":"When true, outbound calls and transfers on this trunk to explicitly international numbers (+ / 00 prefix) outside Greece and Cyprus are refused"},"outsideLinePrefix":{"type":"string","description":"PBX outside-line digit(s) (usually '0'): stripped from inbound caller numbers, added to outbound dialed numbers"},"inboundAuthType":{"type":"string","enum":["ip_auth","registration","none"],"description":"Inbound authentication mode"},"outboundAuthType":{"type":"string","enum":["registration","ip_auth","none"],"description":"Outbound authentication mode"},"username":{"type":"string","description":"Outbound SIP username when using registration or digest"},"password":{"type":"string","description":"Outbound SIP password when using registration or digest"},"authId":{"type":"string","description":"SIP auth ID / login ID for digest authentication"},"ipWhitelist":{"type":"array","items":{"type":"string"},"description":"Trusted static source IPs or CIDR ranges for inbound SIP"},"allowedRtpIps":{"type":"array","items":{"type":"string"},"description":"Additional RTP source IPs (same port) for split-edge media"},"privateServers":{"type":"array","items":{"type":"string"},"description":"Admin-only RTP server IPs this trunk must use (empty = public pool)"},"domain":{"type":"string","description":"SIP domain / realm"},"fromDomain":{"type":"string","description":"From header domain override"},"outboundProxy":{"type":"string","description":"Outbound SIP proxy if configured"},"sipProxy":{"type":"string","description":"Alias for outboundProxy; outbound SIP proxy if configured"},"defaultPhoneNumber":{"type":"string","description":"Default phone number for this trunk; used in Refer-To for agent/PIN transfers"},"codecs":{"type":"array","items":{"type":"string","enum":["pcmu","pcma","g722","opus","telephone-event"]},"description":"Allowed codecs for this trunk"},"enabled":{"type":"boolean","description":"Whether this trunk is enabled for routing"},"allowOriginationThroughRemotePbx":{"type":"boolean","default":false,"description":"Whether remote PBX extension trunks may originate through the remote PBX"},"staticDestinationHost":{"type":"string","description":"Static PBX host/IP for IP-auth incoming PBX trunks that do not REGISTER"},"staticDestinationPort":{"type":"integer","description":"Static PBX SIP port for IP-auth incoming PBX trunks that do not REGISTER"},"maxChannels":{"type":"integer","nullable":true,"description":"Maximum concurrent calls allowed on this trunk (null = unlimited)"},"pickUpDelay":{"type":"integer","default":0,"description":"Seconds the inbound call rings before the AI answers (0 = immediately)"},"registrationExpiresSeconds":{"type":"integer","default":300,"description":"Outbound REGISTER Expires interval (60-86400s)"},"grantedRegistrationExpiresSeconds":{"type":"integer","minimum":60,"maximum":86400,"description":"Registrar 423 Min-Expires floor (SIP operational; refresh cadence / wire Expires only — user registrationExpiresSeconds is unchanged)"},"registrarBindingExpiresSeconds":{"type":"integer","minimum":60,"maximum":86400,"description":"Registrar 200 Expires header when shorter than we requested (refresh/stale only; never Contact expires countdown)"},"otherRegistrations":{"type":"array","items":{"type":"string"},"description":"Edge trunks: other devices registered on the same carrier account (host:port), per the registrar; they ring too and can answer calls first"},"registrationRefreshSeconds":{"type":"integer","minimum":1,"maximum":86400,"description":"Computed REGISTER refresh interval in seconds (read-only; not stored)"},"srtpEnabled":{"type":"boolean","default":false,"description":"Whether this trunk offers SDES SRTP on outbound INVITEs (peer can answer with matching crypto or reject with 488 for plain-RTP retry)"},"registered":{"type":"boolean","description":"Whether the trunk is currently registered (maintained by the SIP stack for registration modes)"},"lastRegisteredAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastResolvedPeerIp":{"type":"string","description":"Last DNS-resolved peer IP (system-written)"},"destinationType":{"type":"string","enum":["user","user_group","ai_agent","external_number","external_bridge","conference_room"],"description":"Type of destination used by the inbound route"},"destinationId":{"type":"string","description":"Default inbound destination entity id"},"webhookUrl":{"type":"string","description":"Pre-answer CALL_INBOUND webhook URL (empty string when auto-disabled after repeated delivery failures)"},"tunnelType":{"type":"string","enum":["none","wireguard"],"default":"none","description":"NAT traversal: none or wireguard edge relay"},"contactHost":{"type":"string","enum":["phone_id","company_id","ip"],"description":"Host in our SIP Contact: phone_id (default), company_id, or ip (only for a proxy that mishandles a hostname). Ignored on edge trunks."},"edgeDeviceId":{"type":"string","description":"Bound edge device id when tunnelType is wireguard"},"trunkNumberCount":{"type":"integer","default":0,"description":"Total trunk numbers attached to this trunk"},"inboundTrunkNumberCount":{"type":"integer","default":0,"description":"Trunk numbers enabled for inbound routing"},"outboundCallerIdTrunkNumberCount":{"type":"integer","default":0,"description":"Trunk numbers enabled as outbound caller IDs"},"hasInboundTrunkNumbers":{"type":"boolean","default":false,"description":"True when this trunk has at least one inbound-enabled trunk number"},"inboundPeers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"sipTrunkId":{"type":"string","description":"SIP trunk this peer registered against"},"remoteAddress":{"type":"string","description":"Source IP observed for REGISTER traffic"},"remotePort":{"type":"integer","description":"UDP/TCP/TLS source port"},"transport":{"type":"string","enum":["udp","tcp","tls"],"description":"Transport used toward the peer"},"contactUri":{"type":"string","description":"Parsed Contact URI from REGISTER"},"fromUser":{"type":"string","description":"Username from REGISTER From header when available"},"registeredAt":{"type":"string","format":"date-time","description":"When we last acknowledged a successful REGISTER"},"expiresAt":{"type":"string","format":"date-time","description":"When this binding lapses unless refreshed by the peer"}},"required":["id","createdAt","active","createdBy","createdById","companyId","sipTrunkId","remoteAddress","remotePort","transport","contactUri","registeredAt","expiresAt"],"description":"Inbound peer registration — a carrier/PBX REGISTERed toward us on this tenant trunk. Survives app restarts; cleared when REGISTER expires or unregister is observed.","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","sipTrunkId":"507f1f77bcf86cd799439022","remoteAddress":"203.0.113.44","remotePort":5060,"transport":"udp","contactUri":"sip:user@carrier.example","fromUser":"user","registeredAt":"2026-05-01T10:00:00.000Z","expiresAt":"2026-05-01T10:05:00.000Z"}},"default":[],"description":"Carrier/PBX peers currently REGISTERed toward this trunk (non-expired; from durable store)"},"guidance":{"type":"string","description":"Connection outcome explanation, returned when the trunk is created"},"connectionInfo":{"type":"array","items":{"type":"string"},"description":"Key connection values as \"label: value\" lines (SBC address, SIP domain, platform signaling IP…), returned when the trunk is created"},"nextSteps":{"type":"array","items":{"type":"string"},"description":"Kind-specific steps to finish connecting this trunk (e.g. the SBC address to pair for Teams, the SIP domain to point a PBX at), returned when the trunk is created"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","port","transport","inboundAuthType","outboundAuthType","ipWhitelist","codecs","enabled","registered"],"description":"Response schema for a SIP trunk including company metadata, audit fields, and registration state","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Carrier A","host":"sip.carrier.example","port":5060,"transport":"udp","sipTrunkRole":"provider_trunk","source":"custom","supportsInbound":true,"supportsOutbound":true,"inboundAuthType":"ip_auth","outboundAuthType":"registration","username":"user","password":"secret","ipWhitelist":["203.0.113.10"],"domain":"carrier.example","sipProxy":"vpbx-sbc.carrier.example","defaultPhoneNumber":"2192192051","codecs":["pcmu","pcma","telephone-event"],"enabled":true,"allowOriginationThroughRemotePbx":false,"registered":true,"lastRegisteredAt":"2024-01-15T09:00:00.000Z","registrationExpiresSeconds":300,"registrationRefreshSeconds":240,"destinationType":"ai_agent","destinationId":"507f1f77bcf86cd799439022","trunkNumberCount":2,"inboundTrunkNumberCount":1,"outboundCallerIdTrunkNumberCount":2,"hasInboundTrunkNumbers":true,"inboundPeers":[]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Phones - Sip Trunks"]}},"/api/v1/agentic/agents/query":{"post":{"summary":"Query agents with filters, sorting and pagination","description":"Retrieve a list of AI agents with advanced filtering, sorting, and pagination. Access complete agent configurations including prompts, settings, and integrations.\n\n**Query Capabilities:**\n- Filter by agent type (prompt-based, analysis-agent, ai-assistant, node-based)\n- Search by name or system prompt content\n- Filter by language or capabilities\n- Sort by any field (name, creation date, last modified, etc.)\n- Paginate with `limit` and `nextId`\n\n**Response Includes:**\n- Agent configuration (name, type, prompts)\n- Phone and email settings\n- Voice configuration and language\n- Connected knowledge bases and workflows\n- Integration settings\n- Appointment settings\n\n**Common Use Cases:**\n- List all customer-facing agents\n- Find agents by capability or language\n- Export agent configurations\n- Audit agent settings across organization","responses":{"200":{"description":"Agents retrieved successfully with pagination","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"_def":{"unknownKeys":"strip","catchall":{"_def":{"typeName":"ZodNever"},"~standard":{"version":1,"vendor":"zod"}},"typeName":"ZodObject","meta":{"example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support Agent","agentType":"prompt-based","systemPrompt":"You are a helpful customer support assistant. Always be polite and provide accurate information.","dynamicVariables":[{"name":"company_name","value":"{{company_name}}"}],"language":"en-US","secondaryLanguages":[{"language":"es-ES","type":"other_agent","agentId":"agent-123e4567-e89b-12d3-a456-426614174000","enabled":true,"defaultContries":["Greece","United States"]},{"language":"fr-FR","type":"other_voice","voiceConfig":{"voiceProvider":"elevenlabs","voiceId":"21m00Tcm4TlvDq8ikWAM"},"enabled":true,"defaultContries":["Greece","United States"]}],"knowledgeFileIds":["kb-123","kb-456"],"workflowsIds":["workflow-123","workflow-456"],"tools":[{"enabled":true,"name":"send_sms","prompt":"Send an SMS to the user","type":"system"}],"allowedToCopy":"sameCompany","passwordTries":3,"externalDial":1234567890,"internalDial":"4002","knowledgeFiles":[{"id":"kb-123","name":"Product Manual","description":"Complete product documentation"}],"workflows":[{"id":"workflow-123","name":"Send Email Notification","description":"Automated email notification workflow","triggers":[{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}}],"nodes":[],"files":[],"parameters":[{"name":"company_name","value":"{{company_name}}","type":"string","required":true,"aiGenerated":true}],"dataRetentionDays":30,"dataRetentionPolicy":"all"}]}}},"~standard":{"version":1,"vendor":"zod"},"_cached":null},"description":"Array of response data"},"total":{"type":"integer","description":"Total number of records"},"nextId":{"type":"string","nullable":true,"description":"ID of the next page, if available"},"currentTotal":{"type":"integer","description":"Number of records in the current response"}},"required":["data","total","currentTotal"],"example":{"data":[{}],"total":1,"nextId":null,"currentTotal":1}}}}},"400":{"description":"Bad request - Invalid query parameters","content":{"application/json":{}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"pagedListRequest":{"type":"object","properties":{"nextId":{"type":"string","nullable":true,"description":"The ID of the next page"},"pageSize":{"type":"integer","default":10,"description":"The number of items per page"}}},"queryOptionsRequest":{"type":"object","properties":{"filtersRequest":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"The name of the column filter is going to be applied on"},"matchMode":{"type":"integer","enum":["Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Like","Contains","Any","Between","In","NotIn","NotContains","StartsWith","EndsWith",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"description":"The mode of the filter, which determines how the filter is applied.\n                Possible values include:\n                - Equal: Matches values that are exactly the same.\n                - NotEqual: Matches values that are not the same.\n                - LessThan: Matches values that are less than the specified value.\n                - LessThanOrEqual: Matches values that are less than or equal to the specified value.\n                - GreaterThan: Matches values that are greater than the specified value.\n                - GreaterThanOrEqual: Matches values that are greater than or equal to the specified value.\n                - Like: Matches values that are similar to the specified pattern.\n                - Contains: Matches values that contain the specified substring.\n                - NotContains: Matches values that do not contain the specified substring.\n                - Any: Matches any value.\n                - Between: Matches values that fall within a specified range.\n                - In: Matches values that are within a specified set.\n                - NotIn: Matches values that are not within a specified set.\n                - StartsWith: Matches values that start with the specified substring.\n                - EndsWith: Matches values that end with the specified substring.\n                Equal, NotEqual, LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual, Like, Contains, Any, Between, In, NotIn, NotContains, StartsWith, EndsWith, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15"},"operator":{"type":"integer","enum":["And","Or",1,2],"nullable":true,"description":"The operator of the filter, which determines how multiple filters are combined.\n                Possible values include:\n                - And: All specified filters must be satisfied.\n                - Or: At least one of the specified filters must be satisfied.\n                And, Or, 1, 2"},"value":{"nullable":true,"description":"The value against which the filter is going to be applied (can be any type: string, number, boolean, object, array, or null)"},"values":{"type":"array","items":{},"nullable":true,"description":"The values against which the filter is going to be applied (array items can be any type)"},"rangeValues":{"type":"object","properties":{"start":{"description":"The start value of the range (can be any type: string, number, date, etc.)"},"end":{"description":"The end value of the range (can be any type: string, number, date, etc.)"}},"nullable":true,"description":"The range of values to be checked between"},"ignoreCase":{"type":"boolean","nullable":true,"description":"Whether case should be ignored or not"}},"required":["field","matchMode"]},"description":"The list of filters to be applied"},"sortRequest":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"The name of the column to be sorted"},"direction":{"type":"integer","enum":["Ascending","Descending",0,1],"description":"The direction of sorting, which indicates how the results should be ordered.\n                Possible values include:\n                - Ascending (0): Sorts the results from the lowest to the highest value.\n                - Descending (1): Sorts the results from the highest to the lowest value.\n                Ascending, Descending, 0, 1"},"priority":{"type":"integer","description":"The priority of sorting"}},"required":["field","direction","priority"]},"description":"The list of sort requests"},"includes":{"type":"array","items":{"type":"string"},"description":"The list of table names whose records are needed to be fetched along with current table's records"},"selectFields":{"type":"array","items":{"type":"string"},"description":"The list of field names that should be included in the response. If not specified, all fields will be returned. Note: Essential fields like _id, createdAt, companyId, etc. are always included for proper toResponse() functionality."}}}}}}}},"security":[{"apiKey":[]}],"tags":["Agentic - Agents"]}},"/api/v1/agentic/agents/prompt":{"post":{"summary":"Get the prompt for an agent","description":"Get the prompt for an agent","responses":{"200":{"description":"Prompt retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","description":"Main/systemic system prompt (agent.systemPrompt)"},"additionalCallSystemPrompt":{"type":"string","description":"Additional call instructions from phone settings (agentPhoneSettings.systemPrompt). During calls both are merged at runtime."},"agentId":{"type":"string","description":"The agent ID. If not provided the default agent will be used"},"destination":{"type":"string","enum":["prod","version"],"description":"Where the prompt was written (update only)"},"agentVersionId":{"type":"string","description":"Saved version id when destination was \"version\""},"versionNumber":{"type":"number","description":"Saved version number when destination was \"version\""},"promptCharacters":{"type":"string","description":"Prompt size against the plan cap, e.g. \"18420/20000\". A write over the cap is REJECTED and nothing is saved, so check this before composing a longer prompt."},"promptCharactersRemaining":{"type":"number","description":"Characters still available before the plan cap is hit. Negative means the prompt would be rejected."},"promptBudgetHint":{"type":"string","description":"Present only when prompt space is running low: tells you to move reference content to a knowledge file with add_knowledge_text instead of growing the prompt."}},"required":["prompt"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"404":{"description":"Agent not found","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Agentic - Agents"]},"put":{"summary":"Update the prompt for an agent","description":"Update the prompt for an agent","responses":{"200":{"description":"Prompt updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","description":"Main/systemic system prompt (agent.systemPrompt)"},"additionalCallSystemPrompt":{"type":"string","description":"Additional call instructions from phone settings (agentPhoneSettings.systemPrompt). During calls both are merged at runtime."},"agentId":{"type":"string","description":"The agent ID. If not provided the default agent will be used"},"destination":{"type":"string","enum":["prod","version"],"description":"Where the prompt was written (update only)"},"agentVersionId":{"type":"string","description":"Saved version id when destination was \"version\""},"versionNumber":{"type":"number","description":"Saved version number when destination was \"version\""},"promptCharacters":{"type":"string","description":"Prompt size against the plan cap, e.g. \"18420/20000\". A write over the cap is REJECTED and nothing is saved, so check this before composing a longer prompt."},"promptCharactersRemaining":{"type":"number","description":"Characters still available before the plan cap is hit. Negative means the prompt would be rejected."},"promptBudgetHint":{"type":"string","description":"Present only when prompt space is running low: tells you to move reference content to a knowledge file with add_knowledge_text instead of growing the prompt."}},"required":["prompt"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"404":{"description":"Agent not found","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","description":"The prompt text to evaluate"},"agentId":{"type":"string","description":"The agent ID. If not provided, uses the default agent"},"destination":{"type":"string","enum":["prod","version"],"description":"Where to write the prompt. \"prod\" (default) updates the live agent immediately. \"version\" saves it as a numbered version WITHOUT touching the live agent (a new one, or agentVersionId when given) — test it with run_agent_scenario (agentVersionId) or scenarios_execute (action \"run_agent_scenario_matrix\") (versionIds), then put it live with versions_execute (action \"publish_agent_version\")."},"agentVersionId":{"type":"string","description":"With destination \"version\": edit this saved version (from versions_query (action \"list_agent_versions\")) instead of creating a new one. Edits then build on that version's prompt."}},"required":["prompt"]}}}},"security":[{"apiKey":[]}],"tags":["Agentic - Agents"]}},"/api/v1/agentic/agents/:id":{"get":{"summary":"Get agent by ID with complete configuration","description":"Retrieve complete information about a specific AI agent including all settings, integrations, and connected resources.\n\n**Response Includes:**\n- Agent configuration (name, type, system prompt)\n- Phone settings (voice, model, transcription, VoIP connections)\n- Email settings (if configured)\n- Language settings (primary and secondary languages)\n- Connected knowledge bases (full details)\n- Connected workflows (full details)\n- Appointment settings and calendars\n- Integration configurations\n- Dynamic variables\n- Node-based flow configuration (for node-based agents)\n\n**Use Cases:**\n- View complete agent configuration for editing\n- Export agent settings for backup\n- Clone agent configuration to another agent\n- Audit agent settings and capabilities\n- Verify knowledge base and workflow connections","responses":{"200":{"description":"Agent retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string"},"agentType":{"type":"string","enum":["prompt-based","analysis-agent","ai-assistant","node-based"],"example":"prompt-based","description":"The type of agent architecture that determines its capabilities and behavior. `prompt-based`: Standard conversational agent that can answer calls, transfer calls, handle emails, book appointments, and execute workflows. Best for general-purpose use cases. `analysis-agent`: Specialized agent for call analysis only. Used to analyze calls after they have been transferred to humans. Monitors and extracts insights from ongoing calls. See: https://docs.voicelogica.ai/transfer-calls/introduction `ai-assistant`: Personal AI assistant/voicemail. Designed ONLY for individual use as your own AI voicemail or personal assistant. Handles calls when you are unavailable. `node-based`: Advanced agent with visual flow builder. Supports complex branching logic, conditional routing, and multi-step reasoning. Best for sophisticated conversational workflows."},"systemPrompt":{"type":"string"},"dynamicVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the dynamic variable"},"value":{"type":"string","description":"The value of the dynamic variable"}},"required":["name","value"]}},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Locale code"},"secondaryLanguages":{"type":"array","items":{"type":"object","properties":{"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"The language of the secondary language"},"type":{"type":"string","enum":["other_agent","other_voice"],"description":"The type of the secondary language"},"agentId":{"type":"string","description":"The ID of the agent that the secondary language is for"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"enabled":{"type":"boolean","description":"Whether the secondary language is enabled"},"defaultContries":{"type":"array","items":{"type":"string","enum":["Afghanistan","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Bouvet Island","Brazil","British Indian Ocean Territory","Brunei Darussalam","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","China","Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo","Congo, The Democratic Republic of the","Cook Islands","Costa Rica","Cote D'Ivoire","Croatia","Cuba","Cyprus","Czech Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Falkland Islands (Malvinas)","Faroe Islands","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Heard Island and Mcdonald Islands","Holy See (Vatican City State)","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran, Islamic Republic Of","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kuwait","Kyrgyzstan","Lao People\"S Democratic Republic","Lao People's Democratic Republic","Latvia","Lebanon","Lesotho","Liberia","Libyan Arab Jamahiriya","Liechtenstein","Lithuania","Luxembourg","Macao","Macedonia, The Former Yugoslav Republic of","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia, Federated States of","Moldova, Republic of","Monaco","Mongolia","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands","Netherlands Antilles","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territory, Occupied","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn","Poland","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saint Helena","Saint Kitts and Nevis","Saint Lucia","Saint Pierre and Miquelon","Saint Vincent and the Grenadines","Samoa","San Marino","Sao Tome and Principe","Saudi Arabia","Senegal","Serbia and Montenegro","Seychelles","Sierra Leone","Singapore","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia and the South Sandwich Islands","Spain","Sri Lanka","Sudan","Suriname","Svalbard and Jan Mayen","Swaziland","Sweden","Switzerland","Syrian Arab Republic","Taiwan, Province of China","Tajikistan","Tanzania, United Republic of","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey","Turkmenistan","Turks and Caicos Islands","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States Minor Outlying Islands","United States","Uruguay","Uzbekistan","Vanuatu","Venezuela","Virgin Islands, British","Virgin Islands, U.S.","Wallis and Futuna","Western Sahara","Yemen","Zambia","Zimbabwe","Unknown or Invalid Region","Russia"],"description":"Country name"},"description":"The default countries for the secondary language"}},"required":["language","type"]}},"knowledgeFileIds":{"type":"array","items":{"type":"string"}},"workflowsIds":{"type":"array","items":{"type":"string"}},"allowedToCopy":{"type":"string","enum":["sameCompany","public","publicWithPassword","private"]},"navigateToNodeTool":{"type":"boolean","description":"Whether the agent can navigate to a specific node tool based on instructions"},"syncWithContacts":{"type":"boolean"},"agentEmailSettings":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"systemPrompt":{"type":"string"},"functionCallIds":{"type":"array","items":{"type":"string"}},"mailboxIds":{"type":"array","items":{"type":"string"},"description":"Mailboxes exclusively assigned to this agent for inbound mail conversations"},"ccOptions":{"type":"array","items":{"type":"string"}},"evaluationSettings":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"methodsEnabled":{"type":"object","properties":{"createDraft":{"type":"boolean"},"reply":{"type":"boolean"},"training":{"type":"boolean"}}},"processEmailPrompt":{"type":"string"},"trainingEvaluationPrompt":{"type":"string"},"completeWhenNoReplyNeeded":{"type":"boolean","description":"When true, newsletters/receipts/no-reply are marked closed (completed). Default true."}},"example":{"methodsEnabled":{"createDraft":true,"reply":true,"training":false},"processEmailPrompt":"Keep replies short and professional.","trainingEvaluationPrompt":"Evaluate this email for training purposes.","completeWhenNoReplyNeeded":true}},"displayBusinessDetails":{"type":"object","properties":{"name":{"type":"boolean"},"address":{"type":"boolean"},"website":{"type":"boolean"},"email":{"type":"boolean"},"phone":{"type":"boolean"},"operatingHours":{"type":"boolean"},"isOpenNow":{"type":"boolean"},"utcOffset":{"type":"boolean"},"wheelchairAccessibleEntrance":{"type":"boolean"}},"example":{"name":true,"address":true,"website":true,"email":true,"phone":true,"operatingHours":true,"isOpenNow":true,"utcOffset":true,"wheelchairAccessibleEntrance":false}},"authorizationConfig":{"type":"object","properties":{"smsEnabled":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"emailEnabled":{"type":"boolean"},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"example":{"smsEnabled":true,"emailEnabled":true}},"contactData":{"type":"object","properties":{"enabled":{"type":"boolean"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["enabled"],"example":{"enabled":true}},"functionCalls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"description":{"type":"string","description":"Description of the function call"},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"description":"Condition blocks for execution logic"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"],"description":"When to execute the function call"},"confirmationMethodConfig":{"type":"object","properties":{"confirmationRequired":{"type":"boolean"},"secondsToWait":{"type":"number","minimum":10},"wordMatch":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"array","items":{"type":"string"}}},"required":["required","value"]},"aiGuidance":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]},"dtmf":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]}},"required":["confirmationRequired","secondsToWait"],"description":"Configuration for user confirmation"},"messageToUserBeforeAction":{"type":"string","description":"Message to show user before executing the action"},"messageToUserAfterAction":{"type":"string","description":"Message to show user after executing the action"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"functions":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"number"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"]},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"action":{"type":"string","enum":["emailConfig","apiCall","sendSms","createEvent","sendPhoneCall","forwardCall","googleSearch","sendMessage","endCallConfig","googleSheetConfig","googleDocConfig","llmCompletion","hubspotConfig","aiResponse","transferCall","afmSearch","codeExecution"]},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}},"forwardCallConfig":{"type":"object","properties":{"voipConnectionId":{"type":"string","minLength":24}},"required":["voipConnectionId"],"example":{"voipConnectionId":"507f1f77bcf86cd799439011"}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}},"sendMessageConfig":{"type":"object","properties":{"messageToUser":{"type":"string","minLength":1}},"required":["messageToUser"],"example":{"messageToUser":"Your order has been shipped!"}},"endCallConfig":{"type":"object","properties":{"reason":{"type":"string","minLength":2}},"required":["reason"],"example":{"reason":"User requested to end the call"}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["sequence","action"]},"description":"Internal actions to execute"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","parameters","functions"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Send Email Notification","description":"Sends an email notification to the user","conditionBlocks":[],"executeAt":"immediate","messageToUserBeforeAction":"I will send you an email notification.","messageToUserAfterAction":"Email notification sent successfully!","fileIds":["file_123","file_456"],"files":[{"id":"file_123","filename":"document.pdf","s3Id":"s3-file-123","displayUrl":"https://example.com/files/document.pdf"}],"parameters":[{"id":"param_1","name":"Email Address","description":"Recipient email address","type":"string","required":true}],"functions":[{"id":"func_1","name":"Send Email","type":"email","config":{"to":"{{emailAddress}}","subject":"Notification","body":"This is a notification email."}}]}}}},"example":{"model":{"completionProvider":"openai","model":"gpt-4o-mini","temperature":0.5,"maxCompletionTokens":500},"systemPrompt":"You are a helpful email assistant. Always be professional and courteous.","functionCalls":[{"id":"fc-123","name":"Send Email","description":"Send an email to the specified recipient"}],"powerUps":["appointment-booking"],"displayBusinessDetails":{"name":true,"address":true,"website":true,"email":true,"phone":true,"operatingHours":true,"isOpenNow":true,"utcOffset":true,"wheelchairAccessibleEntrance":false}}},"agentPhoneSettings":{"type":"object","properties":{"interimGeneration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to generate interim generation while user is speaking"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to trigger interim generation"},"prompt":{"type":"string","description":"The prompt to use when generating interim generation"},"minimumWordsForFullResponse":{"type":"number","description":"The minimum number of words for a full response"}},"description":"Configuration for interim generation"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"AI model configuration for the agent"},"sendSms":{"type":"boolean","description":"Whether to send SMS"},"blockInterruptionWhileAiIsGenerating":{"type":"boolean","description":"Whether to block interruption while AI is generating"},"senderId":{"type":"string","description":"The ID of the sender to use for SMS"},"allowHumanToInterruptAiOnFirstMessage":{"type":"boolean","description":"Whether to allow human to interrupt AI on the first message"},"ssml":{"type":"boolean","description":"Whether to use SSML (Speech Synthesis Markup Language) for voice synthesis"},"skipTurnEnabled":{"type":"boolean","description":"Whether to skip turn during the call"},"skipTurnPrompt":{"type":"string","description":"The prompt to use when skipping turn during the call"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"timesToNudgeBeforeHungup":{"type":"number","minimum":0,"maximum":3,"description":"Number of times to nudge the user before hanging up the call (1-3)"},"nudgeIntervalSeconds":{"type":"number","minimum":0,"maximum":60,"description":"Interval in seconds between nudges when user is silent (0-60 seconds)"},"nudgePrompt":{"type":"string","description":"The prompt to use when nudging the user"},"actionsAfterNudge":{"type":"array","items":{"type":"string","enum":["hangup","forward"]},"maxItems":2,"description":"Actions after nudge when silence threshold is reached (hangup, forward, or both)"},"systemPrompt":{"type":"string","description":"The system prompt that defines the agent's behavior and personality"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"phoneFirstMessageAiGenerated":{"type":"boolean","description":"Whether the first message should be AI-generated or use a predefined message"},"updateAdaptationPhrasesOnSystemPromptChange":{"type":"boolean","description":"Whether to update adaptation phrases when system prompt changes"},"phoneFirstMessage":{"type":"string","description":"The first message to say when the call connects"},"phoneFirstMessageOffHours":{"type":"string","description":"Welcome message when the business is closed; if empty, the normal first message is used"},"endCallAfterOffHoursWelcomeMessage":{"type":"boolean","description":"When the business is closed and the off-hours welcome message plays, hang up as soon as it finishes instead of continuing the conversation"},"transcriptionConfig":{"type":"object","properties":{"transcriptionProvider":{"type":"string","enum":["microsoft","google","fireworks","speechmatics","openai","assemblyai","deepgram","google_v1","google_v2","elevenlabs","voicelogica","soniox"],"description":"The transcription service provider to use for speech-to-text"},"silenceDurationMs":{"type":"number","minimum":500,"description":"Duration of silence in milliseconds before considering the user finished speaking"},"adaptationPhraseSetIds":{"type":"array","items":{"type":"string"},"description":"IDs of adaptation phrase sets to improve transcription accuracy"},"transcriptionVoiceMailPhrases":{"type":"array","items":{"type":"string"},"description":"Phrases that indicate the call has reached a voicemail system"},"waitForFullTranscription":{"type":"boolean","description":"Whether to wait for complete transcription before processing"},"enhanced":{"type":"boolean","description":"Whether to use enhanced transcription models for better accuracy"},"audioEnhancement":{"type":"boolean","description":"Whether to run ai-coustics speech enhancement (noise/background-speech suppression) on caller audio before transcription"},"audioEnhancementLevel":{"type":"number","minimum":0,"maximum":1,"description":"How aggressively the ai-coustics model suppresses noise (0.0-1.0). Uses the model default when omitted"},"endpointSensitivity":{"type":"number","minimum":-1,"maximum":1,"nullable":true,"description":"Soniox only: how aggressively endpoints are detected (-1.0 to 1.0). Higher = faster end-of-turn but more risk of cutting the caller off mid-sentence. Platform default 0.3"},"maxEndpointDelayMs":{"type":"number","minimum":500,"maximum":3000,"nullable":true,"description":"Soniox only: hard cap on how long Soniox may wait for an endpoint after speech ends (500-3000ms). Platform default 1500"},"endpointLatencyAdjustmentLevel":{"type":"integer","minimum":0,"maximum":3,"nullable":true,"description":"Soniox only: endpoint latency reduction level 0-3 (3 = most aggressive). Platform default 3"},"speculativeFinalize":{"type":"boolean","nullable":true,"description":"Soniox only: at the speculative quiet moment, request finalize() to flush pending tokens into the candidate before the endpoint. Platform default from admin settings"},"singleUtterance":{"type":"boolean","description":"Whether to process speech as single utterances"},"openAiModel":{"type":"string","enum":["whisper-1","gpt-transcribe","gpt-4o-transcribe","gpt-4o-mini-transcribe","gpt-4o-transcribe-diarize"],"description":"OpenAI model to use for transcription"},"prompt":{"type":"string","description":"Custom prompt used for transcription processing"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to focus on during transcription"},"initializationMethod":{"type":"string","enum":["on_call_start","on_human_join"],"description":"Method to initialize the transcription service"},"adaptationPhraseSets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the adaptation phrase set"},"description":{"type":"string","nullable":true,"description":"The description of the phrase set"},"phraseSetId":{"type":"string","description":"The phrase set id"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Locale code"},"phrases":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Phrase value"},"boost":{"type":"number","minimum":1,"maximum":20,"description":"Boost value (1-20)"}},"required":["value","boost"]},"nullable":true,"description":"The phrases of the set"},"boost":{"type":"number","minimum":1,"maximum":20,"nullable":true,"description":"Boost value (1-20)"},"apiEnabled":{"type":"boolean","nullable":true,"description":"Whether API is enabled"},"apiUrl":{"type":"string","nullable":true,"description":"API URL"},"apiKey":{"type":"string","nullable":true,"description":"API key"},"lastPulledAt":{"type":"string","format":"date-time","description":"The last pulled at date of the phrase set","nullable":true}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","phraseSetId","language"],"description":"Response schema for adaptation phrase set including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Greetings","description":"Common customer greeting phrases","phraseSetId":"greetings_001","language":"en-US","phrases":[{"value":"Hello","boost":5},{"value":"Hi there","boost":3},{"value":"Good morning","boost":4}],"boost":5,"apiEnabled":true,"apiUrl":"https://api.example.com/phrases","apiKey":"api_key_123","lastPulledAt":"2024-01-15T10:30:00.000Z"}},"description":"Adaptation phrase sets used for transcription"}},"required":["transcriptionProvider"],"description":"Configuration for speech-to-text transcription settings","example":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"waitForFullTranscription":false,"openAiModel":"whisper-1"}},"standbyConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable standby (sleep/wake) for this agent"},"wakePhrases":{"type":"array","items":{"type":"string","minLength":2,"maxLength":50},"maxItems":5,"description":"Phrases that wake the agent. On human-to-human calls the agent stays asleep until one is heard; on normal AI calls a wake phrase brings it back after it was told to sleep. Both parties hear the response."},"sleepPhrases":{"type":"array","items":{"type":"string","minLength":2,"maxLength":50},"maxItems":5,"default":[],"description":"Phrases that put the agent into standby — it stops responding entirely until woken (distinct from skip-turn). Mainly used on normal AI calls."}},"required":["enabled","wakePhrases"],"description":"Standby (sleep/wake) configuration","example":{"enabled":true,"wakePhrases":["logica"],"sleepPhrases":["go to sleep"]}},"voipConnectionIds":{"type":"array","items":{"type":"string"},"description":"@deprecated Legacy VoIP connection IDs. Use transferSettings.availableTransferDestinations + SipTrunk / UserEndpoint / UserGroup. Kept for backward-compat reads until the migration script lands."},"connectDynamically":{"type":"boolean","description":"Whether to connect the user to the appropriate AI or Human Agent dynamically based on the system prompt"},"firstMessageSenderOnOutgoingCall":{"type":"string","enum":["agent","user"],"description":"Who should send the first message on outgoing calls"},"endCallConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable automatic call ending. When enabled, the agent can end calls based on configured reasons"},"messageToClient":{"type":"string","description":"The message the agent will say to the client before ending the call. This is used when aiGenerated is false"},"aiGenerated":{"type":"boolean","description":"When true, the agent will generate a contextual goodbye message. When false, it uses the fixed messageToClient"},"maximumTimeEnabled":{"type":"boolean","description":"Enable automatic call termination after reaching the maximum time limit"},"maximumTimeCallInSeconds":{"type":"number","minimum":1,"description":"Maximum allowed call duration in seconds. Calls will automatically end when this limit is reached (e.g., 300 for 5 minutes)"},"endCallReasons":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","description":"The specific condition or reason when the agent should end the call (e.g., \"customer doesnt want anything else\", \"issue resolved\", \"transferred to human\")"},"aiGenerated":{"type":"boolean","description":"When true, the AI generates a contextual goodbye message. When false, uses a fixed message"},"prompt":{"type":"string","description":"Template or instruction for the AI to generate the goodbye message. Used when aiGenerated is true to guide the tone and content"},"maxInterruptions":{"type":"integer","minimum":0,"maximum":5,"description":"How many times the caller may interrupt the goodbye and keep the call alive before the hangup becomes final. 0 hangs up at once even if the caller speaks. Defaults to 1"}},"required":["reason","aiGenerated"],"example":{"reason":"completed","aiGenerated":true,"prompt":"Thank you for calling. Have a great day!"}},"description":"Detailed end call configurations with specific reasons and custom prompts. Each reason defines when the agent should end the call and what to say"}},"description":"Configuration for automatic call ending behavior","example":{"enabled":true,"aiGenerated":true,"maximumTimeEnabled":true,"maximumTimeCallInSeconds":300,"endCallReasons":[{"reason":"when customer doesnt want anything else","messageToClient":"Thank you for calling. If you need anything else, please call back.","aiGenerated":true}]}},"afterCallFunctionCallIds":{"type":"array","items":{"type":"string"},"description":"IDs of function calls to execute after the call ends"},"postCallAnalysisConfig":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"AI model to use for post-call analysis"},"minimumDuration":{"type":"number","description":"Minimum duration in seconds to generate post-call analysis & summary"},"summaryEnabled":{"type":"boolean","description":"Whether to generate summary"},"summaryPrompt":{"type":"string","maxLength":5000,"description":"Custom prompt for generating call summary"},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties to extract and analyze from the call"},"allowedAutoTaskKinds":{"type":"array","items":{"type":"string","enum":["todo","call","meeting","reminder","callback"]},"description":"Task kinds the AI may auto-create at the end of the call. Human↔AI calls only allow \"callback\"; human↔human (transferred) calls allow the others. Empty = the AI creates no tasks post-call."},"analysisPrompt":{"type":"string","description":"Custom prompt for call analysis"},"emails":{"type":"array","items":{"type":"string","format":"email"},"description":"Email addresses to send post-call analysis to"},"phoneNumbers":{"type":"array","items":{"type":"string"},"description":"Phone numbers to send post-call analysis to"},"webhookHeaders":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The key of the webhook header"},"value":{"type":"string","description":"The value of the webhook header"}},"required":["key","value"]},"description":"Webhook headers to send with the post-call analysis data"},"webhookUrl":{"type":"string","format":"uri","description":"Webhook URL to send post-call analysis data to"},"webhookUseProtectedValues":{"type":"boolean","description":"When the agent protects sensitive data: send the REAL values (ΑΦΜ, ΑΜΚΑ, IBAN, …) to this webhook instead of the placeholders. Off by default; every send is audited. Only members who may reveal sensitive data can turn it on."},"analysisSmsConfig":{"type":"object","properties":{"sendSmsCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"smsPromptEvaluation":{"type":"string","description":"Prompt to evaluate if sms should be sent"},"smsMessage":{"type":"string","description":"Custom sms message to send"},"minimumDuration":{"type":"number","description":"Minimum duration in minutes to send sms"},"sendSmsFromCallerId":{"type":"boolean","description":"Whether to send the SMS using the caller ID (company phone number) that made the call as the sender"}},"required":["sendSmsCondition"],"description":"Configuration for sms content"},"telegramChats":{"type":"array","items":{"type":"string"},"description":"Telegram chat ids that receive the post-call alert. Ids come from the reachable-chat registry (GET /telegram/chats) — a bot may only message a chat that contacted it first, so arbitrary ids cannot be typed in."},"analysisTelegramConfig":{"type":"object","properties":{"sendTelegramCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"telegramPromptEvaluation":{"type":"string","description":"Prompt to evaluate if a Telegram message should be sent (and, with evaluate_condition_and_recipients, which chats)"},"telegramMessage":{"type":"string","description":"Custom Telegram message to send"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds before a Telegram alert is sent"}},"required":["sendTelegramCondition"],"description":"Configuration for the Telegram alert"},"viberChannelIds":{"type":"array","items":{"type":"string"},"description":"Connected Viber Channels (ids from the Viber Channels list) that receive the post-call alert"},"analysisViberChannelConfig":{"type":"object","properties":{"sendViberChannelCondition":{"type":"string","enum":["always","evaluate_condition","never"]},"viberChannelPromptEvaluation":{"type":"string","description":"Prompt to evaluate whether the Viber Channel alert should be posted"},"viberChannelMessage":{"type":"string","description":"Custom Viber Channel message (defaults to the call summary). Takes {{placeholders}}: any analysis property ({{client_name}}), {{summary}}, {{analysis_fields}} (every analysis property as \"Label: value\"), {{phone_number}}"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds before a Viber Channel alert is posted"}},"required":["sendViberChannelCondition"],"description":"Configuration for the Viber Channel alert"},"analysisEmailConfig":{"type":"object","properties":{"dailyDigest":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Send one summary email a day instead of one per call. With a condition prompt, calls that pass it are still emailed at once (urgent); the rest go in the summary."},"alsoEachCall":{"type":"boolean","description":"Also send the normal email after each call, on top of the daily summary. Default false."},"sendTime":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Local time (company timezone) to send the summary, HH:mm. Default 20:00. It covers the 24 hours before."},"lastSentAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["enabled"],"description":"Daily summary email instead of one email per call"},"includeInEmail":{"type":"object","properties":{"callUrl":{"type":"boolean","description":"Whether to include call URL in email"},"summary":{"type":"boolean","description":"Whether to include call summary in email"},"analysisProperties":{"type":"boolean","description":"Whether to include analyzed properties in email"},"dynamicVariables":{"type":"boolean","description":"Whether to include collected / dynamic variables (e.g. widget form fields) in email"},"recording":{"type":"boolean","description":"Whether to include call recording in email"},"transcription":{"type":"boolean","description":"Whether to include call transcription in email"}},"description":"Configuration for email content"},"sendEmailCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"emailPromptEvaluation":{"type":"string","description":"Prompt to evaluate if email should be sent"},"emailSubject":{"type":"string","description":"Custom email subject to send"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds to send email (voice / websocket calls)"},"minimumVisitorMessages":{"type":"integer","minimum":0,"description":"Minimum visitor (Contact/User) messages required to send email for chat / message sessions"}},"required":["sendEmailCondition"],"description":"Configuration for email content"},"excludePhoneNumbers":{"type":"array","items":{"type":"string"},"description":"Caller phone numbers excluded from post-call processing. This suppresses the whole post-call pipeline for that number, not just the notification: no summary is generated, and because caller memory is built from stored summaries, an excluded number also loses memory of its previous calls. Use it for internal test lines, never for a customer you still want remembered."},"evaluationConfig":{"type":"object","properties":{"issuesEnabled":{"type":"boolean","description":"Run the QA/issue lens (defaults on)"},"opportunitiesEnabled":{"type":"boolean","description":"Run the opportunity-mining lens (defaults off; sellable)"},"audioAnalysisEnabled":{"type":"boolean","description":"Re-transcribe the recording for WER and flag awkward pauses (defaults on)"},"errorAlertsEnabled":{"type":"boolean","description":"Email Voice Logica (alerts@) when a call has session errors — never the customer (defaults on)"},"customFocus":{"type":"string","maxLength":2000,"nullable":true,"description":"Free-text \"what matters most\" steering for the judge"},"customCriteria":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"maxItems":5,"description":"Named checks the judge evaluates"},"judgeModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Plan-gated client choice of evaluation model; falls back to the admin A/B pool"},"remediation":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow the evaluator to act post-call (alert business + VL admin for risky/unfixable misses)"},"autoSendToCustomer":{"type":"boolean","description":"Permit auto-sending the drafted follow-up to the caller for SAFE misses (hybrid auto-action)"},"mode":{"type":"string","enum":["alert","managed_agent"],"description":"\"alert\" = detect+notify (+ safe auto-message); \"managed_agent\" = a guard-railed agent re-runs the missed tools using the live toolset, then alerts for what it could not do"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Per-agent override for the remediation agent's primary model (plan-gated)"},"escalationModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Per-agent override for the smarter model the remediation agent escalates to (plan-gated)"}},"description":"Post-call remediation policy — hybrid: safe auto-actions + human alerts for risky"}},"description":"Admin-only post-call evaluation configuration"}},"description":"Configuration for post-call analysis and reporting","example":{"analysisPrompt":"Analyze this call for customer satisfaction and key points discussed.","summaryPrompt":"Provide a concise summary of this call.","emails":["analyst@company.com"],"analysisSmsConfig":{"sendSmsCondition":"always","smsPromptEvaluation":"","smsMessage":"{{phone_number}} {{viewUrl}}","minimumDuration":10,"sendSmsFromCallerId":false},"analysisEmailConfig":{"sendEmailCondition":"always","emailPromptEvaluation":"","emailSubject":"Voice Logica AI- Call analysis: {{caller}} {{date}}","includeInEmail":{"callUrl":true,"summary":true,"analysisProperties":true,"dynamicVariables":true,"recording":true,"transcription":true},"minimumDuration":10,"minimumVisitorMessages":1}}},"sendDmtf":{"type":"boolean","description":"Whether to send DTMF tones during the call (will be active for 40 seconds)"},"dtmfTimeout":{"type":"number","minimum":1,"maximum":60,"description":"Timeout for DTMF input in seconds (1-60 seconds)"},"dtmfKeyToTrigger":{"type":"string","enum":["dtmf-timeout","#","*"],"description":"Keys to trigger the workflow"},"secondsRingingUntilAnswer":{"type":"number","minimum":1,"maximum":60,"description":"Number of seconds to ring before considering the call unanswered (1-60 seconds)"},"volumeThreshold":{"type":"number","minimum":0,"maximum":1,"description":"Audio volume threshold for detecting speech (0.0 to 1.0)"},"saveRecording":{"type":"boolean","description":"Whether to save call recordings"},"saveRecordingGoogleDrive":{"type":"boolean","description":"Whether to save call recordings to Google Drive"},"topNknowledgeQuestionsInPrompt":{"type":"number","minimum":1,"maximum":20,"description":"DEPRECATED — not read by the prompt path; use nKnowledgeFilesQuery"},"nKnowledgeFilesQuery":{"type":"number","minimum":1,"maximum":10,"description":"Number of knowledge files to query for context (max 10)"},"selectiveKnowledgeLookup":{"type":"boolean","description":"When enabled, the AI uses a tool to selectively query specific knowledge files instead of searching all files on every message"},"generateKnowledgeFromTransferredCalls":{"type":"boolean","description":"When enabled, transferred calls are analysed post-transfer and any valuable Q&A insights are added to a private per-agent knowledge file, which is then loaded automatically on future calls."},"recordUnansweredQuestions":{"type":"boolean","description":"When enabled, every finished call is analysed for questions the agent could not answer. Each is stored on the agent’s private knowledge file with no answer and a count of how many calls have asked it, so the gaps can be answered in order of demand. These entries are never retrievable until someone writes the answer."},"unansweredQuestionTargets":{"type":"array","items":{"type":"string","enum":["agent","company"]},"description":"Where captured unanswered questions are stored. 'agent' keeps them on this agent's own file; 'company' puts them on a shared file every agent in the company reads. Select both to have each question routed to one or the other. Defaults to ['agent']."},"unansweredRoutingPrompt":{"type":"string","maxLength":1000,"description":"Only used when BOTH targets are selected: your own rule for which questions belong to the company file and which to this agent. Leave empty to use the default — business-wide facts go to the company, anything tied to what this agent handles stays with the agent."},"maxTimeMemory":{"type":"number","description":"Maximum time in seconds to keep conversation context in memory"},"maxInteractionsMemory":{"type":"number","minimum":0,"maximum":20,"description":"Maximum number of interactions to keep in conversation memory (max 20)"},"droppedCallResumeSeconds":{"type":"number","minimum":0,"maximum":86400,"description":"How long a returning caller or chat visitor (same number / same email) gets the LAST session's messages and AI dialogue on the new call. Memory must be on. The previous session's summary is not injected — the full last conversation is already there. Defaults to 600 (10 minutes). Max 86400 (1 day). Set 0 to always start fresh."},"droppedCallResumeMaxTurns":{"type":"number","minimum":1,"maximum":40,"description":"Optional cap on how many trailing spoken turns of the dropped call to carry over. Leave unset — the default — to carry the ENTIRE conversation, which is what keeps resolved data such as product codes and the identified customer available so the caller is never asked for them twice. Only set this if chained resumes (a caller dropping repeatedly on a bad line) grow the context too far."},"transferType":{"type":"string","enum":["warm","cold"],"description":"Type of call transfer: warm (with context) or cold (without context)"},"transferHoldSoundFileId":{"type":"string","description":"The custom sound to play when the call is transferred"},"transferHoldSound":{"type":"string","enum":["none","coffee_shop","call_center","office","soft_piano","lounge","waiting_room","custom"],"description":"The sounds to play when the call is transferred"},"transferSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Master switch for the agent's transfer capability. When false the AI is not given any transfer tool (forward_call / connect_dynamically) and the available-destinations prompt block is suppressed — but every other field on this object is preserved so the admin can re-enable it without losing config. Treated as true when undefined, for backward compatibility with agents created before this flag existed."},"transferMode":{"type":"string","enum":["blind","warm","attended"],"description":"Transfer mode: blind (immediate REFER), warm (consult + media merge), attended (SIP hold + consult + REFER/Replaces)."},"blindTransfer":{"type":"boolean","description":"Deprecated — use transferMode. Kept for legacy read compat only."},"announceTransferReason":{"type":"boolean","description":"Whether to announce the transfer reason to the person we are transferring the call to."},"transferCallBasedOnPromptInstructions":{"type":"boolean","description":"Whether to dynamically generate the transfer based on the prompt instructions."},"promptForTransferReason":{"type":"string","description":"The prompt to use when dynamically generating the transfer reason."},"analyzeTransferredCall":{"type":"boolean","description":"Whether to analyze the transferred call."},"blockTransferWhenCompanyIsClosed":{"type":"boolean","description":"Whether to block the transfer when the company is closed."},"agentIdToAnalyzeTransferredCall":{"type":"string","description":"The agent ID to analyze the transferred call."},"showCallerId":{"type":"boolean","description":"Whether to show the original caller ID to the person we are transferring the call to Or the current phone number."},"secondsToWaitForCallerToAnswer":{"type":"number","minimum":0,"maximum":60,"description":"The number of seconds to wait for the caller to answer the call."},"availableTransferDestinations":{"type":"array","items":{"type":"object","properties":{"destinationType":{"type":"string","enum":["UserEndpoint","UserGroup","External","Agent"],"description":"Kind of destination — UserEndpoint, UserGroup, External, or Agent."},"destinationId":{"type":"string","minLength":1,"maxLength":100,"description":"Target id (UserEndpoint id, UserGroup id, Agent id) or for External the phone number to dial."},"mode":{"type":"string","enum":["inherit","refer","attended"],"description":"Per-destination dispatch override: `refer` (blind, send SIP REFER), `attended` (place outbound INVITE, bridge on pickup), or `inherit` (use the agent-level blindTransfer flag). Omitted is treated as `inherit`. Internal AGENT destinations ignore this field — they always go through the agent-handoff path once it ships."},"reasonToConnect":{"type":"string","maxLength":500,"description":"When to connect the caller to this destination (e.g. \"when they ask for Dimitris\"). Injected into the live-call transfer catalog."}},"required":["destinationType","destinationId"],"description":"Whitelisted transfer destination available to this agent."},"maxItems":200,"description":"Explicit whitelist of destinations this agent may transfer to. Ignored when allowAllAvailableDestinations is true."},"allowAllAvailableDestinations":{"type":"boolean","description":"When true the agent may transfer a phone call to any enabled UserEndpoint or UserGroup (ringing that user's devices when they have SIP / app / mobile). Chat handoff uses company users. When false, only entries in availableTransferDestinations are offered."},"transferToExternalNumbers":{"type":"boolean","description":"When true the agent may transfer to external phone numbers."},"transferTimeLimitEnabled":{"type":"boolean","description":"Enable automatic transfer after the call reaches the configured time limit."},"transferTimeLimitInSeconds":{"type":"number","minimum":1,"description":"Call duration in seconds after which the agent automatically transfers the call (e.g. 120 for 2 minutes)."},"transferTimeLimitPrompt":{"type":"string","description":"Routing instructions for the automatic time-limit transfer: the destination (phone number, extension or agent ID) and what to tell the caller. Used with connect_dynamically when the time limit is reached."},"maxTransferAttemptsPerCall":{"type":"integer","minimum":1,"maximum":20,"nullable":true,"description":"Opt-in cap on transfer attempts in one call. Once reached, further transfers are refused and the agent takes a message. Unset = unlimited."}},"description":"Configuration for transfer settings","example":{"enabled":true,"announceTransferReason":false,"analyzeTransferredCall":false,"agentIdToAnalyzeTransferredCall":"","transferCallBasedOnPromptInstructions":false,"promptForTransferReason":"Forward to 100 for accounting. For sales, forward to 101. For support, forward to 102.","transferMode":"warm","showCallerId":false,"secondsToWaitForCallerToAnswer":40,"allowAllAvailableDestinations":false,"availableTransferDestinations":[],"transferToExternalNumbers":true}},"enableCallBackAtRequestedTime":{"type":"boolean","description":"Whether to enable callback functionality when users request to be called back at a later date/time"},"callBackIfCallDropsPrompt":{"type":"string","description":"Custom prompt to use when initiating a callback if the call drops"},"skroutzSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether Skroutz is enabled"},"topNSkroutzProductsInPrompt":{"type":"number","description":"Number of Skroutz products to include in the prompt"},"nSkroutzProductsQuery":{"type":"number","description":"Number of Skroutz products to query"},"minProductCodeLength":{"type":"integer","minimum":1,"maximum":20,"description":"Minimum normalized digit length for an utterance to be treated as a product code in the autonomous Skroutz lookup. Defaults to 4 when unset."},"webhookUrl":{"type":"string","format":"uri","description":"Webhook URL to send Skroutz products to"},"webhookHeaders":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The key of the webhook header"},"value":{"type":"string","description":"The value of the webhook header"}},"required":["key","value"]},"description":"Webhook headers to send with the Skroutz products data"}},"required":["enabled","topNSkroutzProductsInPrompt","nSkroutzProductsQuery"],"description":"Configuration for Skroutz settings","example":{"enabled":true,"topNSkroutzProductsInPrompt":3,"nSkroutzProductsQuery":5,"webhookUrl":"https://webhook.site/123e4567-e89b-12d3-a456-426614174000","webhookHeaders":[{"key":"Content-Type","value":"application/json"}]}},"voiceMailPhoneNumber":{"type":"string","description":"Phone numbers to attach voice mail to"},"voipConnections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for the VoIP connection"},"dial":{"type":"number","description":"Dial number or extension assigned to this connection"},"reason":{"type":"string","description":"Internal notes or purpose description for this connection"},"connectionType":{"type":"string","enum":["User","External","Agent"],"description":"Type of destination: 'Agent', 'User', or 'External'"},"agentId":{"type":"string","description":"ID of the AI agent this connection routes to (only for Agent type connections)"},"sipDomain":{"type":"string","description":"SIP domain for this connection."},"phone":{"type":"string","description":"External phone number this connection forwards to (only for External type connections)"},"userId":{"type":"string","description":"ID of the user this connection routes to (only for User type connections)"},"start":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily start time when this connection becomes available"},"end":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily end time when this connection becomes unavailable"},"canAgentTranscribe":{"type":"boolean","description":"Whether the agent can transcribe calls to this connection"},"canAgentRecord":{"type":"boolean","description":"Whether the agent can record calls to this connection"},"canAgentAnalyze":{"type":"boolean","description":"Whether the agent can analyze calls to this connection"},"canAgentSpeakWhenAsked":{"type":"boolean","description":"Whether the agent can speak when asked during calls to this connection"},"allDay":{"type":"boolean","description":"Whether this connection is available 24/7 (ignores start/end times when true)"},"syncWithGoogle":{"type":"boolean","description":"Whether availability is synchronized with Google Calendar"},"syncWithGoogleStatus":{"type":"string","enum":["open","closed"],"description":"Google Calendar sync mode: 'open' for free time availability, 'closed' for busy time unavailability"},"messageToUser":{"type":"string","description":"Custom message or announcement played before transferring calls to this connection"},"aiGeneratedMessage":{"type":"boolean","description":"Whether transfer messages are dynamically generated by AI based on call context"},"transcription_enabled":{"type":"boolean","description":"Whether real-time transcription is enabled for calls on this connection"},"agent":{"type":"object","properties":{"id":{"type":"string","description":"Agent's unique identifier"},"name":{"type":"string","description":"Agent's display name"}},"description":"Full agent details when connectionType is 'Agent' (populated from agents database)"},"user":{"type":"object","properties":{"id":{"type":"string","description":"User's unique identifier"},"name":{"type":"string","description":"User's full name"},"email":{"type":"string","description":"User's email address"},"defaultCompanyId":{"type":"string","description":"User's default company ID"},"picture":{"type":"string","description":"User's profile picture URL"},"emailVerified":{"type":"boolean","description":"Whether the user's email has been verified"},"lastConnectedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"isConnected":{"type":"boolean","description":"Whether the user is currently online/connected"}},"description":"Full user details when connectionType is 'User' (populated from users database)"},"username":{"type":"string","description":"SIP username for direct authentication (advanced configurations only)"},"password":{"type":"string","description":"SIP password for direct authentication (advanced configurations only)"},"ipAddress":{"type":"array","items":{"type":"string"},"description":"Whitelist of allowed IP addresses for security restrictions"},"extensionRegistrationIds":{"type":"array","items":{"type":"string"},"description":"IDs of the extension registrations linked with this connection"},"extensionRegistrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"voipConnectionId":{"type":"string","description":"ID of the VoIP Connection that owns this extension (legacy)"},"phoneExtensionId":{"type":"string","description":"ID of the Phone Extension that owns this extension"},"username":{"type":"string","description":"SIP username/extension that is registered"},"contactUri":{"type":"string","description":"Full SIP Contact URI for routing calls to this extension"},"remoteAddress":{"type":"string","description":"IP address of the registered SIP client"},"clientIp":{"type":"string","description":"Public client IP when known"},"remotePort":{"type":"number","description":"Port number of the registered SIP client"},"transport":{"type":"string","enum":["udp","tcp","tls","websocket"],"description":"Transport protocol: 'udp', 'tcp', 'tls' for SIP; 'websocket' for app clients"},"registeredAt":{"type":"string","format":"date-time","description":"Timestamp when this extension was registered (ISO 8601 format)"},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp when this registration will expire (ISO 8601 format)"},"expires":{"type":"number","description":"Number of seconds until expiration (decreases over time)"},"userAgent":{"type":"string","description":"SIP User-Agent identifying the client software"},"callId":{"type":"string","description":"SIP Call-ID from the REGISTER request"},"bindingSource":{"type":"string","enum":["register","invite"],"description":"'register' = the phone sent a REGISTER and can be rung; 'invite' = stand-in written from an authenticated outbound INVITE, used only for that call's in-dialog requests and never for ringing the phone"},"consecutiveInviteFailures":{"type":"integer","description":"Liveness skip-list counter. Bumped on 5xx/timeout from fork-INVITEs, reset on 200 OK. When ≥3 and `lastInviteFailureAt` is within the last 5 minutes, the registration is skipped by routing."},"lastInviteFailureAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"voipConnection":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"agentId":{"type":"string"},"userId":{"type":"string"},"connectionType":{"type":"string"}},"description":"Legacy VoIP Connection — only populated for pre-migration rows."},"userEndpoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"number":{"type":"string"},"status":{"type":"string"}},"description":"Populated UserEndpoint this registration belongs to."}},"required":["id","createdAt","active","createdBy","createdById","companyId","username","contactUri","remoteAddress","remotePort","transport","registeredAt","expiresAt","expires"],"description":"Extension registration details including contact information and expiration status","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","voipConnectionId":"507f1f77bcf86cd799439011","username":"1001","contactUri":"sip:1001@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300,"userAgent":"Zoiper 5.5.10","callId":"abc123@192.168.1.100","voipConnection":{"id":"507f1f77bcf86cd799439011","name":"Customer Support","agentId":"507f1f77bcf86cd799439012","connectionType":"Agent"}}},"description":"Active SIP device registrations for this connection (virtual populate from ExtensionRegistration collection, filtered to show only non-expired registrations). Each entry represents a physical device (phone, softphone, etc.) currently registered with this extension."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","connectionType","syncWithGoogle","syncWithGoogleStatus"],"description":"Response schema for VoIP connection including complete configuration, company metadata, and linked agent or user details","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support","dial":1,"reason":"General customer support inquiries","connectionType":"Agent","agentId":"507f1f77bcf86cd799439011","phone":"+1234567890","userId":"507f1f77bcf86cd799439012","start":{"hours":9,"minutes":0},"end":{"hours":17,"minutes":0},"canAgentTranscribe":true,"canAgentRecord":true,"canAgentAnalyze":true,"canAgentSpeakWhenAsked":false,"allDay":false,"syncWithGoogle":true,"syncWithGoogleStatus":"open","messageToUser":"Welcome to customer support!","aiGeneratedMessage":false,"agent":{"id":"507f1f77bcf86cd799439011","name":"John Doe","email":"john@example.com"},"user":{"id":"507f1f77bcf86cd799439012","name":"Jane Smith","email":"jane@example.com"},"registrations":[{"id":"507f1f77bcf86cd799439013","username":"customer_support","contactUri":"sip:customer_support@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300}]}},"description":"@deprecated Legacy populated VoIP connections. Use transferSettings.availableTransferDestinations + SipTrunk / UserEndpoint / UserGroup."},"adaptationPhraseSets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the adaptation phrase set"},"description":{"type":"string","nullable":true,"description":"The description of the phrase set"},"phraseSetId":{"type":"string","description":"The phrase set id"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Locale code"},"phrases":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Phrase value"},"boost":{"type":"number","minimum":1,"maximum":20,"description":"Boost value (1-20)"}},"required":["value","boost"]},"nullable":true,"description":"The phrases of the set"},"boost":{"type":"number","minimum":1,"maximum":20,"nullable":true,"description":"Boost value (1-20)"},"apiEnabled":{"type":"boolean","nullable":true,"description":"Whether API is enabled"},"apiUrl":{"type":"string","nullable":true,"description":"API URL"},"apiKey":{"type":"string","nullable":true,"description":"API key"},"lastPulledAt":{"type":"string","format":"date-time","description":"The last pulled at date of the phrase set","nullable":true}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","phraseSetId","language"],"description":"Response schema for adaptation phrase set including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Greetings","description":"Common customer greeting phrases","phraseSetId":"greetings_001","language":"en-US","phrases":[{"value":"Hello","boost":5},{"value":"Hi there","boost":3},{"value":"Good morning","boost":4}],"boost":5,"apiEnabled":true,"apiUrl":"https://api.example.com/phrases","apiKey":"api_key_123","lastPulledAt":"2024-01-15T10:30:00.000Z"}},"description":"List of adaptation phrase sets for improving transcription accuracy"},"afterCallFunctionCalls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"description":{"type":"string","description":"Description of the function call"},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"description":"Condition blocks for execution logic"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"],"description":"When to execute the function call"},"confirmationMethodConfig":{"type":"object","properties":{"confirmationRequired":{"type":"boolean"},"secondsToWait":{"type":"number","minimum":10},"wordMatch":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"array","items":{"type":"string"}}},"required":["required","value"]},"aiGuidance":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]},"dtmf":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]}},"required":["confirmationRequired","secondsToWait"],"description":"Configuration for user confirmation"},"messageToUserBeforeAction":{"type":"string","description":"Message to show user before executing the action"},"messageToUserAfterAction":{"type":"string","description":"Message to show user after executing the action"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"functions":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"number"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"]},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"action":{"type":"string","enum":["emailConfig","apiCall","sendSms","createEvent","sendPhoneCall","forwardCall","googleSearch","sendMessage","endCallConfig","googleSheetConfig","googleDocConfig","llmCompletion","hubspotConfig","aiResponse","transferCall","afmSearch","codeExecution"]},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}},"forwardCallConfig":{"type":"object","properties":{"voipConnectionId":{"type":"string","minLength":24}},"required":["voipConnectionId"],"example":{"voipConnectionId":"507f1f77bcf86cd799439011"}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}},"sendMessageConfig":{"type":"object","properties":{"messageToUser":{"type":"string","minLength":1}},"required":["messageToUser"],"example":{"messageToUser":"Your order has been shipped!"}},"endCallConfig":{"type":"object","properties":{"reason":{"type":"string","minLength":2}},"required":["reason"],"example":{"reason":"User requested to end the call"}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["sequence","action"]},"description":"Internal actions to execute"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","parameters","functions"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Send Email Notification","description":"Sends an email notification to the user","conditionBlocks":[],"executeAt":"immediate","messageToUserBeforeAction":"I will send you an email notification.","messageToUserAfterAction":"Email notification sent successfully!","fileIds":["file_123","file_456"],"files":[{"id":"file_123","filename":"document.pdf","s3Id":"s3-file-123","displayUrl":"https://example.com/files/document.pdf"}],"parameters":[{"id":"param_1","name":"Email Address","description":"Recipient email address","type":"string","required":true}],"functions":[{"id":"func_1","name":"Send Email","type":"email","config":{"to":"{{emailAddress}}","subject":"Notification","body":"This is a notification email."}}]}},"description":"List of function calls that are executed after the call ends"},"transferHoldSoundFile":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}}},"description":"Response schema for agent phone settings including related data","example":{"model":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0.5,"maxCompletionTokens":500},"systemPrompt":"You are a helpful customer support assistant.","voiceConfig":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","speed":1,"backgroundSound":"none","stability":0.5,"similarity":0.5},"voipConnections":[{"id":"voip-123","name":"Main Office Line","provider":"Twilio","phoneNumber":"+1234567890"}],"adaptationPhraseSets":[{"id":"aps-123","name":"Customer Service Phrases","phrases":["customer service","support","help"]}],"transcriptionConfig":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"adaptationPhraseSets":[{"id":"aps-123","name":"Customer Service Phrases","phrases":["customer service","support","help"]}]},"skroutzSettings":{"enabled":true,"topNSkroutzProductsInPrompt":3,"nSkroutzProductsQuery":5,"webhookUrl":"https://webhook.site/123e4567-e89b-12d3-a456-426614174000","webhookHeaders":[{"key":"Content-Type","value":"application/json"}]},"transferSettings":{"announceTransferReason":false,"transferCallBasedOnPromptInstructions":false,"promptForTransferReason":"Forward to 100 for accounting. For sales, forward to 101. For support, forward to 102.","transferMode":"warm","showCallerId":false},"transferHoldSound":"custom","transferHoldSoundFileId":"file-123","transferHoldSoundFile":{"id":"file-123","name":"Human Laugh 1","contentType":"audio/wav","size":1024000}}},"appointmentSettings":{"type":"object","properties":{"enabled":{"type":"boolean","nullable":true,"description":"Whether the appointment settings are enabled"},"isOnline":{"type":"boolean","nullable":true,"description":"Whether the appointment settings are online"},"services":{"type":"array","items":{"type":"object","properties":{"serviceKey":{"type":"string","description":"Stable internal identity for this service; calendars reference it so renames are safe"},"name":{"type":"string","description":"The name of the service"},"description":{"type":"string","description":"The description of the service"},"duration":{"type":"number","description":"The duration of the service in minutes"},"allowedMeetingTypes":{"type":"array","items":{"type":"string","enum":["online","phone","client-location","office-location"]},"description":"How this service can be delivered. `online`: video (e.g. Google Meet). `phone`: voice call only. `client-location`: at an address the caller provides (use location lookup tool). `office-location`: at the provider’s office; set `officeAddress` on the service (or on the matching working-hours row). Omit or `[]` when not set. Used when a working-hours row is `not-set` to decide Meet / location / office."},"officeAddress":{"type":"string","description":"Provider’s office address when `office-location` is in allowedMeetingTypes. Shown to the user for office bookings; working-hours rows may override with their own officeAddress."},"colorId":{"oneOf":[{"type":"string","enum":["1","2","3","4","5","6","7","8","9","10","11"]},{"type":"string","enum":[""]}],"description":"Google Calendar event color ID as a string, \"1\"–\"11\". Omit or \"\" for the default calendar color."}},"required":["name","description","duration","allowedMeetingTypes","colorId"]},"description":"The services of the appointment settings"},"concurrentBookings":{"type":"number","description":"The number of concurrent bookings"},"useGlobalConcurrentBookings":{"type":"string","enum":["not-set","true"],"description":"Use the global concurrentBookings for all calendars (true) or per-calendar concurrentBookings (not-set)"},"allDayBookings":{"type":"boolean","description":"Whether the appointment settings are enabled for all day bookings"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"The parameters of the appointment settings"},"canSameClientBookMultipleAppointmentsInFuture":{"type":"string","enum":["not-set","true","false"],"description":"Whether the same client can book multiple appointments in the future"},"canClientCancelAppointmentWithAi":{"type":"string","enum":["not-set","true","false"],"description":"Whether the client can cancel the appointment with AI"},"futureDaysAllowToBook":{"type":"string","enum":["not-set","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","21","30","45","60","90","120","180","365"],"description":"The number of days in advance that the appointment can be booked"},"sendConfirmation":{"type":"boolean","description":"Whether the confirmation is sent"},"confirmationPrompt":{"type":"string","description":"The confirmation prompt for the appointment"},"confirmationSmsSenderId":{"type":"string","description":"Sender shown on the confirmation SMS (a verified Yuboto sender ID). Empty falls back to the send_sms tool sender, then to VoiceLogica."},"appointmentDescriptionContents":{"type":"array","items":{"type":"string","enum":["questions","services","notes","location","call_url","summary","recording_url"]},"description":"Blocks included in the calendar event description: questions, services, notes, location, call_url, summary, recording_url. Omit for the default set (questions, notes, location, summary)"},"calendars":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the calendar"},"calendarKey":{"type":"string","description":"Stable internal identity for this calendar; allows several calendars to share one Google calendarId"},"calendarId":{"type":"string","description":"The provider calendar ID this calendar reads/writes (Google or Azure/Outlook; may be shared across calendars)"},"provider":{"type":"string","enum":["google","azure"],"description":"Calendar backend for this calendar: 'google' or 'azure' (Microsoft 365). Omit to use the company default."},"description":{"type":"string","description":"The description of the calendar"},"serviceKeys":{"type":"array","items":{"type":"string"},"description":"The serviceKeys of the services of the calendar"},"serviceNames":{"type":"array","items":{"type":"string"},"description":"Legacy name-based service reference; kept for calendars saved before serviceKeys existed"},"futureDaysAllowToBook":{"type":"number","minimum":1,"maximum":365,"description":"The number of days in advance that the appointment can be booked"},"concurrentBookings":{"type":"number","description":"Per-calendar concurrent bookings; omit or 0 to inherit the agent-level default"},"countAllCalendarEventsForConcurrency":{"type":"boolean","description":"Advanced: count every Voice Logica booking on the same Google calendar toward concurrency, whichever logical calendar made it (ignore service names). Use it when several logical calendars share one Google calendar. Default is service-name concurrency."},"restrictions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["max_per_hour","max_per_day","max_per_week","min_gap_minutes","min_notice_hours","min_notice_business_days","min_notice_calendar_days"],"description":"max_per_hour | max_per_day | max_per_week | min_gap_minutes (minimum free gap between appointments) | min_notice_hours (earliest bookable slot is this many hours from now) | min_notice_business_days (this many full company operating days of notice after today; today never counts; every calendar uses that same date, falling back to the union of calendar working days when the company has no hours) | min_notice_calendar_days (same, counting every day including closed ones)"},"limit":{"type":"number","minimum":1,"description":"Cap for max_* types, gap in minutes for min_gap_minutes, lead-time hours for min_notice_hours, or number of days for the min_notice_*_days types (days of notice after today, so 2 on a Wednesday makes Friday the earliest bookable day)"},"serviceNames":{"type":"array","items":{"type":"string"},"description":"When set, restriction applies only to these service names; omit for all services on the calendar"},"enabled":{"type":"boolean","description":"When false, restriction is ignored. Default true."}},"required":["type","limit"]},"description":"Optional booking restrictions: max per hour/day/week, minimum gap between appointments, or minimum notice (hours or operating days) before the start"},"appointmentTitle":{"type":"string","description":"The title of the appointment"},"appointmentNotes":{"type":"string","description":"The notes of the appointment"},"canClientCancelAppointmentWithAi":{"type":"boolean","description":"Whether the client can cancel the appointment with AI"},"canSameClientBookMultipleAppointmentsInFuture":{"type":"boolean","description":"Whether the same client can book multiple appointments in the future"},"workingHours":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Day of the week"},"meetingType":{"type":"string","enum":["online","phone","client-location","office-location","not-set"],"default":"not-set","description":"Modality for this time window: online (Meet), phone, client-location, or office-location. `not-set` = inherit Meet / location / office behaviour from each booked service’s allowedMeetingTypes."},"officeAddress":{"type":"string","description":"Physical office for this window when it includes office-location; overrides service.officeAddress if both are set."},"startTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"Start time for bookings in this window (local calendar day)"},"endTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"End time for bookings in this window (local calendar day)"}},"required":["day","startTime","endTime"]},"description":"Per-calendar bookable windows. Same `day` may appear multiple times for split schedules (e.g. Fri morning office, Fri afternoon client site)."}},"required":["name","calendarId","description","serviceNames","futureDaysAllowToBook"]},"description":"Array of calendar IDs that the appointment settings are enabled for"},"useGlobalWorkingHours":{"type":"string","enum":["not-set","true"],"description":"Use global working hours for all calendars (true) or per-calendar working hours (not-set)"},"workingHours":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Day of the week"},"meetingType":{"type":"string","enum":["online","phone","client-location","office-location","not-set"],"default":"not-set","description":"Modality for this time window: online (Meet), phone, client-location, or office-location. `not-set` = inherit Meet / location / office behaviour from each booked service’s allowedMeetingTypes."},"officeAddress":{"type":"string","description":"Physical office for this window when it includes office-location; overrides service.officeAddress if both are set."},"startTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"Start time for bookings in this window (local calendar day)"},"endTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"End time for bookings in this window (local calendar day)"}},"required":["day","startTime","endTime"]},"description":"Global bookable windows when useGlobalWorkingHours is true. Same weekday may repeat with different times and meetingType (e.g. Fri morning office, Fri afternoon client site)."},"reminderSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the reminder is enabled"},"daysBefore":{"type":"number","description":"The number of days before the appointment to send the reminder"},"time":{"type":"string","description":"The time of the day to send the reminder"},"type":{"type":"string","enum":["email","sms","phone"],"description":"The type of reminder"},"numberOfRetries":{"type":"number","description":"The number of retries for the reminder"},"sendFallbackSms":{"type":"boolean","description":"Whether the fallback SMS is sent"},"fallbackSms":{"type":"string","description":"The fallback SMS message for the appointment"}},"required":["enabled","daysBefore","time","type","numberOfRetries","sendFallbackSms","fallbackSms"],"description":"The reminder settings for the appointment"},"waitingListEnabled":{"type":"boolean","description":"Whether the waiting list is enabled"},"waitingListSettings":{"type":"object","properties":{"candidateDays":{"type":"number","minimum":1,"maximum":365,"description":"How far ahead to look for people to call about a freed slot. Defaults to 30 days; without it the search follows futureDaysAllowToBook, which can be a full year."},"callFromHour":{"type":"string","description":"Earliest local time to place a waiting-list call, HH:MM. Default 09:00."},"callToHour":{"type":"string","description":"Latest local time to place a waiting-list call, HH:MM. Default 20:00."}},"description":"Bounds on who the waiting list calls, and when"}},"required":["sendConfirmation"]},"widgetSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the embeddable widget is enabled for this agent"},"allowedDomains":{"type":"array","items":{"type":"string"},"description":"Hostnames allowed to embed this widget. Empty = allow all."},"allowWwwVariant":{"type":"boolean","description":"Also allow www. variant of each allowed domain"},"actionsRequireVerification":{"type":"boolean","description":"Unverified visitors get a questions-only agent: tools that send messages or touch external systems load only after email/mobile/Google verification"},"collectFields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$","description":"Dynamic variable key used in prompts as {{key}}"},"label":{"type":"string","minLength":1,"maxLength":120,"description":"Label shown to the visitor"},"placeholder":{"type":"string","maxLength":200},"type":{"type":"string","enum":["text","email","tel","number","location","files"],"description":"Input type"},"required":{"type":"boolean"}},"required":["key","label"]},"maxItems":20,"description":"Dynamic fields to ask visitors before starting (name, client_id, …). Email is widgetSettings.email."},"email":{"type":"object","properties":{"required":{"type":"boolean"},"validation":{"type":"boolean"}},"description":"Require a visitor email; optional 6-digit email validation"},"phone":{"type":"object","properties":{"required":{"type":"boolean"},"validation":{"type":"boolean"}},"description":"Require a visitor mobile; optional SMS code (Greece/Cyprus only)"},"feedback":{"type":"object","properties":{"mode":{"type":"string","enum":["none","end"]},"collectComment":{"type":"boolean"}},"description":"Legacy, always 'none'. The end-of-chat rating (Good/Bad + optional comment) is set on the evaluate_conversation tool, not here: update_agent_settings with section 'tools' and changes { name: 'evaluate_conversation', enabled: true, channels: ['widget'], collectComment: true }."},"interface":{"type":"object","properties":{"startsCollapsed":{"type":"boolean"},"languageDropdown":{"type":"boolean"},"enableMuting":{"type":"boolean"},"markdownAllowedDomains":{"type":"array","items":{"type":"string"},"description":"Hostnames whose links in agent replies are clickable, e.g. [\"example.com\", \"hihello.com\"]. Exact host match (plus www. when allowWwwVariantForMarkdown). Empty = no link is clickable; other links show struck through."},"allowWwwVariantForMarkdown":{"type":"boolean","description":"Also accept the www. variant of each markdownAllowedDomains entry. Default true."},"allowHttpLinks":{"type":"boolean","description":"Also allow plain http:// (not https) links on markdownAllowedDomains. Does not make any link clickable by itself."},"acceptFiles":{"type":"boolean"},"acceptLocation":{"type":"boolean"},"pageContext":{"type":"boolean","description":"Tell the agent which page the visitor is on (address without query string, title, description, main heading), at start and whenever they move to another page. Default false."},"inactivityMinutes":{"type":"number","minimum":1,"maximum":30}}},"avatar":{"type":"object","properties":{"type":{"type":"string","enum":["orb","link","image"]},"firstColor":{"type":"string"},"secondColor":{"type":"string"},"linkUrl":{"type":"string"},"imageUrl":{"type":"string"},"imageFileId":{"type":"string"}}},"terms":{"type":"object","properties":{"required":{"type":"boolean"},"termsText":{"type":"string"}}},"styling":{"type":"object","properties":{"variant":{"type":"string","enum":["tiny","compact","full"]},"placement":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left"]},"base":{"type":"string"},"baseHover":{"type":"string"},"baseActive":{"type":"string"},"baseBorder":{"type":"string"},"baseSubtle":{"type":"string"},"basePrimary":{"type":"string"},"baseError":{"type":"string"},"accent":{"type":"string"},"accentHover":{"type":"string"},"accentActive":{"type":"string"},"accentBorder":{"type":"string"},"accentSubtle":{"type":"string"},"accentPrimary":{"type":"string"},"overlayPadding":{"type":"number"},"buttonRadius":{"type":"number"},"inputRadius":{"type":"number"},"bubbleRadius":{"type":"number"},"sheetRadius":{"type":"number"},"compactSheetRadius":{"type":"number"},"dropdownSheetRadius":{"type":"number"},"syntaxTheme":{"type":"string","enum":["auto","light","dark"]},"offsetX":{"type":"number","minimum":0,"maximum":400,"description":"Desktop gap from the left/right edge in px (default: overlayPadding)"},"offsetY":{"type":"number","minimum":0,"maximum":400,"description":"Desktop gap from the top/bottom edge in px (default: overlayPadding)"},"mobileOffsetX":{"type":"number","minimum":0,"maximum":400,"description":"Phones (≤767px): gap from the left/right edge in px (default: the desktop gap)"},"mobileOffsetY":{"type":"number","minimum":0,"maximum":400,"description":"Phones (≤767px): gap from the top/bottom edge in px, e.g. 90 to clear a fixed \"Book now\" bar (default: the desktop gap)"},"mobilePlacement":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left"],"description":"Phones (≤767px): another corner than placement (default: placement)"}}},"text":{"type":"object","properties":{"main_label":{"type":"string"},"start_call":{"type":"string"},"start_chat":{"type":"string"},"new_call":{"type":"string"},"end_call":{"type":"string"},"end_chat":{"type":"string"},"mute_microphone":{"type":"string"},"change_language":{"type":"string"},"collapse":{"type":"string"},"expand":{"type":"string"},"copied":{"type":"string"},"accept_terms":{"type":"string"},"dismiss_terms":{"type":"string"},"collect_title":{"type":"string"},"collect_continue":{"type":"string"},"listening_status":{"type":"string"},"speaking_status":{"type":"string"},"connecting_status":{"type":"string"},"chatting_status":{"type":"string"},"input_label":{"type":"string"},"input_placeholder":{"type":"string"},"input_placeholder_text_only":{"type":"string"},"input_placeholder_new_conversation":{"type":"string"},"user_ended_conversation":{"type":"string"},"agent_ended_conversation":{"type":"string"},"conversation_id":{"type":"string"},"error_occurred":{"type":"string"},"copy_id":{"type":"string"},"initiate_feedback":{"type":"string"},"request_follow_up_feedback":{"type":"string"},"thanks_for_feedback":{"type":"string"},"thanks_for_feedback_details":{"type":"string"},"follow_up_feedback_placeholder":{"type":"string"},"submit":{"type":"string"},"go_back":{"type":"string"},"send_message":{"type":"string"},"text_mode":{"type":"string"},"voice_mode":{"type":"string"},"switched_to_text_mode":{"type":"string"},"switched_to_voice_mode":{"type":"string"},"copy":{"type":"string"},"download":{"type":"string"},"wrap":{"type":"string"},"agent_working":{"type":"string"},"agent_done":{"type":"string"},"agent_error":{"type":"string"},"attach_file":{"type":"string"},"remove_file":{"type":"string"},"file_upload_error":{"type":"string"},"file_type_unsupported":{"type":"string"},"file_too_large":{"type":"string"},"file_limit_reached":{"type":"string"},"share_location":{"type":"string"},"locating":{"type":"string"},"location_ready":{"type":"string"},"location_denied":{"type":"string"},"files_hint":{"type":"string"},"uploading_files":{"type":"string"},"typing_indicator":{"type":"string"},"start_chat_hint":{"type":"string"},"start_chat_hint_files":{"type":"string"},"start_call_hint":{"type":"string"},"preview_agent":{"type":"string"},"preview_visitor":{"type":"string"},"collect_hint_chat":{"type":"string"},"collect_hint_call":{"type":"string"},"terms_title":{"type":"string"},"try_again":{"type":"string"},"show_transcript":{"type":"string"},"hide_transcript":{"type":"string"},"unmute_microphone":{"type":"string"},"microphone_muted":{"type":"string"},"conversation_ended":{"type":"string"},"call_ended":{"type":"string"},"teammate_joined":{"type":"string"},"teammate_joined_hint":{"type":"string"},"team_member":{"type":"string"},"duration":{"type":"string"},"messages":{"type":"string"},"feedback_good":{"type":"string"},"feedback_bad":{"type":"string"}}},"shareablePage":{"type":"object","properties":{"description":{"type":"string"},"requireTerms":{"type":"boolean"}}},"pageNavigation":{"type":"object","properties":{"enabled":{"type":"boolean","description":"The widget AI may open pages of this website for the visitor (text chat only). Only the page's own site and allowedDomains; the visitor sees \"Taking you to …\" and can cancel. Default false."},"listedPagesOnly":{"type":"boolean","description":"When pages are listed, the AI may open only those addresses (any query string). Default true. Ignored while the list is empty."},"instructions":{"type":"string","maxLength":1000,"description":"Extra instructions for the AI about opening pages"},"pages":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","maxLength":500,"description":"The page: a path on the site (\"/el/crete\") or an absolute https address on it"},"name":{"type":"string","maxLength":120,"description":"What the page is, e.g. \"Hotels in Crete\""},"description":{"type":"string","maxLength":150,"description":"Optional: when to open it, e.g. \"all our Cretan hotels, filter by town\""}},"required":["url","name"]},"maxItems":200,"description":"Pages the AI can open, with a name and an optional description (import them from the sitemap in the app)"}},"description":"The AI opens pages of this website for the visitor (text chat only)"}}},"tools":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"name":{"type":"string","enum":["skip_turn","send_sms","send_email","eshop_integration","hubspot","zoho","salesforce","navigate_ivr","schedule_callback","detect_live_sentiment","detect_live_frustration","schedule_appointment","handle_silence","lock_on_speaker","galaxy_drugstore","galaxy_erp","soft1_erp","entersoft_one","odoo_erp","pylon_erp","sap_erp","splynx","shopify","woocommerce","opencart","magento","megasoft","gonnaorder","prestashop","airtable","jira","guesty","clickup","trello","dropbox","googleChat","zoho_crm","helpdesk","courier","outlook","detect_voice_mail","add_participant","make_call_private","pause_recording","request_data_erasure","send_info_page","capture_data_via_sms","compare_caller_to_branches","find_location_info","evaluate_conversation","extract_document","scrape_website","fleet_management","caller_verification","custom_api","webhotelier","hosthub","exelixis_smart"]},"prompt":{"type":"string"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"Play keyboard wait music while this tool runs mid-call"},"senderId":{"type":"string"},"mailboxId":{"type":"string"},"propertyCode":{"type":"string"},"url":{"type":"string","format":"uri"},"interval":{"type":"number","minimum":10,"maximum":10080},"vectorField":{"type":"string"},"aiEnabled":{"type":"boolean"},"keyOfId":{"type":"string","enum":["mpn","ean","sku","skroutzId","groupCode","none"]},"deltaCapable":{"type":"boolean"},"lastSyncAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastFullSyncAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"feedEtag":{"type":"string"},"feedLastModified":{"type":"string"},"timesFailed":{"type":"number"},"readContactProperties":{"type":"array","items":{"type":"string"}},"updateContactProperties":{"type":"array","items":{"type":"string"}},"createCallActivity":{"type":"boolean"},"nudgeIntervalSeconds":{"type":"number","minimum":0,"maximum":60},"timesToNudge":{"type":"number","minimum":1,"maximum":3},"actions":{"type":"array","items":{"type":"string","enum":["forward","hangup"]}},"allowMultipleSpeakers":{"type":"boolean"},"leaveMessage":{"type":"boolean"},"maxDurationSeconds":{"type":"number","minimum":5,"maximum":120},"words":{"type":"array","items":{"type":"string"}},"timeoutSeconds":{"type":"number","minimum":0,"maximum":10},"maxSkips":{"type":"integer","minimum":0,"maximum":20},"enabledOperations":{"type":"array","items":{"oneOf":[{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","check_item_availability","get_item_price","calculate_order","place_order","get_order_status","get_customer_history","get_customer_balance","get_customer_aging","get_customer_kartela_link","find_items_by_active_ingredient","get_invoice_pdf_links","get_next_route","get_customer_top_items","get_top_selling_items","get_customer_fin_info_per_drug_type"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_item_by_id","create_sales_doc","get_sales_doc_by_id"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_balance","get_customer_aging","get_customer_history","get_customer_orders","get_customer_top_items","get_top_selling_items","create_order","create_invoice","create_delivery_note","create_receipt","update_order","update_invoice","update_delivery_note","update_receipt","add_order_line","remove_order_line","adjust_order_quantity","set_order_transfer","log_call","create_meeting","create_task","search_activities","list_projects","create_project","list_project_actions","create_customer","add_customer_phone","remove_customer_phone","get_order_by_key","create_sales_doc","update_sales_doc","transmit_einvoice"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_purchase_history","get_customer_branches","get_customer_balance","add_order_line","remove_order_line","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_products","get_customer_orders","get_order","get_customer_balance","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_login","lookup_customer_by_name","link_caller_to_customer","get_customer_balance","get_services","get_invoices","get_online_status","create_ticket","set_customer_status"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_balance","get_customer_aging","run_public_query","run_ebs_service","create_sales_doc"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order","create_draft_order","sync_products_to_skroutz"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","create_order"]},{"type":"string","enum":["lookup_customer","check_availability","create_order","get_order","list_customer_orders"]},{"type":"string","enum":["get_contact","list_company_contacts","list_support_members","get_order","list_customer_orders","create_ticket","search_items","create_order","send_statement","get_balance"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_name","link_caller_to_customer","lookup_customer_by_afm","verify_customer","get_customer_by_code","get_customer_balance","search_products","get_product_by_code","list_shipping_methods","list_payment_methods","get_customer_orders","get_order_status","get_customer_purchases","list_offers","get_item_price","get_product_stock","get_alt_items","cancel_order","create_order"]},{"type":"string","enum":["search_catalog","get_offer","check_delivery_address","lookup_customer_by_phone","lookup_customer_by_name","link_caller_to_customer","get_customer_orders","list_time_slots","create_order","validate_location","get_order_status","create_payment_link","check_payment_status","create_reservation"]},{"type":"string","enum":["check_availability","search_bookings","get_reservation","get_property_info","create_booking","cancel_booking","get_rooms","get_rates","get_extras","get_availability_calendar","get_best_rate","search_offers","resend_confirmation","check_multi_property_availability","search_properties"]},{"type":"string","enum":["identify_caller","search_reservations","get_reservation","list_rentals","get_rental","check_availability"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_order_states","create_order","update_order_status"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_email","get_contact_by_id","lookup_contact_by_name","link_caller_to_contact"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","create_lead","add_note"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","link_caller_to_contact","get_contact_by_id","create_lead","log_call"]},{"type":"string","enum":["lookup_record_by_phone","search_records","get_record_by_id","create_record","update_record"]},{"type":"string","enum":["lookup_issue","search_issues","create_issue","update_issue","add_comment","get_comments","transition_issue","assign_issue","list_projects","list_create_fields"]},{"type":"string","enum":["identify_caller","get_reservations","get_reservation","get_listings","get_listing_details","get_house_rules","get_conversations","check_availability","get_quote","get_owner_revenue","create_task","list_tasks","send_message"]},{"type":"string","enum":["create_task","update_task","update_task_status","move_task","assign_task","list_members","add_attachment","add_comment","search_tasks","get_task","find_list","get_contact_by_number","list_contacts"]},{"type":"string","enum":["list_boards","list_lists","list_cards","get_card","search_cards","list_members","create_card","update_card","move_card","list_comments","add_comment","assign_member","remove_member","add_attachment"]},{"type":"string","enum":["get_account","list_files","get_metadata","get_download_link","search_files","list_shared_links","upload_file","create_folder","create_shared_link","create_file_request","move_file","copy_file","delete_file"]},{"type":"string","enum":["send_message","send_to_default_space","send_via_webhook"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","create_lead","add_note"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","link_caller_to_contact","get_recent_tickets","create_ticket","add_ticket_reply"]},{"type":"string","enum":["track_voucher","reschedule_delivery"]},{"type":"string","enum":["check_availability","list_events","create_event","update_event","lookup_contact"]}]}},"defaultWrhsCode":{"type":"string"},"defaultProjectKey":{"type":"string"},"defaultIssueTypeName":{"type":"string"},"defaultCalendarId":{"type":"string"},"timeZone":{"type":"string"},"callerKeyType":{"type":"string","enum":["phone","vat","email","custom","none"]},"callerKeyLabel":{"type":"string"},"prefetchTicketsOnCallStart":{"type":"boolean"},"callerPhoneFields":{"type":"array","items":{"type":"string"}},"guestyPrefetch":{"type":"object","properties":{"reservations":{"type":"boolean","description":"Prefetch the caller's reservations (guest: own bookings; owner: active+upcoming across their listings)."},"listings":{"type":"boolean","description":"Prefetch the owner's listings (owners only)."},"houseRules":{"type":"boolean","description":"Prefetch house rules of the guest's reserved listing (guests with a current/upcoming reservation)."},"conversations":{"type":"boolean","description":"Prefetch the caller's recent Guesty conversations."}}},"guestyLimits":{"type":"object","properties":{"maxReservationRangeDays":{"type":"integer","minimum":0,"nullable":true,"description":"Cap (days) on an owner-by-listing reservation date range — the strongest guard. Default and system maximum 7."},"maxReservations":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on reservations returned by any single call. Default 10, system maximum 20."},"maxConversations":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on conversations returned / prefetched. Default 5."},"maxListings":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on listings returned. Default 20."},"prefetchReservationBackDays":{"type":"integer","minimum":0,"nullable":true,"description":"Prefetch window: days before today for a caller's reservations. Default 3."},"prefetchReservationForwardDays":{"type":"integer","minimum":0,"nullable":true,"description":"Prefetch window: days after today. Default 4."}}},"guestyQuoteSource":{"type":"string"},"autoIdentifyCaller":{"type":"boolean"},"prefetchOrdersOnCallStart":{"type":"boolean"},"prefetchOrdersDays":{"type":"integer"},"prefetchOrdersMaxOrders":{"type":"integer"},"prefetchShippingZonesOnCallStart":{"type":"boolean"},"maxOrderValue":{"type":"number","nullable":true},"maxOrderLines":{"type":"integer","nullable":true},"maxSalesDocValue":{"type":"number","nullable":true},"maxSalesDocLines":{"type":"integer","nullable":true},"salesDocShippingEnabled":{"type":"boolean"},"salesDocManageOlderThan24h":{"type":"boolean"},"allowExternalNumbers":{"type":"boolean"},"announceRecordingPause":{"type":"string","enum":["off","pause","resume","both"]},"customAttributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"The attribute key. Meaning varies per provider (see tool config description)."},"description":{"type":"string","minLength":1,"description":"What the AI should put in this field — shown to the LLM as the parameter description."},"required":{"type":"boolean","description":"When true, the AI must fill the field. The write op is rejected if missing."}},"required":["key","description"]}},"logCallNotesTemplate":{"type":"string"},"logCallOnlyWhenField":{"type":"string"},"logCallMergeDaily":{"type":"boolean"},"logCallActor":{"type":"string"},"logCallActorRules":{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","minLength":1,"description":"Post-call analysis property to test, e.g. \"requested_person\"."},"values":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"description":"Values that select this rule — the canonical name plus spoken variants. Case/accent-insensitive; a value also matches when it appears as whole words inside the analysis text."},"actor":{"type":"string","minLength":1,"description":"Soft1 ACTOR (user) the call is assigned to when this rule matches. Supports {{variables}}."},"label":{"type":"string","description":"Operator note, e.g. the person's name. Shown in logs only."}},"required":["property","values","actor"]}},"logCallHeaderFields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"SOACTION column name, e.g. \"UDSTRING01\" or \"CCCSOACTION.UDFTYPE\"."},"value":{"type":"string","description":"Template for the value, e.g. \"{{request_type}}\". Supports {{phone_number}}, {{caller_name}}, {{agent_name}}, {{call_date}} and any post-call analysis property."},"valueMap":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional map from the rendered text to the stored value (case/accent-insensitive key match), e.g. {\"Πωλήσεις\":\"1\",\"Υποστήριξη\":\"2\"}. Unmapped text is stored as is."}},"required":["key","value"]}},"allowedSpaces":{"type":"array","items":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque space resource name (spaces/AAQA...)"},"displayName":{"type":"string","minLength":1,"description":"Friendly label shown to the LLM and rendered in the UI"}},"required":["spaceName","displayName"]}},"allowedBoards":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Trello board id"},"name":{"type":"string","minLength":1,"description":"Board display name shown in the UI and to the AI"}},"required":["id","name"]}},"allowedWebhookLabels":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Field key, e.g. \"full_name\" or \"accident_location\""},"description":{"type":"string","description":"What to ask for — shown as the field label/help text on the web form"},"type":{"type":"string","enum":["text","number","location","files"],"description":"Input type; \"location\" asks for GPS + map pin; \"files\" lets the caller upload photos/PDFs (S3 + OCR/AI analysis)"},"required":{"type":"boolean","default":true}},"required":["name","description","type"]}},"ttlMinutes":{"type":"integer"},"notifyEmails":{"type":"array","items":{"type":"string"}},"smsMessage":{"type":"string"},"maxCallbacks":{"type":"integer"},"dynamicWelcomeMessage":{"type":"boolean"},"branches":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Optional stable id for this branch"},"name":{"type":"string","minLength":1,"description":"Spoken branch name, e.g. \"Syntagma store\""},"address":{"type":"string","description":"Full address text used for geocoding when lat/lng are missing"},"latitude":{"type":"number","description":"Latitude in decimal degrees"},"longitude":{"type":"number","description":"Longitude in decimal degrees"},"googlePlaceId":{"type":"string","description":"Optional Google Place ID; used to resolve coordinates when lat/lng are missing"}},"required":["name"]}},"includeCompanyLocation":{"type":"boolean"},"regionBias":{"type":"string"},"locationDetails":{"type":"array","items":{"type":"string","enum":["phone","website","openingHours","rating","priceLevel","category","summary","mapsLink"]}},"maxResults":{"type":"integer"},"channels":{"type":"array","items":{"type":"string","enum":["calls","widget"]}},"collectComment":{"type":"boolean"},"allowResubmit":{"type":"boolean"},"sendMode":{"type":"string","enum":["always","evaluate"]},"evaluationPrompt":{"type":"string"},"channel":{"type":"string","enum":["email","sms","both"]},"maxAttempts":{"type":"integer"},"codeTtlSeconds":{"type":"integer"},"method":{"type":"string","enum":["otp","known_field"]},"matchField":{"type":"string","enum":["vatNumber"]},"matchLastDigits":{"type":"integer"},"saveCallerNumber":{"type":"boolean"},"recentlyCalledDays":{"type":"integer"},"stopsAtStart":{"type":"boolean"}},"required":["enabled","name","type"],"example":{"enabled":true,"name":"send_sms","prompt":"Send an SMS to the user","type":"system","senderId":"1234567890","url":"https://eshopkatoikidio.gr/skroutz-feed.xml","interval":60,"vectorField":"sku","aiEnabled":false,"keyOfId":"mpn","lastSyncAt":"2024-01-15T10:30:00.000Z","timesFailed":0,"readContactProperties":["firstname","lastname","phone"],"updateContactProperties":["phone"],"createCallActivity":false,"nudgeIntervalSeconds":10,"timesToNudge":3,"actions":["forward"]}}},"mcpServers":{"type":"array","items":{"type":"object","properties":{"connectionId":{"type":"string","minLength":1,"description":"Company MCP connection this agent uses"},"name":{"type":"string","minLength":1,"description":"Display name"},"slug":{"type":"string","minLength":1,"description":"Prefix for LLM tool names (mcp_{slug}__{tool})"},"enabled":{"type":"boolean","default":false},"enabledTools":{"type":"array","items":{"type":"string"},"default":[],"description":"Remote tool names the agent may call"},"selectedToolDefs":{"type":"array","items":{"type":"object","properties":{"remoteName":{"type":"string","minLength":1,"description":"Tool name as published by the MCP server"},"description":{"type":"string","default":""},"inputSchema":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"default":{}}},"required":["remoteName"]},"default":[],"description":"Schemas for enabled tools so live calls stay sync"}},"required":["connectionId","name","slug"]}},"playWaitMusicOnDuringCallTools":{"type":"boolean"},"password":{"type":"string"},"passwordTries":{"type":"number"},"externalDial":{"type":"number"},"internalDial":{"type":"string"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Unique identifier for the node"},"name":{"type":"string","description":"Display name of the node"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"description":"X,Y coordinates for node positioning"},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}},"description":"Input connections to this node"},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}},"description":"Output connections from this node"},"className":{"type":"string","description":"CSS class for styling the node"},"data":{"oneOf":[{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["conversation"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"},"systemPrompt":{"type":"string"},"enableModel":{"type":"boolean"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"enableTranscription":{"type":"boolean"},"transcriptionConfig":{"type":"object","properties":{"transcriptionProvider":{"type":"string","enum":["microsoft","google","fireworks","speechmatics","openai","assemblyai","deepgram","google_v1","google_v2","elevenlabs","voicelogica","soniox"],"description":"The transcription service provider to use for speech-to-text"},"silenceDurationMs":{"type":"number","minimum":500,"description":"Duration of silence in milliseconds before considering the user finished speaking"},"adaptationPhraseSetIds":{"type":"array","items":{"type":"string"},"description":"IDs of adaptation phrase sets to improve transcription accuracy"},"transcriptionVoiceMailPhrases":{"type":"array","items":{"type":"string"},"description":"Phrases that indicate the call has reached a voicemail system"},"waitForFullTranscription":{"type":"boolean","description":"Whether to wait for complete transcription before processing"},"enhanced":{"type":"boolean","description":"Whether to use enhanced transcription models for better accuracy"},"audioEnhancement":{"type":"boolean","description":"Whether to run ai-coustics speech enhancement (noise/background-speech suppression) on caller audio before transcription"},"audioEnhancementLevel":{"type":"number","minimum":0,"maximum":1,"description":"How aggressively the ai-coustics model suppresses noise (0.0-1.0). Uses the model default when omitted"},"endpointSensitivity":{"type":"number","minimum":-1,"maximum":1,"nullable":true,"description":"Soniox only: how aggressively endpoints are detected (-1.0 to 1.0). Higher = faster end-of-turn but more risk of cutting the caller off mid-sentence. Platform default 0.3"},"maxEndpointDelayMs":{"type":"number","minimum":500,"maximum":3000,"nullable":true,"description":"Soniox only: hard cap on how long Soniox may wait for an endpoint after speech ends (500-3000ms). Platform default 1500"},"endpointLatencyAdjustmentLevel":{"type":"integer","minimum":0,"maximum":3,"nullable":true,"description":"Soniox only: endpoint latency reduction level 0-3 (3 = most aggressive). Platform default 3"},"speculativeFinalize":{"type":"boolean","nullable":true,"description":"Soniox only: at the speculative quiet moment, request finalize() to flush pending tokens into the candidate before the endpoint. Platform default from admin settings"},"singleUtterance":{"type":"boolean","description":"Whether to process speech as single utterances"},"openAiModel":{"type":"string","enum":["whisper-1","gpt-transcribe","gpt-4o-transcribe","gpt-4o-mini-transcribe","gpt-4o-transcribe-diarize"],"description":"OpenAI model to use for transcription"},"prompt":{"type":"string","description":"Custom prompt used for transcription processing"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to focus on during transcription"},"initializationMethod":{"type":"string","enum":["on_call_start","on_human_join"],"description":"Method to initialize the transcription service"}},"required":["transcriptionProvider"],"description":"Configuration for speech-to-text transcription settings","example":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"waitForFullTranscription":false,"openAiModel":"whisper-1"}},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}},"skipTurnEnabled":{"type":"boolean"},"skipTurnPrompt":{"type":"string"},"workflowsIds":{"type":"array","items":{"type":"string"}},"knowledgeFileIds":{"type":"array","items":{"type":"string"}},"enableVoice":{"type":"boolean"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"canJumpToPreviousNode":{"type":"boolean"},"workflows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"triggers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCallStart","onCallConnect","onCallEnd","onCallTransfer","onMissedCall","onDTMFInput","onKeywordDetected","duringCall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"functionName":{"type":"string","pattern":"^[a-z0-9_]+$"},"keywords":{"type":"array","items":{"type":"string"}},"condition":{"type":"string"},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"generateMessageBeforeRunningWorkflow":{"type":"boolean"},"messageAiGenerated":{"type":"boolean"},"messagePrompt":{"type":"string"},"playWaitMusic":{"type":"boolean","description":"When true (default), play keyboard wait music while this duringCall workflow tool runs"},"useProtectedValues":{"type":"boolean","description":"onCallEnd only. When true, the non-AI steps of this workflow (API call, integrations, booking, email, SMS, sheets, conditions) get the REAL values the caller said ({{protected.afm}}, {{afm_1}}, …) when the agent protects sensitive data; AI steps (llmCompletion, aiResponse, managedAgent, googleSearch) always get placeholders. Every use is audited. Only members who may reveal sensitive data can turn it on."}},"example":{"keywords":["hello","world"],"condition":"call_started","parameters":[{"name":"call_id","value":"123"}],"playWaitMusic":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onEmailReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"emailFilters":{"type":"object","properties":{"from":{"type":"array","items":{"type":"string"}},"subject":{"type":"array","items":{"type":"string"}},"labels":{"type":"array","items":{"type":"string"}}}}},"example":{"emailFilters":{"from":["test@test.com"],"subject":["test"],"labels":["test"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onAPICall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"payloadSchema":{"type":"object","properties":{"type":{"type":"string","enum":["object"]},"properties":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","enum":["object","array","string","number","boolean","date","enum"]},"required":{"type":"boolean","default":false},"properties":{"type":"object","additionalProperties":{"type":"object","description":"Circular reference detected"}},"items":{"type":"object","description":"Circular reference detected"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"},"minimum":{"type":"number"},"maximum":{"type":"number"},"enum":{"type":"array","items":{"type":"string"}}},"required":["type"]}},"required":{"type":"array","items":{"type":"string"}}},"required":["type","properties"],"description":"Expected payload structure"}},"example":{"payloadSchema":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^TX-[0-9]{8}$"},"amount":{"type":"number","minimum":0},"currency":{"type":"string","enum":["USD","EUR","GBP"]}},"required":["transactionId","amount","currency"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onContactCreated","onCompanyCreated","onDealCreated","onTicketCreated","onPropertyChange"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","property"]},"property":{"type":"string","enum":["hs_lead_status","lifecyclestage","hubspot_owner_id","companyname","domain","dealstage","amount","closedate","closed_won_reason","closed_lost_reason","pipeline","hs_pipeline_stage","hs_due_date"]}},"example":{"resource":"contact","property":"hs_lead_status"}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onWooCommerce"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"getCustomerOrders":{"type":"boolean"},"getProductByName":{"type":"boolean"},"getProductByCode":{"type":"boolean"},"productCodeType":{"type":"string","enum":["id","sku","global_unique_id"]},"createOrder":{"type":"boolean"},"getOrderById":{"type":"boolean"},"notifyEmailsOnOrderCreation":{"type":"array","items":{"type":"string"}}},"example":{"getCustomerOrders":true,"getProductByName":true,"getProductByCode":true,"productCodeType":"id","createOrder":true,"getOrderById":true,"notifyEmailsOnOrderCreation":["test@test.com"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onYubotoPbxChannelHangup","onYubotoPbxChannelAnswer","onYubotoPbxChannelCreate"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"agentId":{"type":"string"},"allowedExtensions":{"type":"array","items":{"type":"string"}}},"example":{"username":"test","password":"test","agentId":"test","allowedExtensions":["123","456"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCampaignLeadStatusChanged"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign to watch. Omit to fire for every campaign of the company."},"statuses":{"type":"array","items":{"type":"string","enum":["successful","failed","reachedMaxRetries","askedToCallBackLater","askedToNeverCallAgain","cancelled"]},"description":"Lead statuses that fire the workflow. Omit or empty = every outcome status."},"stages":{"type":"array","items":{"type":"string"},"description":"Only fire when the lead is in one of these campaign stage names. Omit or empty = any stage."}},"example":{"campaignId":"66f1c0ffee0000000000abcd","statuses":["failed","reachedMaxRetries"],"stages":[]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onShopifyEvent"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["orders/create","orders/paid","orders/fulfilled","orders/partially_fulfilled","orders/cancelled","refunds/create","fulfillments/create","fulfillments/update"]},"minItems":1,"description":"Shopify events that start the workflow."},"financialStatuses":{"type":"array","items":{"type":"string","enum":["pending","authorized","partially_paid","paid","partially_refunded","refunded","voided"]},"description":"Only when the order payment status is one of these. Empty = any."},"fulfillmentStatuses":{"type":"array","items":{"type":"string","enum":["unfulfilled","partial","fulfilled","restocked"]},"description":"Only when the order fulfillment status is one of these. Empty = any."},"shipmentStatuses":{"type":"array","items":{"type":"string","enum":["label_printed","label_purchased","confirmed","in_transit","out_for_delivery","attempted_delivery","ready_for_pickup","delivered","failure"]},"description":"Shipment topics only: only when the carrier status is one of these. Empty = any."},"paymentGateways":{"type":"array","items":{"type":"string"},"description":"Only when a payment gateway name contains one of these (case-insensitive), e.g. \"Cash on Delivery\". Empty = any."},"tags":{"type":"array","items":{"type":"string"},"description":"Only when the order has at least one of these tags (case-insensitive). Empty = any."},"minTotal":{"type":"number","minimum":0,"description":"Only when the order total is at least this amount."},"maxTotal":{"type":"number","minimum":0,"description":"Only when the order total is at most this amount."}},"required":["topics"],"example":{"topics":["orders/create"],"financialStatuses":["pending"],"paymentGateways":["Cash on Delivery"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onLeadReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"string","enum":["tiktok","meta","google_ads","linkedin","webhook","form"]},"description":"Only leads from these sources start the workflow. Empty = any source, including ones added later."},"formIds":{"type":"array","items":{"type":"string","minLength":1},"description":"Only these forms: our lead form ids (from lead_forms_list_forms). A platform form id or a form name also matches, for older triggers. Empty = any."},"requirePhone":{"type":"boolean","description":"Skip a lead with no phone number."},"includeTestSubmissions":{"type":"boolean","description":"Also fire for test submissions. Off by default."}},"example":{"sources":["google_ads","form"],"requirePhone":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"triggerType"}}},"required":["id","name","position","outputs"],"example":{"id":1,"name":"Call Start Trigger","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"},{"node":"3","output":"default"}]},"className":"trigger-node","data":{"triggerType":"onCallStart","triggerConfig":{"enabled":true,"triggerType":"onCallEnd","description":"Trigger when a new call starts"},"transitions":[2,3]}}},"description":"Trigger node that starts the flow"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"nodeType":{"type":"string","enum":["emailConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["nodeType","nodeTitle","transitions","emailConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendSms"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["nodeType","nodeTitle","transitions","smsConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["apiCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["nodeType","nodeTitle","transitions","apiConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["codeExecution"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"codeConfig":{"type":"object","properties":{"code":{"type":"string"},"language":{"type":"string","enum":["javascript","python","java","cpp","php","ruby"]},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties for the code"}},"required":["code","language"],"example":{"code":"console.log(\"Hello, world!\");","language":"javascript","properties":[{"name":"name","type":"string"}]}}},"required":["nodeType","nodeTitle","transitions","codeConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleDocConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}}},"required":["nodeType","nodeTitle","transitions","googleDocConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createEvent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"eventConfig":{"type":"object","properties":{"calendarId":{"type":"string","description":"Google calendar id. Empty = the company's primary calendar."},"summary":{"type":"string","description":"Event title."},"startDateTime":{"type":"string","description":"Start, ISO 8601 (\"2026-08-12T15:00:00\") or \"YYYY-MM-DD HH:mm\"."},"endDateTime":{"type":"string","description":"End. Empty = start + durationMinutes."},"durationMinutes":{"type":"number","minimum":1,"maximum":1440,"description":"Used only when endDateTime is empty. Defaults to 30."},"description":{"type":"string"},"location":{"type":"string"},"attendees":{"type":"string","description":"Comma-separated emails."},"timeZone":{"type":"string","description":"IANA zone. Empty = the company timezone."},"isOnline":{"type":"boolean","description":"When true, Google adds a Meet link to the event."}},"required":["durationMinutes"],"example":{"summary":"Callback for {{contact_name}}","startDateTime":"{{callback_datetime}}","durationMinutes":30,"description":"Requested during call {{call_id}}","attendees":"sales@example.com","isOnline":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendPhoneCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}}},"required":["nodeType","nodeTitle","transitions","phoneCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["llmCompletion"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}}},"required":["nodeType","nodeTitle","transitions","llmCompletionConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheet"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]}},"required":["nodeType","nodeTitle","transitions","googleSheetConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}}},"required":["nodeType","nodeTitle","transitions","googleSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendViber"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}}},"required":["nodeType","nodeTitle","transitions","viberConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["switch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"switchConfig":{"type":"object","properties":{"cases":{"type":"array","items":{"type":"object","properties":{"block":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"transition":{"type":"string"},"transitionIndex":{"type":"number"}},"required":["block"]}}},"required":["cases"],"example":{"cases":[{"transition":"Schedule Appointment","transitionIndex":1,"block":{"operator":"and","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"schedule_appointment","fieldType":"string"}]}},{"transition":"Cancel Appointment","transitionIndex":0,"block":{"operator":"or","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"cancel_appointment","fieldType":"string"}]}}]}}},"required":["nodeType","nodeTitle","transitions","switchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["if"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"ifConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","ifConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["filter"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"filterConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","filterConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["loop"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"loopConfig":{"type":"object","properties":{"array":{"type":"string"}},"required":["array"],"example":{"array":"user_response"}}},"required":["nodeType","nodeTitle","transitions","loopConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["tableNode"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"tableConfig":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","maxLength":128},"type":{"type":"string","enum":["string","number","boolean"]}},"required":["key","label"]},"maxItems":50},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"maxItems":500},"filters":{"type":"array","items":{"type":"object","properties":{"column":{"type":"string","minLength":1},"op":{"type":"string","enum":["equals","notEquals","contains","gt","lt","gte","lte"]},"value":{"type":"string"}},"required":["column","op","value"]}},"mode":{"type":"string","enum":["producer","lookup"]},"keyColumn":{"type":"string"},"keyValue":{"type":"string"}},"required":["columns","rows"],"example":{"columns":[{"key":"name","label":"Name","type":"string"},{"key":"phone","label":"Phone","type":"string"}],"rows":[{"name":"Alice","phone":"+30 210 1234567"},{"name":"Bob","phone":"+30 210 7654321"}],"mode":"producer"}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hubspotContact","hubspotCompany","hubspotDeal","hubspotTicket","hubspotTask","hubspotNote","hubspotMeeting","hubspotEmail","hubspotCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hubspotConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"operation":{"type":"string","enum":["get","create","createOrUpdate","getOrCreate","delete","update","search","list","exists"]},"value":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"associations":{"type":"array","items":{"type":"object","properties":{"associationType":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["associationType","valueType","value"],"example":{"associationType":"contact","valueType":"id","value":"123"}}},"owner":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"contactData":{"type":"object","properties":{"properties":{"type":"object","properties":{"email":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"}},"required":[]}},"example":{"email":"test@test.com","firstname":"John","lastname":"Doe","phone":"+1234567890","company":"Test Corp","website":"https://test.com","lifecyclestage":"marketingqualifiedlead","jobtitle":"Manager","hs_additional_emails":["test2@test.com"]}},"companyData":{"type":"object","properties":{"properties":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"industry":{"type":"string"},"description":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"}},"required":[]}},"example":{"name":"Test Corp","domain":"test.com","industry":"Technology","description":"Test Description","city":"Test City","country":"Test Country","phone":"1234567890","address":"Test Address","owner":{"valueType":"email","value":"test@test.com"}}},"dealData":{"type":"object","properties":{"properties":{"type":"object","properties":{"dealname":{"type":"string"},"pipeline":{"type":"string"},"stage":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string"},"closeDate":{"type":"string"},"dealType":{"type":"string","enum":["new","existing"]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["pipeline","stage"]}},"example":{"name":"Test Deal","description":"Test Description","amount":"1000","stage":"Test Stage"}},"ticketData":{"type":"object","properties":{"properties":{"type":"object","properties":{"pipeline":{"type":"string"},"stage":{"type":"string"},"priority":{"type":"string","enum":["HIGH","MEDIUM","LOW"]},"subject":{"type":"string"},"content":{"type":"string"}},"required":["pipeline","stage","subject"]}},"example":{"pipeline":"Test Pipeline","stage":"Test Stage","priority":"HIGH","subject":"Test Subject","content":"Test Content"}},"taskData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string"},"taskType":{"type":"string"},"priority":{"type":"string"},"dueDate":{"type":"string"},"repeatType":{"type":"object","properties":{"enabled":{"type":"boolean"},"type":{"type":"string","enum":["hour","day","week","month","year"]},"value":{"type":"string"}},"example":{"enabled":true,"type":"day","value":"1"}},"reminderTime":{"oneOf":[{"type":"number"},{"type":"string"}]},"notes":{"type":"string"}},"required":["title","dueDate"]}},"example":{"associations":[{"associationType":"contact","valueType":"email","value":"contact@example.com"}],"properties":{"title":"Task Title","taskType":"TODO","priority":"MEDIUM","associations":[],"timestamp":"2021-01-01","dueDate":"2021-01-01","notes":"Task Notes","ownerEmail":"owner@example.com","status":"NOT_STARTED","reminderTime":1000}}},"noteData":{"type":"object","properties":{"properties":{"type":"object","properties":{"body":{"type":"string"}},"required":[]}}},"meetingData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title of the meeting"},"body":{"type":"string","description":"Meeting description"}}}},"required":["properties"],"example":{"properties":{"title":"Initial Project Discussion","body":"Meeting to discuss project requirements and timeline"}}},"emailData":{"type":"object","properties":{"properties":{"type":"object","properties":{"subject":{"type":"string","description":"Subject of the email"},"body":{"type":"string","description":"Email body content"}},"required":[]}},"example":{"properties":{"subject":"Project Update","body":"Here are the latest updates on the project progress."}}},"callData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title/subject of the call"},"body":{"type":"string","description":"Call description and notes"},"direction":{"type":"string","enum":["INBOUND","OUTBOUND"],"description":"Call direction"},"caller":{"type":"string","description":"Caller phone number"},"callee":{"type":"string","description":"Callee phone number"},"duration":{"type":"string","description":"Call duration in milliseconds"},"disposition":{"type":"string","enum":["9d9162e7-6cf3-4944-bf63-4dff82258764","f240bbac-87c9-4f6e-bf70-924b57d47db7","a4c4c377-d246-4b32-a13b-75a56a4cd0ff","b2cf5968-551e-4856-9783-52b3da59a7d0","73a0d17f-1163-4015-bdd5-ec830791da20","17b47fee-58de-441e-a44c-c6300d46f273"],"description":"Call disposition"},"recordingUrl":{"type":"string","description":"Call recording URL"}},"required":[]}},"example":{"properties":{"title":"Test Call","body":"Test Body"}}}},"required":["resource","operation"],"example":{"resource":"call","operation":"create","owner":{"valueType":"email","value":"test@test.com"},"properties":{"callData":{"properties":{"callTitle":"Test Call","callBody":"Test Body"}}}}}},"required":["nodeType","nodeTitle","transitions","hubspotConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheetSettings"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetSettingsConfig":{"type":"object","properties":{"googleSheetId":{"type":"string","minLength":1,"description":"The unique identifier of the Google Sheet"},"sheetName":{"type":"string","minLength":1,"description":"The name of the specific sheet within the Google Sheet"},"operation":{"type":"string","enum":["getRow","getRows","updateRow","appendRow","deleteRow","getData"],"description":"The operation to perform on the Google Sheet (getRow, getRows, updateRow, appendRow, deleteRow)"},"filter":{"type":"object","properties":{"filterType":{"type":"string","enum":["index","columnName"]},"column":{"type":"string"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"fieldType":{"type":"string","enum":["string","phone","email","number","boolean","date","time","enum"]},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["filterType","column","operator","fieldType"],"example":{"filterType":"index","column":"1","operator":"eq","fieldType":"string","fieldValue":"Chris"},"description":"Filter to apply for selecting rows, such as by index or column name"},"values":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"object","description":"Any valid JSON value"}},"required":["key","value"]},"description":"Key-value pairs for the row data"}},"required":["googleSheetId","sheetName","operation"],"example":{"googleSheetId":"123","sheetName":"Sheet1","operation":"getRow","filter":{"filterType":"index","column":"1","operator":"eq","fieldType":"number","fieldValue":"152"},"values":[{"key":"Email","value":"john.doe@example.com"},{"key":"Name","value":"John Doe"}]}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["aiResponse"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}}},"required":["nodeType","nodeTitle","transitions","aiResponseConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["transferCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["nodeType","nodeTitle","transitions","transferCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["afmSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"afmSearchConfig":{"type":"object","properties":{"afm":{"type":"string","description":"AFM of company"}},"required":["afm"],"example":{"afm":"8022188180"}}},"required":["nodeType","nodeTitle","transitions","afmSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["galaxyGetCustomer","galaxySearchItems","galaxyCheckStock","galaxyGetPrice","galaxyCalculateOrder","galaxyPlaceOrder","galaxyUpdateOrder","galaxyGetOrderStatus","galaxyGetTransactionHistory","galaxyGetCustomerBalance","galaxyGetCustomerAging","galaxyGetFinInfoPerDrugType","galaxyGetItemPurchases","galaxyGetCustomerKartelaLink","galaxyFindItemsByActiveIngredient","galaxyGetInvoicePdfLinks","galaxyGetNextRoute","galaxyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"galaxyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","checkStock","getPrice","calcLines","calculateOrder","placeOrder","updateOrder","getOrderStatus","getTransactionHistory","getCustomerBalance","getCustomerAging","getFinInfoPerDrugType","getItemPurchases","getCustomerKartelaLink","findItemsByActiveIngredient","getInvoicePdfLinks","getNextRoute","customRequest"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","custCode"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query (supports {{variables.x}})"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"checkStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"wrhsCode":{"type":"string","description":"Overrides the company default warehouse"}},"required":["itemCode"]},"getPrice":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"}},"required":["EntryType","Date","Quantity"]},"calcLines":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"},"WrhsCode":{"type":"string"},"AlterCode":{"type":"string"},"Barcode":{"type":"string"}},"required":["EntryType","Date","Quantity","WrhsCode"]},"placeOrder":{"type":"object","properties":{"entry":{"type":"object","properties":{"CompID":{"type":"string"},"CompCode":{"type":"string"},"CmpsID":{"type":"string"},"CmpsCode":{"type":"string"},"WrhsID":{"type":"string"},"WrhsCode":{"type":"string"},"CoetID":{"type":"string"},"CoetCode":{"type":"string"},"DnumID":{"type":"string"},"TransDate":{"type":"string"},"TradeDate":{"type":"string"},"CustID":{"type":"string"},"CustCode":{"type":"string"},"CussID":{"type":"string"},"CussCode":{"type":"string"},"PytmID":{"type":"string"},"PytmCode":{"type":"string"},"MeroID":{"type":"string"},"CollMeroID":{"type":"string"},"RuteID":{"type":"string"},"UserID":{"type":"string"},"SourceType":{"type":"integer"},"RefTradeCode":{"type":"string"},"VoucherCode":{"type":"string"},"Comments":{"type":"string"},"ExecutionDate":{"type":"string"},"Street":{"type":"string"},"StreetNumber":{"type":"string"},"PostalCode":{"type":"string"},"Phone":{"type":"string"},"RegnDescription":{"type":"string"},"PrefDescription":{"type":"string"},"CntrDescription":{"type":"string"},"AddressDescr":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"EntryStatus":{"type":"integer"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1},"ID":{"type":"string"},"FastNumber":{"type":"string"},"TotalValue":{"type":"number"},"NetValue":{"type":"number"},"VatValue":{"type":"number"},"Lines":{"type":"array","items":{"type":"object","properties":{"ItcpID":{"type":"string"},"ItemCode":{"type":"string"},"RequestAQty":{"oneOf":[{"type":"number"},{"type":"string"}]},"WrhsID":{"type":"string"},"Price":{"type":"number"},"Disc1Pcnt":{"type":"number"},"Disc1Val":{"type":"number"},"Disc2Pcnt":{"type":"number"},"Disc2Val":{"type":"number"},"Disc3Pcnt":{"type":"number"},"Disc3Val":{"type":"number"},"Comments":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"DiscountBehaviour":{"type":"integer","minimum":0,"maximum":2},"ZeroingDiscounts":{"type":"integer","minimum":0,"maximum":3,"description":"v103: suppress discounts"},"ApplyDscnID":{"type":"string"},"ApplyDrulID":{"type":"string"},"CicoID":{"type":"string","description":"v103: item-collection (bundle) ID"},"AQty":{"type":"number"},"DisposalAQty":{"type":"number"},"PickingQty":{"type":"number"},"NetValue":{"type":"number"},"GrossValue":{"type":"number"}},"required":["ItcpID","ItemCode","RequestAQty","WrhsID","Price","Disc1Pcnt","Disc1Val","Disc2Pcnt","Disc2Val","Disc3Pcnt","Disc3Val","Comments","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","DiscountBehaviour","ZeroingDiscounts","ApplyDscnID","ApplyDrulID","CicoID","AQty","DisposalAQty","PickingQty","NetValue","GrossValue"]},"nullable":true},"Taxes":{"type":"array","items":{"type":"object","properties":{"FiacID":{"type":"string"},"FiacCode":{"type":"string"},"TrnValue":{"oneOf":[{"type":"number"},{"type":"string"}]},"ExchVatValue":{"type":"number"}},"required":["FiacID","FiacCode","ExchVatValue"]},"nullable":true}},"required":["CompID","CompCode","CmpsID","CmpsCode","WrhsID","WrhsCode","CoetID","CoetCode","DnumID","TransDate","TradeDate","CustID","CustCode","CussID","CussCode","PytmID","PytmCode","MeroID","CollMeroID","RuteID","UserID","SourceType","RefTradeCode","VoucherCode","Comments","ExecutionDate","Street","StreetNumber","PostalCode","Phone","RegnDescription","PrefDescription","CntrDescription","AddressDescr","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","EntryStatus","LockTransaction","ID","FastNumber","TotalValue","NetValue","VatValue","Lines","Taxes"]},"previewFirst":{"type":"boolean","default":false}},"required":["entry"]},"updateOrder":{"type":"object","properties":{"ID":{"type":"string"},"EntryStatus":{"type":"integer"},"Comments":{"type":"string"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1}},"required":["ID"]},"getOrderStatus":{"type":"object","properties":{"id":{"type":"string","description":"Optional specific transaction ID — omit to list all"},"revNum":{"type":"integer","minimum":0,"default":0},"custCode":{"type":"string","description":"List the orders of this customer instead (GetTransactions by CustCode, per branch). Template strings supported."},"dateFrom":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."}}},"getTransactionHistory":{"type":"object","properties":{"CustCode":{"type":"string"},"DateFrom":{"type":"string"},"DateTo":{"type":"string"}},"required":["CustCode","DateFrom","DateTo"]},"getCustomerBalance":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."}},"required":["custCode"]},"getCustomerAging":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"getFinInfoPerDrugType":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"fromDate":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."}},"required":["custCode"]},"getItemPurchases":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"itemCode":{"type":"string","minLength":1,"description":"Galaxy item code (from item search). Template strings supported."},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"compCode":{"type":"string","description":"Branch/company code. Defaults to the customer's branch."}},"required":["custCode","itemCode"]},"getCustomerKartelaLink":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"findItemsByActiveIngredient":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Active ingredient name or AtloID. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["query"]},"getInvoicePdfLinks":{"type":"object","properties":{"custCode":{"type":"string"},"custTin":{"type":"string"},"cussCode":{"type":"string"},"id":{"type":"string"},"dateFrom":{"type":"string"},"dateTo":{"type":"string"}}},"getNextRoute":{"type":"object","properties":{"custCode":{"type":"string","minLength":1}},"required":["custCode"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"POST"},"path":{"type":"string","minLength":1,"description":"Path added after the Galaxy ERP base URL, e.g. /api/crossdomain/advancedcustomviews/<guid>. Supports {{variables}}."},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Key/value properties sent as the query string. Values support {{variables}}."},"body":{"type":"string","description":"Optional raw JSON request body (supports {{variables}}). Example for an advanced custom view: {\"filters\":[{\"CompCode\":\"01\",\"CustCode\":\"{{node_1.custCode}}\"}],\"MasterDetailTree\":false}"},"apiResponse":{"type":"string","description":"Editor-only: JSON schema of the expected response (same as the apiCall node's \"API Response\"). Powers the variable picker so downstream nodes can reference individual response fields; at runtime the real response is flattened into node_N.* regardless."}},"required":["path"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["salesforceGetContact","salesforceCreateLead","salesforceLogCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"salesforceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","createLead","logCall"]},"getContact":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{variables.x}} / {{call.phoneNumber}}"},"objectType":{"type":"string","enum":["Contact","Lead"],"description":"For by=id: which SObject the Id belongs to (default Contact)."}},"required":["by","value"]},"createLead":{"type":"object","properties":{"lastName":{"type":"string","minLength":1,"description":"Lead last name — required by Salesforce. Supports templates."},"company":{"type":"string","minLength":1,"description":"Lead company — required by Salesforce. Supports templates."},"firstName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"description":{"type":"string","description":"Short summary of the request / call reason."}},"required":["lastName","company"]},"logCall":{"type":"object","properties":{"whoId":{"type":"string","minLength":1,"description":"Contact or Lead Id the call is logged against. Supports templates."},"subject":{"type":"string","minLength":1,"description":"Task subject, e.g. \"Inbound call — order status\"."},"description":{"type":"string","description":"Call notes."}},"required":["whoId","subject"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"by":"phone","value":"{{call.phoneNumber}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["guestyFindOwner","guestyFindGuest","guestyIdentifyCaller","guestyGetListings","guestyGetListing","guestyGetReservations","guestyGetReservation","guestyGetHouseRules","guestyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"guestyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["findOwner","findGuest","identifyCaller","getListings","getListing","getReservations","getReservation","getHouseRules","customRequest"]},"findOwner":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email"],"default":"phone","description":"Which field to search the owner by"},"value":{"type":"string","minLength":1,"description":"Search term (template, e.g. {{call.phone_number}})"}},"required":["value"]},"findGuest":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Guest phone to look up via their reservations (template)"}},"required":["value"]},"identifyCaller":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Caller phone (template) — matched against owners AND guests"}},"required":["value"]},"getListings":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated listing ids (template) — e.g. {{node_X.owner.listings}}"},"ownerId":{"type":"string","description":"Resolve the owner's listing ids first, then fetch them (template)"},"q":{"type":"string","description":"Free-text search across title/nickname/address (template)"}}},"getListing":{"type":"object","properties":{"id":{"type":"string","description":"Listing _id (template) — returns the full property"},"nickname":{"type":"string","description":"Listing nickname (template) — used when no id is known"},"fields":{"type":"string","description":"Space-separated field selection; omit for the full listing"}}},"getReservations":{"type":"object","properties":{"listingIds":{"type":"string","description":"Comma-separated listing ids to scope to (template)"},"listingNickname":{"type":"string","description":"Scope to a single listing by its nickname (template)"},"ownerId":{"type":"string","description":"Scope to all of an owner's listings (resolved to ids) (template)"},"guestPhone":{"type":"string","description":"Scope to a guest's reservations by their phone (template)"},"dateFrom":{"type":"string","description":"Window start: ISO date, `today`, or relative like `-7d` (template)"},"dateTo":{"type":"string","description":"Window end: ISO date, `today`, or relative like `+7d` (template)"},"windowDays":{"type":"integer","minimum":0,"description":"When dateFrom/dateTo are omitted, use today∓windowDays as the overlap window"},"status":{"type":"string","description":"Filter by reservation status (template)"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Reservation _id / confirmation id (template)"}},"required":["id"]},"getHouseRules":{"type":"object","properties":{"listingIds":{"type":"string","minLength":1,"description":"Comma-separated listing ids (template) — house rules are keyed by listing/unit-type"}},"required":["listingIds"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"GET"},"path":{"type":"string","minLength":1,"description":"Path after the base URL, e.g. /v1/reservations (template)"},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Query params (templates)"},"body":{"type":"string","description":"Raw JSON body (template) — ignored for GET"}},"required":["path"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"value":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["helpdeskCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"helpdeskConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createTicket"]},"createTicket":{"type":"object","properties":{"subject":{"type":"string","description":"Ticket subject (template, e.g. \"Call from {{call.phone_number}}\")"},"description":{"type":"string","description":"Ticket body (template, e.g. {{call.summary}})"},"requesterPhone":{"type":"string","description":"Requester phone (template, defaults to {{call.phone_number}})"},"requesterEmail":{"type":"string","description":"Requester email (template)"},"requesterName":{"type":"string","description":"Requester display name (template)"},"priority":{"type":"string","enum":["low","medium","high","urgent"],"description":"Ticket priority"}}}},"required":["operation"],"example":{"operation":"createTicket","createTicket":{"subject":"Call from {{call.phone_number}}","description":"{{call.summary}}","requesterPhone":"{{call.phone_number}}","priority":"medium"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["courierTrackVoucher"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"courierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["trackVoucher"]},"trackVoucher":{"type":"object","properties":{"courier":{"type":"string","description":"Courier to query (acs_courier, speedex, geniki_taxydromiki, elta_courier, boxnow, skroutz_lastmile, taxydema). Omit to try every connected courier."},"voucher":{"type":"string","description":"Voucher/tracking number (template, e.g. {{node_5.order.meta.voucher}})"}}}},"required":["operation"],"example":{"operation":"trackVoucher","trackVoucher":{"voucher":"{{node_5.order.meta.voucher}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["vivaCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"vivaConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createPaymentLink"]},"createPaymentLink":{"type":"object","properties":{"amount":{"type":"string","description":"Amount in EUR as a decimal (template, e.g. \"25.50\" or {{node_3.order.total}})"},"description":{"type":"string","description":"Shown to the customer on the checkout page (template)"},"customerName":{"type":"string","description":"Customer full name (template)"},"customerPhone":{"type":"string","description":"Customer phone (template, e.g. {{call.phone_number}})"},"language":{"type":"string","enum":["el","en"],"description":"Checkout page language"}}}},"required":["operation"],"example":{"operation":"createPaymentLink","createPaymentLink":{"amount":"25.50","description":"Πληρωμή παραγγελίας","customerPhone":"{{call.phone_number}}","language":"el"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createTrackedPage"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"trackedPageConfig":{"type":"object","properties":{"html":{"type":"string","description":"Page HTML (template, e.g. {{node_2.html}} from an llmCompletion node). Scripts and forms are stripped; styles are kept."},"title":{"type":"string","description":"Browser tab title (template)"},"expiresInDays":{"type":"integer","minimum":1,"maximum":365,"description":"How long the link stays open (default 30 days)"}},"required":["html"],"example":{"html":"{{node_2.html}}","title":"Η σύνοψη της κλήσης σας","expiresInDays":30}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["shopifyGetCustomer","shopifyGetOrdersByCustomer","shopifyGetOrderById","shopifySearchProducts","shopifyGetProductById","shopifySyncProductsToSkroutz"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"shopifyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","syncProductsToSkroutz"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search — mapped to vendor / product_type / handle."},"vendor":{"type":"string"},"productType":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify product id."}},"required":["productId"]},"syncProductsToSkroutz":{"type":"object","properties":{"maxRecords":{"type":"integer","minimum":0}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["soft1GetCustomer","soft1SearchItems","soft1GetCustomerBalance","soft1GetCustomerAging","soft1GetCustomerHistory","soft1CreateSalesDoc","soft1TransmitEInvoice"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"soft1Config":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","getCustomerHistory","createSalesDoc","transmitEInvoice"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerAging":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerHistory":{"type":"object","properties":{"trdr":{"type":"string"},"tin":{"type":"string"},"code":{"type":"string"},"from":{"type":"string","description":"ISO date YYYY-MM-DD"},"to":{"type":"string","description":"ISO date YYYY-MM-DD"},"limit":{"type":"integer","minimum":1,"maximum":500,"default":50}}},"createSalesDoc":{"type":"object","properties":{"trdr":{"oneOf":[{"type":"string"},{"type":"number"}]},"custCode":{"type":"string"},"series":{"oneOf":[{"type":"string"},{"type":"number"}]},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"mtrl":{"oneOf":[{"type":"string"},{"type":"number"}]},"code":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"transmit":{"type":"boolean"}},"required":["lines"]},"transmitEInvoice":{"type":"object","properties":{"key":{"type":"string","minLength":1},"template":{"type":"string","minLength":1}},"required":["key"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["exelixisSmartGetContact","exelixisSmartListCompanyContacts","exelixisSmartListSupportMembers","exelixisSmartCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"exelixisSmartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","listCompanyContacts","listSupportMembers","createTicket"]},"getContact":{"type":"object","properties":{"phone":{"type":"string","description":"Template — e.g. {{call.phone_number}}"},"afm":{"type":"string","description":"Template — e.g. {{dynamicVariables.afm}}"}}},"listCompanyContacts":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) to list contacts for"}},"required":["companyId"]},"listSupportMembers":{"type":"object","properties":{}},"createTicket":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) — required by the ERP"},"contactId":{"type":"string"},"supportMemberId":{"type":"string"},"title":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"callUrl":{"type":"string","description":"Template — defaults to {{call.call_url}}"}},"required":["companyId","title","summary"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["pylonGetCustomer","pylonSearchItems","pylonGetCustomerBalance","pylonCreateSalesOrder","pylonGetData","pylonPostData"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"pylonConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","createSalesOrder","getData","postData"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"createSalesOrder":{"type":"object","properties":{"customerTin":{"type":"string","description":"Customer TIN — supports {{dynamicVariables.x}}. Optional when rawData supplies the customer."},"seriesCode":{"type":"string"},"customerBranch":{"type":"string"},"paymentMethod":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0}},"required":["itemCode","quantity"]}},"rawData":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Advanced: a JSON object merged verbatim into the Pylon order payload, overriding the structured fields above. Use native Pylon column names, e.g. {\"Lines\":[{\"CenlItemCode\":\"GG11\",\"CenlAMeasurementQty\":2}],\"CsdcRemarks\":\"…\"}. String values support {{dynamicVariables.x}} templates. Bypasses the structured-field validation, so it must match the target Script exactly."}}},"getData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined getjsondata Script code, e.g. itemsVoiceAgent or custInfoVoice"},"extras":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Param name, e.g. @ItemCode or @phone"},"value":{"type":"string","description":"Param value — supports {{dynamicVariables.x}}"}},"required":["name","value"]},"description":"Script parameters; omit or [] for none"},"packageSize":{"type":"integer","minimum":1,"maximum":5000,"description":"Page size (default 200)"},"allPages":{"type":"boolean","description":"Walk every page until exhausted; otherwise just page 1"}},"required":["entitycode"]},"postData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined postdata Script code, e.g. orderVoice or SalesOrders"},"data":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"JSON object serialized into the postdata `data` field. Use the shape the target Script expects. String values support {{dynamicVariables.x}} templates."}},"required":["entitycode","data"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["entersoftGetCustomer","entersoftSearchItems","entersoftGetCustomerBalance","entersoftGetCustomerAging","entersoftRunPublicQuery","entersoftRunEbsService","entersoftCreateSalesDoc"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"entersoftOneConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","runPublicQuery","runEbsService","createSalesDoc"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"code":{"type":"string","minLength":1,"description":"Customer code — supports templates"}},"required":["code"]},"getCustomerAging":{"type":"object","properties":{"code":{"type":"string","minLength":1}},"required":["code"]},"runPublicQuery":{"type":"object","properties":{"publicQueryGid":{"type":"string"},"groupId":{"type":"string"},"filterId":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Param object — values may be templates"}}},"runEbsService":{"type":"object","properties":{"serviceName":{"type":"string","minLength":1},"parameters":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}}},"required":["serviceName"]},"createSalesDoc":{"type":"object","properties":{"customerGid":{"type":"string"},"customerCode":{"type":"string"},"series":{"type":"string"},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemGid":{"type":"string"},"itemCode":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"ebsServiceName":{"type":"string"}},"required":["lines"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["wooGetCustomer","wooGetOrdersByCustomer","wooGetOrderById","wooSearchProducts","wooGetProductById","wooCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"wooCommerceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric WooCommerce customer id"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string"},"sku":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric customer id (0 for guest)"},"lineItems":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"integer","minimum":0},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","lineItems"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["opencartGetCustomer","opencartGetOrdersByCustomer","opencartGetOrderById","opencartSearchProducts","opencartGetProductById","opencartCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"opencartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"manufacturer":{"type":"string","description":"Exact manufacturer filter. Optional."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Existing OpenCart customer id (for logged-in orders)."},"firstname":{"type":"string"},"lastname":{"type":"string"},"email":{"type":"string"},"telephone":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1},"comment":{"type":"string"}},"required":["products"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["magentoGetCustomer","magentoGetOrdersByCustomer","magentoGetOrderById","magentoSearchProducts","magentoGetProductById","magentoListShippingOptions"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"magentoConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","listShippingOptions"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento order increment id (receipt number) or numeric entity id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento product id."}},"required":["productId"]},"listShippingOptions":{"type":"object","properties":{"countryId":{"type":"string","description":"Destination country as ISO-2 code, e.g. \"GR\". Defaults to \"GR\"."},"postcode":{"type":"string","description":"Destination postcode. Supports templates."},"region":{"type":"string","description":"Optional region/state name."},"sku":{"type":"string","description":"Optional product SKU to price against."}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["megasoftGetCustomer","megasoftSearchProducts","megasoftGetProductByCode","megasoftListShippingMethods","megasoftListPaymentMethods","megasoftGetCustomerBalance","megasoftGetCustomerOrders","megasoftGetOrderStatus","megasoftGetCustomerPurchases","megasoftListOffers","megasoftGetItemPrice","megasoftGetProductStock","megasoftCreateOrder","megasoftCancelOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"megasoftConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchProducts","getProductByCode","listShippingMethods","listPaymentMethods","getCustomerBalance","getCustomerOrders","getOrderStatus","getCustomerPurchases","listOffers","getItemPrice","getProductStock","createOrder","cancelOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getProductByCode":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"getCustomerBalance":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."}},"required":["customerCode"]},"getCustomerOrders":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"orderNo":{"type":"string","description":"Optional order number filter. Supports templates."}},"required":["customerCode"]},"getOrderStatus":{"type":"object","properties":{"orderNo":{"type":"string","description":"Optional order number. Supports templates."},"date":{"type":"string","description":"Optional modified-since date (yyyy-MM-dd)."}}},"getCustomerPurchases":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"itemCode":{"type":"string"}},"required":["customerCode"]},"listOffers":{"type":"object","properties":{"offerId":{"type":"string"},"activeOnly":{"type":"boolean","default":true},"dateFrom":{"type":"string"}}},"getItemPrice":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["customerCode","itemCode"]},"getProductStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"createOrder":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."},"qty":{"oneOf":[{"type":"number","minimum":0},{"type":"string","minLength":1}],"description":"Quantity. Number or template string."},"comments":{"type":"string"}},"required":["customerCode","itemCode","qty"]},"cancelOrder":{"type":"object","properties":{"orderNo":{"type":"string","minLength":1,"description":"Megasoft order number. Supports templates."},"seiraPar":{"type":"string","minLength":1,"description":"Order series / parastatiko code. Supports templates."}},"required":["orderNo","seiraPar"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["gonnaOrderSearchCatalog","gonnaOrderCheckDeliveryAddress","gonnaOrderGetCustomer","gonnaOrderGetCustomerOrders","gonnaOrderGetOrderStatus","gonnaOrderCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"gonnaOrderConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["searchCatalog","checkDeliveryAddress","getCustomer","getCustomerOrders","getOrderStatus","createPaymentLink"]},"searchCatalog":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text menu search. Supports {{dynamicVariables.x}}."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"checkDeliveryAddress":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Delivery address. Supports templates."}},"required":["address"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","name"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getCustomerOrders":{"type":"object","properties":{"customerId":{"type":"string","minLength":1,"description":"Customer id. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":10,"default":5}},"required":["customerId"]},"getOrderStatus":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid. Supports templates."}},"required":["orderUuid"]},"createPaymentLink":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid to charge for. Supports templates."},"amount":{"type":"string","description":"Amount override. Leave blank to use the order total."}},"required":["orderUuid"]}},"required":["operation"],"example":{"operation":"checkDeliveryAddress","checkDeliveryAddress":{"address":"{{dynamicVariables.callerAddress}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["webhotelierCheckAvailability","webhotelierSearchBookings","webhotelierGetReservation","webhotelierGetAvailabilityCalendar","webhotelierGetRooms","webhotelierGetRates"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"webhotelierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["checkAvailability","searchBookings","getReservation","getAvailabilityCalendar","getRooms","getRates"]},"checkAvailability":{"type":"object","properties":{"checkin":{"type":"string","minLength":1,"description":"Check-in date YYYY-MM-DD. Supports templates."},"checkout":{"type":"string","minLength":1,"description":"Check-out date YYYY-MM-DD. Supports templates."},"adults":{"type":"string","minLength":1,"description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"rooms":{"type":"string","description":"Number of rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["checkin","checkout","adults"]},"searchBookings":{"type":"object","properties":{"lastName":{"type":"string","description":"Guest last name. Supports templates. Provide this or email."},"email":{"type":"string","description":"Guest email. Supports templates. Provide this or lastName."},"checkinFrom":{"type":"string","description":"Earliest check-in YYYY-MM-DD. Supports templates."},"checkinTo":{"type":"string","description":"Latest check-in YYYY-MM-DD. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getReservation":{"type":"object","properties":{"resId":{"type":"string","minLength":1,"description":"Reservation id. Supports templates."}},"required":["resId"]},"getAvailabilityCalendar":{"type":"object","properties":{"fromd":{"type":"string","minLength":1,"description":"Calendar start / check-in date YYYY-MM-DD. Supports templates."},"tod":{"type":"string","description":"Calendar end / check-out date YYYY-MM-DD (max 3 months from fromd). Supports templates."},"adults":{"type":"string","description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"room":{"type":"string","description":"Room-type code filter. Supports templates."},"rate":{"type":"string","description":"Rate id filter. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["fromd"]},"getRooms":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code for a single room. Empty = list all rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getRates":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code to scope rates. Supports templates."},"rateId":{"type":"string","description":"Rate id for a single rate (requires roomCode). Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}}},"required":["operation"],"example":{"operation":"getReservation","getReservation":{"resId":"{{dynamicVariables.resId}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hosthubIdentifyCaller","hosthubSearchReservations","hosthubGetReservation","hosthubListRentals","hosthubCheckAvailability"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hosthubConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["identifyCaller","searchReservations","getReservation","listRentals","checkAvailability"]},"identifyCaller":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"description":"Caller phone number. Supports templates (e.g. {{call.phone_number}})."}},"required":["phone"]},"searchReservations":{"type":"object","properties":{"name":{"type":"string","description":"Guest name. Supports templates. Provide one of name / phone / confirmationCode."},"phone":{"type":"string","description":"Guest phone. Supports templates."},"confirmationCode":{"type":"string","description":"Channel confirmation code. Supports templates."}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Hosthub reservation (calendar-event) id. Supports templates."}},"required":["id"]},"getRental":{"type":"object","properties":{"rentalId":{"type":"string","description":"Rental id for a single rental. Empty = list all rentals. Supports templates."}}},"checkAvailability":{"type":"object","properties":{"rentalId":{"type":"string","minLength":1,"description":"Rental id to check. Supports templates."},"from":{"type":"string","minLength":1,"description":"Start date YYYY-MM-DD. Supports templates."},"to":{"type":"string","minLength":1,"description":"End date YYYY-MM-DD. Supports templates."}},"required":["rentalId","from","to"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["prestashopGetCustomer","prestashopGetOrdersByCustomer","prestashopGetOrderById","prestashopSearchProducts","prestashopGetProductById","prestashopCreateOrder","prestashopUpdateOrderStatus"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"prestashopConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder","updateOrderStatus"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"reference":{"type":"string","description":"Exact reference (SKU) filter."},"ean13":{"type":"string","description":"Exact EAN-13 barcode filter."},"mpn":{"type":"string","description":"Exact MPN filter."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id."},"addressDeliveryId":{"oneOf":[{"type":"number"},{"type":"string"}]},"addressInvoiceId":{"oneOf":[{"type":"number"},{"type":"string"}]},"cartId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Pre-existing cart id (PrestaShop requires it)."},"currencyId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"langId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"carrierId":{"oneOf":[{"type":"number"},{"type":"string"}]},"payment":{"type":"string","minLength":1,"description":"Human-readable payment label."},"module":{"type":"string","description":"Payment module code, e.g. \"ps_checkpayment\"."},"totalPaid":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProducts":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProductsWithTax":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalShipping":{"oneOf":[{"type":"number"},{"type":"string"}]},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"product_attribute_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0},"product_name":{"type":"string"},"unit_price":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","addressDeliveryId","addressInvoiceId","cartId","carrierId","payment","totalPaid","totalProducts","totalProductsWithTax","products"]},"updateOrderStatus":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id to update."},"orderStateId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Target order_state id (numeric, store-specific)."}},"required":["orderId","orderStateId"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["airtableGetRecord","airtableSearchRecords","airtableCreateRecord","airtableUpdateRecord"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"airtableConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getRecord","searchRecords","createRecord","updateRecord"]},"getRecord":{"type":"object","properties":{"by":{"type":"string","enum":["phone","id"],"description":"Look up by mapped phone field, or by Airtable record id"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchRecords":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"createRecord":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["fields"]},"updateRecord":{"type":"object","properties":{"recordId":{"type":"string","minLength":1,"description":"Airtable record id (rec...) — supports templates"},"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["recordId","fields"]}},"required":["operation"],"example":{"operation":"getRecord","getRecord":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["jiraGetIssue","jiraSearchIssues","jiraCreateIssue","jiraUpdateIssue","jiraAddComment","jiraTransitionIssue"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"jiraConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getIssue","searchIssues","createIssue","updateIssue","addComment","transitionIssue"]},"getIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key, e.g. SUP-1234 — supports {{dynamicVariables.x}}"}},"required":["issueKey"]},"searchIssues":{"type":"object","properties":{"text":{"type":"string","description":"Free-text query — supports templates"},"jql":{"type":"string","description":"Raw JQL — overrides text when present"},"projectKey":{"type":"string","description":"Scope the search to a project key"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"createIssue":{"type":"object","properties":{"summary":{"type":"string","minLength":1,"description":"Issue summary — supports templates"},"description":{"type":"string","description":"Issue description — supports templates"},"projectKey":{"type":"string","description":"Project key — falls back to the connection default"},"issueType":{"type":"string","description":"Issue type name — falls back to the connection default"},"priority":{"type":"string","description":"Priority name (e.g. High)"},"assignee":{"type":"string","description":"Assign to a person by email or name — supports templates"}},"required":["summary"]},"updateIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key to update — supports templates"},"summary":{"type":"string","description":"New summary — supports templates"},"description":{"type":"string","description":"New description — supports templates"},"priority":{"type":"string","description":"New priority name"}},"required":["issueKey"]},"addComment":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"body":{"type":"string","minLength":1,"description":"Comment body — supports templates"}},"required":["issueKey","body"]},"transitionIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"status":{"type":"string","minLength":1,"description":"Target status name, e.g. \"In Progress\" — supports templates"}},"required":["issueKey","status"]}},"required":["operation"],"example":{"operation":"createIssue","createIssue":{"summary":"Callback requested by {{callerPhone}}","description":"{{transcript}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleChatSendMessage","googleChatSendToDefaultSpace","googleChatSendViaWebhook"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleChatConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["sendMessage","sendToDefaultSpace","sendViaWebhook"]},"sendMessage":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque Google Chat space resource (spaces/AAQA...) — set via UI picker"},"spaceDisplayName":{"type":"string","description":"Cached display name for the node summary"},"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string","description":"Optional thread key for in-thread replies"}},"required":["spaceName","body"]},"sendToDefaultSpace":{"type":"object","properties":{"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string"}},"required":["body"]},"sendViaWebhook":{"type":"object","properties":{"webhookId":{"type":"string","minLength":1,"description":"GoogleChatWebhook document id — set via UI picker"},"webhookLabel":{"type":"string","description":"Cached webhook label for the node summary"},"body":{"type":"string","minLength":1},"threadKey":{"type":"string"}},"required":["webhookId","body"]}},"required":["operation"],"example":{"operation":"sendToDefaultSpace","sendToDefaultSpace":{"body":"New lead from {{caller_name}} ({{caller_phone}})"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["searchContact"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"searchContactConfig":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Phone number to look up (template). Most reliable identifier: matched on the stored phone index, so +30/30/national forms all hit the same contact."},"email":{"type":"string","description":"Email address to look up (template). Matched case-insensitively on the main email and every listed email."},"name":{"type":"string","description":"Name to look up (template). Fuzzy: case- and accent-insensitive, Greek/Latin spellings and common inflections. May match several contacts."}},"example":{"phoneNumber":"{{call.phone_number}}","email":"","name":""}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["managedAgent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"managedAgentConfig":{"type":"object","properties":{"prompt":{"type":"string","maxLength":10000,"default":"","description":"System prompt rendered with {{transcript}}, {{call_summary}}, {{contact}}, {{extracted_entities}}"},"builtInTools":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}},"default":[],"description":"Full AgentTool configurations the LLM may call."},"apiTools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_]{1,40}$","description":"Tool name shown to the LLM; must be unique within the node"},"description":{"type":"string","minLength":10,"maxLength":500,"description":"How the LLM decides when to call this tool"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"default":[],"description":"Input schema for the LLM"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"description":"HTTP request configuration (URL, headers, method, body) — reused from function-call api runner","example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["name","description","apiConfig"]},"default":[],"description":"Inline API tools with name + description + HTTP config"},"mcpServers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the MCP server"},"description":{"type":"string","description":"Optional description"},"serverUrl":{"type":"string","format":"uri","description":"MCP server endpoint"},"transport":{"type":"string","enum":["http","sse"],"description":"Transport: http or sse"},"authType":{"type":"string","enum":["none","bearer","oauth"],"description":"Authentication mode"},"authValue":{"type":"string","description":"Token / credential value — encrypted at rest"},"enabledTools":{"type":"array","items":{"type":"string"},"description":"Whitelist of tools exposed to the LLM. Omit to expose every tool the server publishes."}},"required":["name","serverUrl","transport","authType"]},"default":[],"description":"MCP servers whose tools the LLM may call"},"models":{"type":"object","properties":{"primary":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"description":"Model used by the loop by default","example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"escalation":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Optional fallback model rerun on the whole session if primary failed/stuck. Must use the same provider as primary."}},"required":["primary"]},"limits":{"type":"object","properties":{"maxIterations":{"type":"integer","minimum":0,"maximum":50,"default":15,"description":"Hard cap on LLM turns per run. Set to 0 for no limit (cost cap still enforced)."},"maxCostUsd":{"type":"number","minimum":0,"maximum":0.5,"default":0.5,"description":"Hard cap on total cost (USD) per run. Range: 0 to 0.5."},"stuckDetection":{"type":"boolean","default":true,"description":"Bail if the model calls the same tool with the same args twice in a row"}},"default":{}},"routing":{"type":"object","properties":{"onSuccess":{"type":"string","description":"Next workflow node ID when the run completes successfully"},"onPartial":{"type":"string","description":"Next workflow node ID when the run completed but with partial results"},"onFailure":{"type":"string","description":"Next workflow node ID when the run failed"}},"default":{}},"dryRun":{"type":"boolean","default":false},"enableSubagents":{"type":"boolean","default":false},"maxConcurrentSubagents":{"type":"integer","minimum":1,"maximum":10,"default":5},"maxSubagentIterations":{"type":"integer","minimum":1,"maximum":20,"default":8},"knowledgeFileIds":{"type":"array","items":{"type":"string"},"default":[],"description":"Knowledge files the agent can search via search_knowledge. Empty list = no knowledge tool offered."},"knowledgeRerank":{"type":"object","properties":{"enabled":{"type":"boolean","default":true,"description":"Run the rerank pass. When off, top-K is taken directly from the raw retrieval score (faster but noisier context for the main agent)."},"model":{"type":"string","default":"gpt-5.6-luna","description":"Model used for the rerank pass. Should be small/cheap — its job is ranking, not reasoning. Same provider as the node's primary model."},"candidatesK":{"type":"integer","minimum":5,"maximum":200,"default":50,"description":"How many candidates to retrieve from Pinecone before reranking. Higher = better recall, more rerank tokens. 50 is the sweet spot."},"returnK":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"How many chunks to return after reranking. The main agent sees only these."}},"default":{}},"enableScraping":{"type":"boolean","default":false,"description":"When true, agent gets scrape_website(url) tool that fetches+summarises a page via ScraperService."},"workflowToolIds":{"type":"array","items":{"type":"string"},"default":[],"description":"IDs of during-call workflows the agent may call as tools. Only their duringCall triggers run; onCallEnd-triggered or managed-agent-containing workflows are rejected to prevent recursion."}},"example":{"prompt":"You are an order assistant. From the call transcript, identify the requested products, look them up, and create an order. Use the provided tools.","builtInTools":[],"apiTools":[],"mcpServers":[],"models":{"primary":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0}},"limits":{"maxIterations":15,"maxCostUsd":0.5,"stuckDetection":true},"routing":{"onSuccess":"node-success","onFailure":"node-create-ticket"},"dryRun":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"nodeType"}},"html":{"type":"string"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}]}},"required":["id","name","position","inputs","outputs"],"example":{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}},"description":"Action nodes in the flow"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"visibility":{"type":"string","enum":["private","resellerRead","resellerWrite","globalRead"],"description":"Workflow visibility and access control"},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"WorkFlowVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer; absent for workflows that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","visibility"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Handle Incoming Call","description":"Automated call handling flow","type":"flow","executeAt":"immediate","visibility":"private","trigger":{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}},"nodes":[{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"llmCompletionConfig","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"connections":[{"node":"2","input":"default","output":"default","label":"Continue"}],"files":[{"id":"file_123","filename":"welcome.wav","s3Id":"s3-file-123","displayUrl":"https://example.com/files/welcome.wav"}]}}},"knowledgeFiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"The name of the knowledge file"},"description":{"type":"string","description":"Optional description of the knowledge file"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Language of the knowledge file"},"texts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"The subject/title of the text (shown as the knowledge entry)"},"text":{"type":"string","minLength":1,"description":"The text content"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"summary":{"type":"string","description":"One line saying what this text covers, for the agent-facing knowledge index"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["name","text","generateWithAi"]},"description":"Array of text content linked with the knowledge"},"links":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The base URL for the link"},"link":{"type":"array","items":{"type":"object","properties":{"link":{"type":"string","format":"uri","description":"The actual link URL"},"enabled":{"type":"boolean","description":"Whether the link is enabled for processing"},"lastScrapedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contentHash":{"type":"string","description":"Hash of the last scraped content; lets a re-scrape skip URLs whose content is unchanged"},"etag":{"type":"string","description":"Last ETag from the origin; sent as If-None-Match so an unchanged page returns 304"},"lastModified":{"type":"string","description":"Last Last-Modified from the origin; sent as If-Modified-Since for conditional re-fetch"},"lastScrapeAttemptAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastScrapeError":{"type":"string","description":"Why the last attempt produced nothing. Cleared on a successful scrape; set means the page is failing, not merely empty"},"title":{"type":"string","description":"The page's own declared name, from its schema.org markup — used to show the agent what this knowledge base covers"},"summary":{"type":"string","description":"One line saying what this page is about, so the agent can pick the right page before searching rather than after"}},"required":["link","enabled"]},"minItems":1,"description":"Array of link details"},"scrapeInterval":{"type":"string","enum":["off","daily","weekly","monthly"],"description":"How often the link source is automatically re-scraped. \"off\" disables re-scraping; minimum cadence is daily.","default":"off"},"crawlNewLinks":{"type":"boolean","default":false,"description":"On each re-scrape, re-crawl the base URL and ingest any newly discovered links"},"selectAllByDefault":{"type":"boolean","default":false,"description":"Auto-enable links discovered by a re-scrape crawl instead of leaving them disabled"},"excludeUrls":{"type":"array","items":{"type":"string"},"default":[],"description":"URLs to never include, even if discovered by a crawl"},"allowHosts":{"type":"array","items":{"type":"string"},"description":"Extra hosts a re-scrape crawl may add pages from. The base URL's own host and its subdomains are always allowed; every other host is skipped"},"contentFilter":{"type":"string","maxLength":2000,"description":"AI instruction for which pages to keep vs permanently exclude (e.g. only upcoming shows)"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed","default":"not_started"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["url","link","generateWithAi"]},"description":"Array of links linked with the knowledge"},"files":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the file"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"file":{"type":"object","properties":{"buffer":{"type":"object","description":"Any valid JSON value"},"originalname":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"name":{"type":"string"},"encoding":{"type":"string"},"tempFilePath":{"type":"string"},"truncated":{"type":"boolean"},"md5":{"type":"string"}},"description":"File upload schema for multipart/form-data"},"buffer":{"type":"object","description":"Any valid JSON value"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"text":{"type":"string","description":"The extracted text content from the file"},"id":{"type":"string","description":"Optional unique identifier"},"s3Key":{"type":"string","description":"S3 storage key for the file"},"displayUrl":{"type":"string","description":"Public display URL for the file"},"mimeType":{"type":"string","description":"MIME type of the file"},"summary":{"type":"string","description":"One line saying what this file covers, for the agent-facing knowledge index"}},"required":["name","generateWithAi","text","mimeType"]},"description":"Array of files linked with the knowledge with S3 information"},"emails":{"type":"array","items":{"type":"object","properties":{"emailId":{"type":"string","minLength":1,"description":"The email ID"},"text":{"type":"string","minLength":1,"description":"The text content of the email"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["emailId","text"]},"description":"Array of emails linked with the knowledge"},"calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The call ID"},"text":{"type":"string","minLength":1,"description":"The text content of the call (transcript)"}},"required":["id","text"]},"description":"Array of calls linked with the knowledge"},"chats":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The chat ID"},"text":{"type":"string","minLength":1,"description":"The text content of the chat"}},"required":["id","text"]},"description":"Array of chats linked with the knowledge"},"contactIds":{"type":"array","items":{"type":"string"},"description":"Array of contact IDs who have access to this knowledge"},"publicAccess":{"type":"boolean","description":"Whether this knowledge is publicly accessible"},"summaryLevelOfDetail":{"type":"string","enum":["small","medium","large"],"description":"Level of detail for AI-generated summaries"},"knowledgeDataIds":{"type":"array","items":{"type":"string"},"description":"Array of knowledge data IDs linked with this knowledge file"},"knowledgeData":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"sourceId":{"type":"string","description":"Optional unique identifier for the source"},"source":{"type":"string","description":"The source name or identifier"},"sourceUrl":{"type":"string","description":"Originating URL for link-sourced rows"},"sourceType":{"type":"string","enum":["texts","links","files","emails","calls","chats","questions","custom"],"description":"The type of source this knowledge data comes from"},"question":{"type":"string","description":"The question or query this knowledge data answers"},"answer":{"type":"string","description":"The answer or response to the question"},"protected":{"type":"boolean","description":"Whether this knowledge data is protected from modification"},"knowledgeFileId":{"type":"string","description":"Reference to the parent knowledge file"},"contactId":{"type":"string","description":"Optional reference to the associated contact (contact id)"},"isPrimaryVector":{"type":"boolean","description":"True for the canonical Q&A row; false for the auxiliary embedding row."},"timesUsed":{"type":"number","description":"Number of times this knowledge data has been used/accessed"},"alternates":{"type":"array","items":{"type":"string"},"description":"Alternate phrasings of the question (extra retrieval entry points to the same answer)"},"alternatesGenerated":{"type":"boolean","description":"Alternates were AI-generated rather than supplied by the caller"},"unanswered":{"type":"boolean","description":"True when this is a question a caller asked that the agent could not answer. Never retrievable until someone supplies the answer."},"timesAsked":{"type":"number","description":"How many separate calls have asked this unanswered question — what to answer first."}},"required":["id","createdAt","active","createdBy","createdById","companyId","source","sourceType","question","answer","protected","knowledgeFileId"],"description":"Response schema for knowledge data including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","sourceId":"file_12345","source":"company_policy.pdf","sourceType":"files","question":"What are the company policies for employee conduct?","answer":"The company policies for employee conduct include maintaining professional behavior, following dress code guidelines, and treating colleagues with respect.","protected":false,"knowledgeFileId":"507f1f77bcf86cd799439011","timesUsed":0,"vectorId":"vec_12345"}},"description":"Array of knowledge data entries linked with this knowledge file"},"googleDriveFolderId":{"type":"string","description":"Google Drive folder ID"},"googleDriveFolderUpdatedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"summary":{"type":"string","description":"AI-generated summary of the knowledge content"},"keyPoints":{"type":"string","description":"AI-generated key points extracted from the knowledge content"},"hidden":{"type":"boolean","description":"When true, this file is hidden from user-facing list endpoints."},"learningAutoAdd":{"type":"boolean","description":"false = Learning auto-add never approves into this base; absent = allowed."},"autoGenerated":{"type":"boolean","description":"When true, this knowledge file is populated automatically by the system (transferred-call post-analysis)."},"sourceAgentId":{"type":"string","description":"Owning agent id when the file is auto-generated for a single agent."},"isMemoryStore":{"type":"boolean","description":"When true, marks the per-company knowledge file holding contact memories."},"isCompanyKnowledgeStore":{"type":"boolean","description":"When true, marks the per-company file collecting business-wide unanswered questions."},"isCallMemoryStore":{"type":"boolean","description":"When true, marks a hidden per-user call-memory knowledge file for voice-assist."},"sourceUserId":{"type":"string","description":"Owning user id when isCallMemoryStore is true."},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed"},"unansweredCount":{"type":"integer","minimum":0,"description":"How many unanswered caller questions are waiting on this file. Set on the agent own-file and company own-file endpoints."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","language"],"description":"Response schema for knowledge files including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Company Policies and Procedures","description":"Comprehensive guide covering all company policies, procedures, and best practices","summary":"This knowledge base contains comprehensive information about company policies...","keyPoints":"1. Employee conduct policies\n2. Remote work guidelines\n3. Safety procedures","summaryLevelOfDetail":"medium","googleDriveFolderId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveFolderUpdatedAt":"2026-10-20T15:02:35.126Z"}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt","analysisProperties"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["transfer-call"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"transferType":{"type":"string","enum":["warm","cold"]},"voipConnectionIds":{"type":"array","items":{"type":"string"}},"connectDynamically":{"type":"boolean"},"showCallerId":{"type":"boolean"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"transferCallBasedOnPromptInstructions":{"type":"boolean"},"promptForTransferReason":{"type":"string"},"announceTransferReason":{"type":"boolean"},"analyzeTransferredCall":{"type":"boolean"},"agentIdToAnalyzeTransferredCall":{"type":"string"},"secondsToWaitForCallerToAnswer":{"type":"number","minimum":10,"maximum":60},"voipConnections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for the VoIP connection"},"dial":{"type":"number","description":"Dial number or extension assigned to this connection"},"reason":{"type":"string","description":"Internal notes or purpose description for this connection"},"connectionType":{"type":"string","enum":["User","External","Agent"],"description":"Type of destination: 'Agent', 'User', or 'External'"},"agentId":{"type":"string","description":"ID of the AI agent this connection routes to (only for Agent type connections)"},"sipDomain":{"type":"string","description":"SIP domain for this connection."},"phone":{"type":"string","description":"External phone number this connection forwards to (only for External type connections)"},"userId":{"type":"string","description":"ID of the user this connection routes to (only for User type connections)"},"start":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily start time when this connection becomes available"},"end":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily end time when this connection becomes unavailable"},"canAgentTranscribe":{"type":"boolean","description":"Whether the agent can transcribe calls to this connection"},"canAgentRecord":{"type":"boolean","description":"Whether the agent can record calls to this connection"},"canAgentAnalyze":{"type":"boolean","description":"Whether the agent can analyze calls to this connection"},"canAgentSpeakWhenAsked":{"type":"boolean","description":"Whether the agent can speak when asked during calls to this connection"},"allDay":{"type":"boolean","description":"Whether this connection is available 24/7 (ignores start/end times when true)"},"syncWithGoogle":{"type":"boolean","description":"Whether availability is synchronized with Google Calendar"},"syncWithGoogleStatus":{"type":"string","enum":["open","closed"],"description":"Google Calendar sync mode: 'open' for free time availability, 'closed' for busy time unavailability"},"messageToUser":{"type":"string","description":"Custom message or announcement played before transferring calls to this connection"},"aiGeneratedMessage":{"type":"boolean","description":"Whether transfer messages are dynamically generated by AI based on call context"},"transcription_enabled":{"type":"boolean","description":"Whether real-time transcription is enabled for calls on this connection"},"agent":{"type":"object","properties":{"id":{"type":"string","description":"Agent's unique identifier"},"name":{"type":"string","description":"Agent's display name"}},"description":"Full agent details when connectionType is 'Agent' (populated from agents database)"},"user":{"type":"object","properties":{"id":{"type":"string","description":"User's unique identifier"},"name":{"type":"string","description":"User's full name"},"email":{"type":"string","description":"User's email address"},"defaultCompanyId":{"type":"string","description":"User's default company ID"},"picture":{"type":"string","description":"User's profile picture URL"},"emailVerified":{"type":"boolean","description":"Whether the user's email has been verified"},"lastConnectedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"isConnected":{"type":"boolean","description":"Whether the user is currently online/connected"}},"description":"Full user details when connectionType is 'User' (populated from users database)"},"username":{"type":"string","description":"SIP username for direct authentication (advanced configurations only)"},"password":{"type":"string","description":"SIP password for direct authentication (advanced configurations only)"},"ipAddress":{"type":"array","items":{"type":"string"},"description":"Whitelist of allowed IP addresses for security restrictions"},"extensionRegistrationIds":{"type":"array","items":{"type":"string"},"description":"IDs of the extension registrations linked with this connection"},"extensionRegistrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"voipConnectionId":{"type":"string","description":"ID of the VoIP Connection that owns this extension (legacy)"},"phoneExtensionId":{"type":"string","description":"ID of the Phone Extension that owns this extension"},"username":{"type":"string","description":"SIP username/extension that is registered"},"contactUri":{"type":"string","description":"Full SIP Contact URI for routing calls to this extension"},"remoteAddress":{"type":"string","description":"IP address of the registered SIP client"},"clientIp":{"type":"string","description":"Public client IP when known"},"remotePort":{"type":"number","description":"Port number of the registered SIP client"},"transport":{"type":"string","enum":["udp","tcp","tls","websocket"],"description":"Transport protocol: 'udp', 'tcp', 'tls' for SIP; 'websocket' for app clients"},"registeredAt":{"type":"string","format":"date-time","description":"Timestamp when this extension was registered (ISO 8601 format)"},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp when this registration will expire (ISO 8601 format)"},"expires":{"type":"number","description":"Number of seconds until expiration (decreases over time)"},"userAgent":{"type":"string","description":"SIP User-Agent identifying the client software"},"callId":{"type":"string","description":"SIP Call-ID from the REGISTER request"},"bindingSource":{"type":"string","enum":["register","invite"],"description":"'register' = the phone sent a REGISTER and can be rung; 'invite' = stand-in written from an authenticated outbound INVITE, used only for that call's in-dialog requests and never for ringing the phone"},"consecutiveInviteFailures":{"type":"integer","description":"Liveness skip-list counter. Bumped on 5xx/timeout from fork-INVITEs, reset on 200 OK. When ≥3 and `lastInviteFailureAt` is within the last 5 minutes, the registration is skipped by routing."},"lastInviteFailureAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"voipConnection":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"agentId":{"type":"string"},"userId":{"type":"string"},"connectionType":{"type":"string"}},"description":"Legacy VoIP Connection — only populated for pre-migration rows."},"userEndpoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"number":{"type":"string"},"status":{"type":"string"}},"description":"Populated UserEndpoint this registration belongs to."}},"required":["id","createdAt","active","createdBy","createdById","companyId","username","contactUri","remoteAddress","remotePort","transport","registeredAt","expiresAt","expires"],"description":"Extension registration details including contact information and expiration status","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","voipConnectionId":"507f1f77bcf86cd799439011","username":"1001","contactUri":"sip:1001@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300,"userAgent":"Zoiper 5.5.10","callId":"abc123@192.168.1.100","voipConnection":{"id":"507f1f77bcf86cd799439011","name":"Customer Support","agentId":"507f1f77bcf86cd799439012","connectionType":"Agent"}}},"description":"Active SIP device registrations for this connection (virtual populate from ExtensionRegistration collection, filtered to show only non-expired registrations). Each entry represents a physical device (phone, softphone, etc.) currently registered with this extension."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","connectionType","syncWithGoogle","syncWithGoogleStatus"],"description":"Response schema for VoIP connection including complete configuration, company metadata, and linked agent or user details","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support","dial":1,"reason":"General customer support inquiries","connectionType":"Agent","agentId":"507f1f77bcf86cd799439011","phone":"+1234567890","userId":"507f1f77bcf86cd799439012","start":{"hours":9,"minutes":0},"end":{"hours":17,"minutes":0},"canAgentTranscribe":true,"canAgentRecord":true,"canAgentAnalyze":true,"canAgentSpeakWhenAsked":false,"allDay":false,"syncWithGoogle":true,"syncWithGoogleStatus":"open","messageToUser":"Welcome to customer support!","aiGeneratedMessage":false,"agent":{"id":"507f1f77bcf86cd799439011","name":"John Doe","email":"john@example.com"},"user":{"id":"507f1f77bcf86cd799439012","name":"Jane Smith","email":"jane@example.com"},"registrations":[{"id":"507f1f77bcf86cd799439013","username":"customer_support","contactUri":"sip:customer_support@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300}]}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","transferType"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["end-call"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["press-digit"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["email"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","emailConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["sms"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","smsConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["api"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","apiConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["logic-split"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["extract-analysis"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"prompt":{"type":"string"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions"]}],"discriminator":{"propertyName":"nodeType"},"description":"Node-specific data and configuration"},"html":{"type":"string","description":"HTML content for the node display"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}],"description":"Type identifier for the node"}},"required":["id","name","position","inputs","outputs"],"example":{"id":"1","name":"Welcome Message","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"}]},"inputs":{},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}}},"connections":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","description":"Target node identifier for the connection"},"input":{"type":"string","description":"Input port identifier on the target node"},"output":{"type":"string","description":"Output port identifier on the source node"},"label":{"type":"string","description":"Display label for the connection"}},"required":["node"],"description":"Schema for a connection between two flow nodes","example":{"node":"2","input":"default","output":"default","label":"Continue"}}},"integrations":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"source":{"type":"string"},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"read":{"type":"boolean"},"write":{"type":"boolean"}},"required":["name","read","write"]}}},"required":["enabled","source","properties"]}},"knowledgeFiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"The name of the knowledge file"},"description":{"type":"string","description":"Optional description of the knowledge file"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Language of the knowledge file"},"texts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"The subject/title of the text (shown as the knowledge entry)"},"text":{"type":"string","minLength":1,"description":"The text content"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"summary":{"type":"string","description":"One line saying what this text covers, for the agent-facing knowledge index"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["name","text","generateWithAi"]},"description":"Array of text content linked with the knowledge"},"links":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The base URL for the link"},"link":{"type":"array","items":{"type":"object","properties":{"link":{"type":"string","format":"uri","description":"The actual link URL"},"enabled":{"type":"boolean","description":"Whether the link is enabled for processing"},"lastScrapedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contentHash":{"type":"string","description":"Hash of the last scraped content; lets a re-scrape skip URLs whose content is unchanged"},"etag":{"type":"string","description":"Last ETag from the origin; sent as If-None-Match so an unchanged page returns 304"},"lastModified":{"type":"string","description":"Last Last-Modified from the origin; sent as If-Modified-Since for conditional re-fetch"},"lastScrapeAttemptAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastScrapeError":{"type":"string","description":"Why the last attempt produced nothing. Cleared on a successful scrape; set means the page is failing, not merely empty"},"title":{"type":"string","description":"The page's own declared name, from its schema.org markup — used to show the agent what this knowledge base covers"},"summary":{"type":"string","description":"One line saying what this page is about, so the agent can pick the right page before searching rather than after"}},"required":["link","enabled"]},"minItems":1,"description":"Array of link details"},"scrapeInterval":{"type":"string","enum":["off","daily","weekly","monthly"],"description":"How often the link source is automatically re-scraped. \"off\" disables re-scraping; minimum cadence is daily.","default":"off"},"crawlNewLinks":{"type":"boolean","default":false,"description":"On each re-scrape, re-crawl the base URL and ingest any newly discovered links"},"selectAllByDefault":{"type":"boolean","default":false,"description":"Auto-enable links discovered by a re-scrape crawl instead of leaving them disabled"},"excludeUrls":{"type":"array","items":{"type":"string"},"default":[],"description":"URLs to never include, even if discovered by a crawl"},"allowHosts":{"type":"array","items":{"type":"string"},"description":"Extra hosts a re-scrape crawl may add pages from. The base URL's own host and its subdomains are always allowed; every other host is skipped"},"contentFilter":{"type":"string","maxLength":2000,"description":"AI instruction for which pages to keep vs permanently exclude (e.g. only upcoming shows)"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed","default":"not_started"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["url","link","generateWithAi"]},"description":"Array of links linked with the knowledge"},"files":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the file"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"file":{"type":"object","properties":{"buffer":{"type":"object","description":"Any valid JSON value"},"originalname":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"name":{"type":"string"},"encoding":{"type":"string"},"tempFilePath":{"type":"string"},"truncated":{"type":"boolean"},"md5":{"type":"string"}},"description":"File upload schema for multipart/form-data"},"buffer":{"type":"object","description":"Any valid JSON value"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"text":{"type":"string","description":"The extracted text content from the file"},"id":{"type":"string","description":"Optional unique identifier"},"s3Key":{"type":"string","description":"S3 storage key for the file"},"displayUrl":{"type":"string","description":"Public display URL for the file"},"mimeType":{"type":"string","description":"MIME type of the file"},"summary":{"type":"string","description":"One line saying what this file covers, for the agent-facing knowledge index"}},"required":["name","generateWithAi","text","mimeType"]},"description":"Array of files linked with the knowledge with S3 information"},"emails":{"type":"array","items":{"type":"object","properties":{"emailId":{"type":"string","minLength":1,"description":"The email ID"},"text":{"type":"string","minLength":1,"description":"The text content of the email"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["emailId","text"]},"description":"Array of emails linked with the knowledge"},"calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The call ID"},"text":{"type":"string","minLength":1,"description":"The text content of the call (transcript)"}},"required":["id","text"]},"description":"Array of calls linked with the knowledge"},"chats":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The chat ID"},"text":{"type":"string","minLength":1,"description":"The text content of the chat"}},"required":["id","text"]},"description":"Array of chats linked with the knowledge"},"contactIds":{"type":"array","items":{"type":"string"},"description":"Array of contact IDs who have access to this knowledge"},"publicAccess":{"type":"boolean","description":"Whether this knowledge is publicly accessible"},"summaryLevelOfDetail":{"type":"string","enum":["small","medium","large"],"description":"Level of detail for AI-generated summaries"},"knowledgeDataIds":{"type":"array","items":{"type":"string"},"description":"Array of knowledge data IDs linked with this knowledge file"},"knowledgeData":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"sourceId":{"type":"string","description":"Optional unique identifier for the source"},"source":{"type":"string","description":"The source name or identifier"},"sourceUrl":{"type":"string","description":"Originating URL for link-sourced rows"},"sourceType":{"type":"string","enum":["texts","links","files","emails","calls","chats","questions","custom"],"description":"The type of source this knowledge data comes from"},"question":{"type":"string","description":"The question or query this knowledge data answers"},"answer":{"type":"string","description":"The answer or response to the question"},"protected":{"type":"boolean","description":"Whether this knowledge data is protected from modification"},"knowledgeFileId":{"type":"string","description":"Reference to the parent knowledge file"},"contactId":{"type":"string","description":"Optional reference to the associated contact (contact id)"},"isPrimaryVector":{"type":"boolean","description":"True for the canonical Q&A row; false for the auxiliary embedding row."},"timesUsed":{"type":"number","description":"Number of times this knowledge data has been used/accessed"},"alternates":{"type":"array","items":{"type":"string"},"description":"Alternate phrasings of the question (extra retrieval entry points to the same answer)"},"alternatesGenerated":{"type":"boolean","description":"Alternates were AI-generated rather than supplied by the caller"},"unanswered":{"type":"boolean","description":"True when this is a question a caller asked that the agent could not answer. Never retrievable until someone supplies the answer."},"timesAsked":{"type":"number","description":"How many separate calls have asked this unanswered question — what to answer first."}},"required":["id","createdAt","active","createdBy","createdById","companyId","source","sourceType","question","answer","protected","knowledgeFileId"],"description":"Response schema for knowledge data including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","sourceId":"file_12345","source":"company_policy.pdf","sourceType":"files","question":"What are the company policies for employee conduct?","answer":"The company policies for employee conduct include maintaining professional behavior, following dress code guidelines, and treating colleagues with respect.","protected":false,"knowledgeFileId":"507f1f77bcf86cd799439011","timesUsed":0,"vectorId":"vec_12345"}},"description":"Array of knowledge data entries linked with this knowledge file"},"googleDriveFolderId":{"type":"string","description":"Google Drive folder ID"},"googleDriveFolderUpdatedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"summary":{"type":"string","description":"AI-generated summary of the knowledge content"},"keyPoints":{"type":"string","description":"AI-generated key points extracted from the knowledge content"},"hidden":{"type":"boolean","description":"When true, this file is hidden from user-facing list endpoints."},"learningAutoAdd":{"type":"boolean","description":"false = Learning auto-add never approves into this base; absent = allowed."},"autoGenerated":{"type":"boolean","description":"When true, this knowledge file is populated automatically by the system (transferred-call post-analysis)."},"sourceAgentId":{"type":"string","description":"Owning agent id when the file is auto-generated for a single agent."},"isMemoryStore":{"type":"boolean","description":"When true, marks the per-company knowledge file holding contact memories."},"isCompanyKnowledgeStore":{"type":"boolean","description":"When true, marks the per-company file collecting business-wide unanswered questions."},"isCallMemoryStore":{"type":"boolean","description":"When true, marks a hidden per-user call-memory knowledge file for voice-assist."},"sourceUserId":{"type":"string","description":"Owning user id when isCallMemoryStore is true."},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed"},"unansweredCount":{"type":"integer","minimum":0,"description":"How many unanswered caller questions are waiting on this file. Set on the agent own-file and company own-file endpoints."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","language"],"description":"Response schema for knowledge files including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Company Policies and Procedures","description":"Comprehensive guide covering all company policies, procedures, and best practices","summary":"This knowledge base contains comprehensive information about company policies...","keyPoints":"1. Employee conduct policies\n2. Remote work guidelines\n3. Safety procedures","summaryLevelOfDetail":"medium","googleDriveFolderId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveFolderUpdatedAt":"2026-10-20T15:02:35.126Z"}}},"workflows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"triggers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCallStart","onCallConnect","onCallEnd","onCallTransfer","onMissedCall","onDTMFInput","onKeywordDetected","duringCall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"functionName":{"type":"string","pattern":"^[a-z0-9_]+$"},"keywords":{"type":"array","items":{"type":"string"}},"condition":{"type":"string"},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"generateMessageBeforeRunningWorkflow":{"type":"boolean"},"messageAiGenerated":{"type":"boolean"},"messagePrompt":{"type":"string"},"playWaitMusic":{"type":"boolean","description":"When true (default), play keyboard wait music while this duringCall workflow tool runs"},"useProtectedValues":{"type":"boolean","description":"onCallEnd only. When true, the non-AI steps of this workflow (API call, integrations, booking, email, SMS, sheets, conditions) get the REAL values the caller said ({{protected.afm}}, {{afm_1}}, …) when the agent protects sensitive data; AI steps (llmCompletion, aiResponse, managedAgent, googleSearch) always get placeholders. Every use is audited. Only members who may reveal sensitive data can turn it on."}},"example":{"keywords":["hello","world"],"condition":"call_started","parameters":[{"name":"call_id","value":"123"}],"playWaitMusic":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onEmailReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"emailFilters":{"type":"object","properties":{"from":{"type":"array","items":{"type":"string"}},"subject":{"type":"array","items":{"type":"string"}},"labels":{"type":"array","items":{"type":"string"}}}}},"example":{"emailFilters":{"from":["test@test.com"],"subject":["test"],"labels":["test"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onAPICall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"payloadSchema":{"type":"object","properties":{"type":{"type":"string","enum":["object"]},"properties":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","enum":["object","array","string","number","boolean","date","enum"]},"required":{"type":"boolean","default":false},"properties":{"type":"object","additionalProperties":{"type":"object","description":"Circular reference detected"}},"items":{"type":"object","description":"Circular reference detected"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"},"minimum":{"type":"number"},"maximum":{"type":"number"},"enum":{"type":"array","items":{"type":"string"}}},"required":["type"]}},"required":{"type":"array","items":{"type":"string"}}},"required":["type","properties"],"description":"Expected payload structure"}},"example":{"payloadSchema":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^TX-[0-9]{8}$"},"amount":{"type":"number","minimum":0},"currency":{"type":"string","enum":["USD","EUR","GBP"]}},"required":["transactionId","amount","currency"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onContactCreated","onCompanyCreated","onDealCreated","onTicketCreated","onPropertyChange"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","property"]},"property":{"type":"string","enum":["hs_lead_status","lifecyclestage","hubspot_owner_id","companyname","domain","dealstage","amount","closedate","closed_won_reason","closed_lost_reason","pipeline","hs_pipeline_stage","hs_due_date"]}},"example":{"resource":"contact","property":"hs_lead_status"}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onWooCommerce"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"getCustomerOrders":{"type":"boolean"},"getProductByName":{"type":"boolean"},"getProductByCode":{"type":"boolean"},"productCodeType":{"type":"string","enum":["id","sku","global_unique_id"]},"createOrder":{"type":"boolean"},"getOrderById":{"type":"boolean"},"notifyEmailsOnOrderCreation":{"type":"array","items":{"type":"string"}}},"example":{"getCustomerOrders":true,"getProductByName":true,"getProductByCode":true,"productCodeType":"id","createOrder":true,"getOrderById":true,"notifyEmailsOnOrderCreation":["test@test.com"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onYubotoPbxChannelHangup","onYubotoPbxChannelAnswer","onYubotoPbxChannelCreate"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"agentId":{"type":"string"},"allowedExtensions":{"type":"array","items":{"type":"string"}}},"example":{"username":"test","password":"test","agentId":"test","allowedExtensions":["123","456"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCampaignLeadStatusChanged"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign to watch. Omit to fire for every campaign of the company."},"statuses":{"type":"array","items":{"type":"string","enum":["successful","failed","reachedMaxRetries","askedToCallBackLater","askedToNeverCallAgain","cancelled"]},"description":"Lead statuses that fire the workflow. Omit or empty = every outcome status."},"stages":{"type":"array","items":{"type":"string"},"description":"Only fire when the lead is in one of these campaign stage names. Omit or empty = any stage."}},"example":{"campaignId":"66f1c0ffee0000000000abcd","statuses":["failed","reachedMaxRetries"],"stages":[]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onShopifyEvent"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["orders/create","orders/paid","orders/fulfilled","orders/partially_fulfilled","orders/cancelled","refunds/create","fulfillments/create","fulfillments/update"]},"minItems":1,"description":"Shopify events that start the workflow."},"financialStatuses":{"type":"array","items":{"type":"string","enum":["pending","authorized","partially_paid","paid","partially_refunded","refunded","voided"]},"description":"Only when the order payment status is one of these. Empty = any."},"fulfillmentStatuses":{"type":"array","items":{"type":"string","enum":["unfulfilled","partial","fulfilled","restocked"]},"description":"Only when the order fulfillment status is one of these. Empty = any."},"shipmentStatuses":{"type":"array","items":{"type":"string","enum":["label_printed","label_purchased","confirmed","in_transit","out_for_delivery","attempted_delivery","ready_for_pickup","delivered","failure"]},"description":"Shipment topics only: only when the carrier status is one of these. Empty = any."},"paymentGateways":{"type":"array","items":{"type":"string"},"description":"Only when a payment gateway name contains one of these (case-insensitive), e.g. \"Cash on Delivery\". Empty = any."},"tags":{"type":"array","items":{"type":"string"},"description":"Only when the order has at least one of these tags (case-insensitive). Empty = any."},"minTotal":{"type":"number","minimum":0,"description":"Only when the order total is at least this amount."},"maxTotal":{"type":"number","minimum":0,"description":"Only when the order total is at most this amount."}},"required":["topics"],"example":{"topics":["orders/create"],"financialStatuses":["pending"],"paymentGateways":["Cash on Delivery"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onLeadReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"string","enum":["tiktok","meta","google_ads","linkedin","webhook","form"]},"description":"Only leads from these sources start the workflow. Empty = any source, including ones added later."},"formIds":{"type":"array","items":{"type":"string","minLength":1},"description":"Only these forms: our lead form ids (from lead_forms_list_forms). A platform form id or a form name also matches, for older triggers. Empty = any."},"requirePhone":{"type":"boolean","description":"Skip a lead with no phone number."},"includeTestSubmissions":{"type":"boolean","description":"Also fire for test submissions. Off by default."}},"example":{"sources":["google_ads","form"],"requirePhone":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"triggerType"}}},"required":["id","name","position","outputs"],"example":{"id":1,"name":"Call Start Trigger","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"},{"node":"3","output":"default"}]},"className":"trigger-node","data":{"triggerType":"onCallStart","triggerConfig":{"enabled":true,"triggerType":"onCallEnd","description":"Trigger when a new call starts"},"transitions":[2,3]}}},"description":"Trigger node that starts the flow"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"nodeType":{"type":"string","enum":["emailConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["nodeType","nodeTitle","transitions","emailConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendSms"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["nodeType","nodeTitle","transitions","smsConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["apiCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["nodeType","nodeTitle","transitions","apiConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["codeExecution"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"codeConfig":{"type":"object","properties":{"code":{"type":"string"},"language":{"type":"string","enum":["javascript","python","java","cpp","php","ruby"]},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties for the code"}},"required":["code","language"],"example":{"code":"console.log(\"Hello, world!\");","language":"javascript","properties":[{"name":"name","type":"string"}]}}},"required":["nodeType","nodeTitle","transitions","codeConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleDocConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}}},"required":["nodeType","nodeTitle","transitions","googleDocConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createEvent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"eventConfig":{"type":"object","properties":{"calendarId":{"type":"string","description":"Google calendar id. Empty = the company's primary calendar."},"summary":{"type":"string","description":"Event title."},"startDateTime":{"type":"string","description":"Start, ISO 8601 (\"2026-08-12T15:00:00\") or \"YYYY-MM-DD HH:mm\"."},"endDateTime":{"type":"string","description":"End. Empty = start + durationMinutes."},"durationMinutes":{"type":"number","minimum":1,"maximum":1440,"description":"Used only when endDateTime is empty. Defaults to 30."},"description":{"type":"string"},"location":{"type":"string"},"attendees":{"type":"string","description":"Comma-separated emails."},"timeZone":{"type":"string","description":"IANA zone. Empty = the company timezone."},"isOnline":{"type":"boolean","description":"When true, Google adds a Meet link to the event."}},"required":["durationMinutes"],"example":{"summary":"Callback for {{contact_name}}","startDateTime":"{{callback_datetime}}","durationMinutes":30,"description":"Requested during call {{call_id}}","attendees":"sales@example.com","isOnline":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendPhoneCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}}},"required":["nodeType","nodeTitle","transitions","phoneCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["llmCompletion"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}}},"required":["nodeType","nodeTitle","transitions","llmCompletionConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheet"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]}},"required":["nodeType","nodeTitle","transitions","googleSheetConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}}},"required":["nodeType","nodeTitle","transitions","googleSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendViber"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}}},"required":["nodeType","nodeTitle","transitions","viberConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["switch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"switchConfig":{"type":"object","properties":{"cases":{"type":"array","items":{"type":"object","properties":{"block":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"transition":{"type":"string"},"transitionIndex":{"type":"number"}},"required":["block"]}}},"required":["cases"],"example":{"cases":[{"transition":"Schedule Appointment","transitionIndex":1,"block":{"operator":"and","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"schedule_appointment","fieldType":"string"}]}},{"transition":"Cancel Appointment","transitionIndex":0,"block":{"operator":"or","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"cancel_appointment","fieldType":"string"}]}}]}}},"required":["nodeType","nodeTitle","transitions","switchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["if"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"ifConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","ifConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["filter"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"filterConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","filterConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["loop"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"loopConfig":{"type":"object","properties":{"array":{"type":"string"}},"required":["array"],"example":{"array":"user_response"}}},"required":["nodeType","nodeTitle","transitions","loopConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["tableNode"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"tableConfig":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","maxLength":128},"type":{"type":"string","enum":["string","number","boolean"]}},"required":["key","label"]},"maxItems":50},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"maxItems":500},"filters":{"type":"array","items":{"type":"object","properties":{"column":{"type":"string","minLength":1},"op":{"type":"string","enum":["equals","notEquals","contains","gt","lt","gte","lte"]},"value":{"type":"string"}},"required":["column","op","value"]}},"mode":{"type":"string","enum":["producer","lookup"]},"keyColumn":{"type":"string"},"keyValue":{"type":"string"}},"required":["columns","rows"],"example":{"columns":[{"key":"name","label":"Name","type":"string"},{"key":"phone","label":"Phone","type":"string"}],"rows":[{"name":"Alice","phone":"+30 210 1234567"},{"name":"Bob","phone":"+30 210 7654321"}],"mode":"producer"}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hubspotContact","hubspotCompany","hubspotDeal","hubspotTicket","hubspotTask","hubspotNote","hubspotMeeting","hubspotEmail","hubspotCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hubspotConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"operation":{"type":"string","enum":["get","create","createOrUpdate","getOrCreate","delete","update","search","list","exists"]},"value":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"associations":{"type":"array","items":{"type":"object","properties":{"associationType":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["associationType","valueType","value"],"example":{"associationType":"contact","valueType":"id","value":"123"}}},"owner":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"contactData":{"type":"object","properties":{"properties":{"type":"object","properties":{"email":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"}},"required":[]}},"example":{"email":"test@test.com","firstname":"John","lastname":"Doe","phone":"+1234567890","company":"Test Corp","website":"https://test.com","lifecyclestage":"marketingqualifiedlead","jobtitle":"Manager","hs_additional_emails":["test2@test.com"]}},"companyData":{"type":"object","properties":{"properties":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"industry":{"type":"string"},"description":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"}},"required":[]}},"example":{"name":"Test Corp","domain":"test.com","industry":"Technology","description":"Test Description","city":"Test City","country":"Test Country","phone":"1234567890","address":"Test Address","owner":{"valueType":"email","value":"test@test.com"}}},"dealData":{"type":"object","properties":{"properties":{"type":"object","properties":{"dealname":{"type":"string"},"pipeline":{"type":"string"},"stage":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string"},"closeDate":{"type":"string"},"dealType":{"type":"string","enum":["new","existing"]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["pipeline","stage"]}},"example":{"name":"Test Deal","description":"Test Description","amount":"1000","stage":"Test Stage"}},"ticketData":{"type":"object","properties":{"properties":{"type":"object","properties":{"pipeline":{"type":"string"},"stage":{"type":"string"},"priority":{"type":"string","enum":["HIGH","MEDIUM","LOW"]},"subject":{"type":"string"},"content":{"type":"string"}},"required":["pipeline","stage","subject"]}},"example":{"pipeline":"Test Pipeline","stage":"Test Stage","priority":"HIGH","subject":"Test Subject","content":"Test Content"}},"taskData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string"},"taskType":{"type":"string"},"priority":{"type":"string"},"dueDate":{"type":"string"},"repeatType":{"type":"object","properties":{"enabled":{"type":"boolean"},"type":{"type":"string","enum":["hour","day","week","month","year"]},"value":{"type":"string"}},"example":{"enabled":true,"type":"day","value":"1"}},"reminderTime":{"oneOf":[{"type":"number"},{"type":"string"}]},"notes":{"type":"string"}},"required":["title","dueDate"]}},"example":{"associations":[{"associationType":"contact","valueType":"email","value":"contact@example.com"}],"properties":{"title":"Task Title","taskType":"TODO","priority":"MEDIUM","associations":[],"timestamp":"2021-01-01","dueDate":"2021-01-01","notes":"Task Notes","ownerEmail":"owner@example.com","status":"NOT_STARTED","reminderTime":1000}}},"noteData":{"type":"object","properties":{"properties":{"type":"object","properties":{"body":{"type":"string"}},"required":[]}}},"meetingData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title of the meeting"},"body":{"type":"string","description":"Meeting description"}}}},"required":["properties"],"example":{"properties":{"title":"Initial Project Discussion","body":"Meeting to discuss project requirements and timeline"}}},"emailData":{"type":"object","properties":{"properties":{"type":"object","properties":{"subject":{"type":"string","description":"Subject of the email"},"body":{"type":"string","description":"Email body content"}},"required":[]}},"example":{"properties":{"subject":"Project Update","body":"Here are the latest updates on the project progress."}}},"callData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title/subject of the call"},"body":{"type":"string","description":"Call description and notes"},"direction":{"type":"string","enum":["INBOUND","OUTBOUND"],"description":"Call direction"},"caller":{"type":"string","description":"Caller phone number"},"callee":{"type":"string","description":"Callee phone number"},"duration":{"type":"string","description":"Call duration in milliseconds"},"disposition":{"type":"string","enum":["9d9162e7-6cf3-4944-bf63-4dff82258764","f240bbac-87c9-4f6e-bf70-924b57d47db7","a4c4c377-d246-4b32-a13b-75a56a4cd0ff","b2cf5968-551e-4856-9783-52b3da59a7d0","73a0d17f-1163-4015-bdd5-ec830791da20","17b47fee-58de-441e-a44c-c6300d46f273"],"description":"Call disposition"},"recordingUrl":{"type":"string","description":"Call recording URL"}},"required":[]}},"example":{"properties":{"title":"Test Call","body":"Test Body"}}}},"required":["resource","operation"],"example":{"resource":"call","operation":"create","owner":{"valueType":"email","value":"test@test.com"},"properties":{"callData":{"properties":{"callTitle":"Test Call","callBody":"Test Body"}}}}}},"required":["nodeType","nodeTitle","transitions","hubspotConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheetSettings"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetSettingsConfig":{"type":"object","properties":{"googleSheetId":{"type":"string","minLength":1,"description":"The unique identifier of the Google Sheet"},"sheetName":{"type":"string","minLength":1,"description":"The name of the specific sheet within the Google Sheet"},"operation":{"type":"string","enum":["getRow","getRows","updateRow","appendRow","deleteRow","getData"],"description":"The operation to perform on the Google Sheet (getRow, getRows, updateRow, appendRow, deleteRow)"},"filter":{"type":"object","properties":{"filterType":{"type":"string","enum":["index","columnName"]},"column":{"type":"string"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"fieldType":{"type":"string","enum":["string","phone","email","number","boolean","date","time","enum"]},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["filterType","column","operator","fieldType"],"example":{"filterType":"index","column":"1","operator":"eq","fieldType":"string","fieldValue":"Chris"},"description":"Filter to apply for selecting rows, such as by index or column name"},"values":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"object","description":"Any valid JSON value"}},"required":["key","value"]},"description":"Key-value pairs for the row data"}},"required":["googleSheetId","sheetName","operation"],"example":{"googleSheetId":"123","sheetName":"Sheet1","operation":"getRow","filter":{"filterType":"index","column":"1","operator":"eq","fieldType":"number","fieldValue":"152"},"values":[{"key":"Email","value":"john.doe@example.com"},{"key":"Name","value":"John Doe"}]}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["aiResponse"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}}},"required":["nodeType","nodeTitle","transitions","aiResponseConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["transferCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["nodeType","nodeTitle","transitions","transferCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["afmSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"afmSearchConfig":{"type":"object","properties":{"afm":{"type":"string","description":"AFM of company"}},"required":["afm"],"example":{"afm":"8022188180"}}},"required":["nodeType","nodeTitle","transitions","afmSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["galaxyGetCustomer","galaxySearchItems","galaxyCheckStock","galaxyGetPrice","galaxyCalculateOrder","galaxyPlaceOrder","galaxyUpdateOrder","galaxyGetOrderStatus","galaxyGetTransactionHistory","galaxyGetCustomerBalance","galaxyGetCustomerAging","galaxyGetFinInfoPerDrugType","galaxyGetItemPurchases","galaxyGetCustomerKartelaLink","galaxyFindItemsByActiveIngredient","galaxyGetInvoicePdfLinks","galaxyGetNextRoute","galaxyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"galaxyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","checkStock","getPrice","calcLines","calculateOrder","placeOrder","updateOrder","getOrderStatus","getTransactionHistory","getCustomerBalance","getCustomerAging","getFinInfoPerDrugType","getItemPurchases","getCustomerKartelaLink","findItemsByActiveIngredient","getInvoicePdfLinks","getNextRoute","customRequest"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","custCode"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query (supports {{variables.x}})"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"checkStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"wrhsCode":{"type":"string","description":"Overrides the company default warehouse"}},"required":["itemCode"]},"getPrice":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"}},"required":["EntryType","Date","Quantity"]},"calcLines":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"},"WrhsCode":{"type":"string"},"AlterCode":{"type":"string"},"Barcode":{"type":"string"}},"required":["EntryType","Date","Quantity","WrhsCode"]},"placeOrder":{"type":"object","properties":{"entry":{"type":"object","properties":{"CompID":{"type":"string"},"CompCode":{"type":"string"},"CmpsID":{"type":"string"},"CmpsCode":{"type":"string"},"WrhsID":{"type":"string"},"WrhsCode":{"type":"string"},"CoetID":{"type":"string"},"CoetCode":{"type":"string"},"DnumID":{"type":"string"},"TransDate":{"type":"string"},"TradeDate":{"type":"string"},"CustID":{"type":"string"},"CustCode":{"type":"string"},"CussID":{"type":"string"},"CussCode":{"type":"string"},"PytmID":{"type":"string"},"PytmCode":{"type":"string"},"MeroID":{"type":"string"},"CollMeroID":{"type":"string"},"RuteID":{"type":"string"},"UserID":{"type":"string"},"SourceType":{"type":"integer"},"RefTradeCode":{"type":"string"},"VoucherCode":{"type":"string"},"Comments":{"type":"string"},"ExecutionDate":{"type":"string"},"Street":{"type":"string"},"StreetNumber":{"type":"string"},"PostalCode":{"type":"string"},"Phone":{"type":"string"},"RegnDescription":{"type":"string"},"PrefDescription":{"type":"string"},"CntrDescription":{"type":"string"},"AddressDescr":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"EntryStatus":{"type":"integer"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1},"ID":{"type":"string"},"FastNumber":{"type":"string"},"TotalValue":{"type":"number"},"NetValue":{"type":"number"},"VatValue":{"type":"number"},"Lines":{"type":"array","items":{"type":"object","properties":{"ItcpID":{"type":"string"},"ItemCode":{"type":"string"},"RequestAQty":{"oneOf":[{"type":"number"},{"type":"string"}]},"WrhsID":{"type":"string"},"Price":{"type":"number"},"Disc1Pcnt":{"type":"number"},"Disc1Val":{"type":"number"},"Disc2Pcnt":{"type":"number"},"Disc2Val":{"type":"number"},"Disc3Pcnt":{"type":"number"},"Disc3Val":{"type":"number"},"Comments":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"DiscountBehaviour":{"type":"integer","minimum":0,"maximum":2},"ZeroingDiscounts":{"type":"integer","minimum":0,"maximum":3,"description":"v103: suppress discounts"},"ApplyDscnID":{"type":"string"},"ApplyDrulID":{"type":"string"},"CicoID":{"type":"string","description":"v103: item-collection (bundle) ID"},"AQty":{"type":"number"},"DisposalAQty":{"type":"number"},"PickingQty":{"type":"number"},"NetValue":{"type":"number"},"GrossValue":{"type":"number"}},"required":["ItcpID","ItemCode","RequestAQty","WrhsID","Price","Disc1Pcnt","Disc1Val","Disc2Pcnt","Disc2Val","Disc3Pcnt","Disc3Val","Comments","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","DiscountBehaviour","ZeroingDiscounts","ApplyDscnID","ApplyDrulID","CicoID","AQty","DisposalAQty","PickingQty","NetValue","GrossValue"]},"nullable":true},"Taxes":{"type":"array","items":{"type":"object","properties":{"FiacID":{"type":"string"},"FiacCode":{"type":"string"},"TrnValue":{"oneOf":[{"type":"number"},{"type":"string"}]},"ExchVatValue":{"type":"number"}},"required":["FiacID","FiacCode","ExchVatValue"]},"nullable":true}},"required":["CompID","CompCode","CmpsID","CmpsCode","WrhsID","WrhsCode","CoetID","CoetCode","DnumID","TransDate","TradeDate","CustID","CustCode","CussID","CussCode","PytmID","PytmCode","MeroID","CollMeroID","RuteID","UserID","SourceType","RefTradeCode","VoucherCode","Comments","ExecutionDate","Street","StreetNumber","PostalCode","Phone","RegnDescription","PrefDescription","CntrDescription","AddressDescr","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","EntryStatus","LockTransaction","ID","FastNumber","TotalValue","NetValue","VatValue","Lines","Taxes"]},"previewFirst":{"type":"boolean","default":false}},"required":["entry"]},"updateOrder":{"type":"object","properties":{"ID":{"type":"string"},"EntryStatus":{"type":"integer"},"Comments":{"type":"string"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1}},"required":["ID"]},"getOrderStatus":{"type":"object","properties":{"id":{"type":"string","description":"Optional specific transaction ID — omit to list all"},"revNum":{"type":"integer","minimum":0,"default":0},"custCode":{"type":"string","description":"List the orders of this customer instead (GetTransactions by CustCode, per branch). Template strings supported."},"dateFrom":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."}}},"getTransactionHistory":{"type":"object","properties":{"CustCode":{"type":"string"},"DateFrom":{"type":"string"},"DateTo":{"type":"string"}},"required":["CustCode","DateFrom","DateTo"]},"getCustomerBalance":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."}},"required":["custCode"]},"getCustomerAging":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"getFinInfoPerDrugType":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"fromDate":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."}},"required":["custCode"]},"getItemPurchases":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"itemCode":{"type":"string","minLength":1,"description":"Galaxy item code (from item search). Template strings supported."},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"compCode":{"type":"string","description":"Branch/company code. Defaults to the customer's branch."}},"required":["custCode","itemCode"]},"getCustomerKartelaLink":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"findItemsByActiveIngredient":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Active ingredient name or AtloID. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["query"]},"getInvoicePdfLinks":{"type":"object","properties":{"custCode":{"type":"string"},"custTin":{"type":"string"},"cussCode":{"type":"string"},"id":{"type":"string"},"dateFrom":{"type":"string"},"dateTo":{"type":"string"}}},"getNextRoute":{"type":"object","properties":{"custCode":{"type":"string","minLength":1}},"required":["custCode"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"POST"},"path":{"type":"string","minLength":1,"description":"Path added after the Galaxy ERP base URL, e.g. /api/crossdomain/advancedcustomviews/<guid>. Supports {{variables}}."},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Key/value properties sent as the query string. Values support {{variables}}."},"body":{"type":"string","description":"Optional raw JSON request body (supports {{variables}}). Example for an advanced custom view: {\"filters\":[{\"CompCode\":\"01\",\"CustCode\":\"{{node_1.custCode}}\"}],\"MasterDetailTree\":false}"},"apiResponse":{"type":"string","description":"Editor-only: JSON schema of the expected response (same as the apiCall node's \"API Response\"). Powers the variable picker so downstream nodes can reference individual response fields; at runtime the real response is flattened into node_N.* regardless."}},"required":["path"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["salesforceGetContact","salesforceCreateLead","salesforceLogCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"salesforceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","createLead","logCall"]},"getContact":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{variables.x}} / {{call.phoneNumber}}"},"objectType":{"type":"string","enum":["Contact","Lead"],"description":"For by=id: which SObject the Id belongs to (default Contact)."}},"required":["by","value"]},"createLead":{"type":"object","properties":{"lastName":{"type":"string","minLength":1,"description":"Lead last name — required by Salesforce. Supports templates."},"company":{"type":"string","minLength":1,"description":"Lead company — required by Salesforce. Supports templates."},"firstName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"description":{"type":"string","description":"Short summary of the request / call reason."}},"required":["lastName","company"]},"logCall":{"type":"object","properties":{"whoId":{"type":"string","minLength":1,"description":"Contact or Lead Id the call is logged against. Supports templates."},"subject":{"type":"string","minLength":1,"description":"Task subject, e.g. \"Inbound call — order status\"."},"description":{"type":"string","description":"Call notes."}},"required":["whoId","subject"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"by":"phone","value":"{{call.phoneNumber}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["guestyFindOwner","guestyFindGuest","guestyIdentifyCaller","guestyGetListings","guestyGetListing","guestyGetReservations","guestyGetReservation","guestyGetHouseRules","guestyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"guestyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["findOwner","findGuest","identifyCaller","getListings","getListing","getReservations","getReservation","getHouseRules","customRequest"]},"findOwner":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email"],"default":"phone","description":"Which field to search the owner by"},"value":{"type":"string","minLength":1,"description":"Search term (template, e.g. {{call.phone_number}})"}},"required":["value"]},"findGuest":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Guest phone to look up via their reservations (template)"}},"required":["value"]},"identifyCaller":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Caller phone (template) — matched against owners AND guests"}},"required":["value"]},"getListings":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated listing ids (template) — e.g. {{node_X.owner.listings}}"},"ownerId":{"type":"string","description":"Resolve the owner's listing ids first, then fetch them (template)"},"q":{"type":"string","description":"Free-text search across title/nickname/address (template)"}}},"getListing":{"type":"object","properties":{"id":{"type":"string","description":"Listing _id (template) — returns the full property"},"nickname":{"type":"string","description":"Listing nickname (template) — used when no id is known"},"fields":{"type":"string","description":"Space-separated field selection; omit for the full listing"}}},"getReservations":{"type":"object","properties":{"listingIds":{"type":"string","description":"Comma-separated listing ids to scope to (template)"},"listingNickname":{"type":"string","description":"Scope to a single listing by its nickname (template)"},"ownerId":{"type":"string","description":"Scope to all of an owner's listings (resolved to ids) (template)"},"guestPhone":{"type":"string","description":"Scope to a guest's reservations by their phone (template)"},"dateFrom":{"type":"string","description":"Window start: ISO date, `today`, or relative like `-7d` (template)"},"dateTo":{"type":"string","description":"Window end: ISO date, `today`, or relative like `+7d` (template)"},"windowDays":{"type":"integer","minimum":0,"description":"When dateFrom/dateTo are omitted, use today∓windowDays as the overlap window"},"status":{"type":"string","description":"Filter by reservation status (template)"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Reservation _id / confirmation id (template)"}},"required":["id"]},"getHouseRules":{"type":"object","properties":{"listingIds":{"type":"string","minLength":1,"description":"Comma-separated listing ids (template) — house rules are keyed by listing/unit-type"}},"required":["listingIds"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"GET"},"path":{"type":"string","minLength":1,"description":"Path after the base URL, e.g. /v1/reservations (template)"},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Query params (templates)"},"body":{"type":"string","description":"Raw JSON body (template) — ignored for GET"}},"required":["path"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"value":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["helpdeskCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"helpdeskConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createTicket"]},"createTicket":{"type":"object","properties":{"subject":{"type":"string","description":"Ticket subject (template, e.g. \"Call from {{call.phone_number}}\")"},"description":{"type":"string","description":"Ticket body (template, e.g. {{call.summary}})"},"requesterPhone":{"type":"string","description":"Requester phone (template, defaults to {{call.phone_number}})"},"requesterEmail":{"type":"string","description":"Requester email (template)"},"requesterName":{"type":"string","description":"Requester display name (template)"},"priority":{"type":"string","enum":["low","medium","high","urgent"],"description":"Ticket priority"}}}},"required":["operation"],"example":{"operation":"createTicket","createTicket":{"subject":"Call from {{call.phone_number}}","description":"{{call.summary}}","requesterPhone":"{{call.phone_number}}","priority":"medium"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["courierTrackVoucher"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"courierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["trackVoucher"]},"trackVoucher":{"type":"object","properties":{"courier":{"type":"string","description":"Courier to query (acs_courier, speedex, geniki_taxydromiki, elta_courier, boxnow, skroutz_lastmile, taxydema). Omit to try every connected courier."},"voucher":{"type":"string","description":"Voucher/tracking number (template, e.g. {{node_5.order.meta.voucher}})"}}}},"required":["operation"],"example":{"operation":"trackVoucher","trackVoucher":{"voucher":"{{node_5.order.meta.voucher}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["vivaCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"vivaConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createPaymentLink"]},"createPaymentLink":{"type":"object","properties":{"amount":{"type":"string","description":"Amount in EUR as a decimal (template, e.g. \"25.50\" or {{node_3.order.total}})"},"description":{"type":"string","description":"Shown to the customer on the checkout page (template)"},"customerName":{"type":"string","description":"Customer full name (template)"},"customerPhone":{"type":"string","description":"Customer phone (template, e.g. {{call.phone_number}})"},"language":{"type":"string","enum":["el","en"],"description":"Checkout page language"}}}},"required":["operation"],"example":{"operation":"createPaymentLink","createPaymentLink":{"amount":"25.50","description":"Πληρωμή παραγγελίας","customerPhone":"{{call.phone_number}}","language":"el"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createTrackedPage"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"trackedPageConfig":{"type":"object","properties":{"html":{"type":"string","description":"Page HTML (template, e.g. {{node_2.html}} from an llmCompletion node). Scripts and forms are stripped; styles are kept."},"title":{"type":"string","description":"Browser tab title (template)"},"expiresInDays":{"type":"integer","minimum":1,"maximum":365,"description":"How long the link stays open (default 30 days)"}},"required":["html"],"example":{"html":"{{node_2.html}}","title":"Η σύνοψη της κλήσης σας","expiresInDays":30}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["shopifyGetCustomer","shopifyGetOrdersByCustomer","shopifyGetOrderById","shopifySearchProducts","shopifyGetProductById","shopifySyncProductsToSkroutz"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"shopifyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","syncProductsToSkroutz"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search — mapped to vendor / product_type / handle."},"vendor":{"type":"string"},"productType":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify product id."}},"required":["productId"]},"syncProductsToSkroutz":{"type":"object","properties":{"maxRecords":{"type":"integer","minimum":0}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["soft1GetCustomer","soft1SearchItems","soft1GetCustomerBalance","soft1GetCustomerAging","soft1GetCustomerHistory","soft1CreateSalesDoc","soft1TransmitEInvoice"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"soft1Config":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","getCustomerHistory","createSalesDoc","transmitEInvoice"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerAging":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerHistory":{"type":"object","properties":{"trdr":{"type":"string"},"tin":{"type":"string"},"code":{"type":"string"},"from":{"type":"string","description":"ISO date YYYY-MM-DD"},"to":{"type":"string","description":"ISO date YYYY-MM-DD"},"limit":{"type":"integer","minimum":1,"maximum":500,"default":50}}},"createSalesDoc":{"type":"object","properties":{"trdr":{"oneOf":[{"type":"string"},{"type":"number"}]},"custCode":{"type":"string"},"series":{"oneOf":[{"type":"string"},{"type":"number"}]},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"mtrl":{"oneOf":[{"type":"string"},{"type":"number"}]},"code":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"transmit":{"type":"boolean"}},"required":["lines"]},"transmitEInvoice":{"type":"object","properties":{"key":{"type":"string","minLength":1},"template":{"type":"string","minLength":1}},"required":["key"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["exelixisSmartGetContact","exelixisSmartListCompanyContacts","exelixisSmartListSupportMembers","exelixisSmartCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"exelixisSmartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","listCompanyContacts","listSupportMembers","createTicket"]},"getContact":{"type":"object","properties":{"phone":{"type":"string","description":"Template — e.g. {{call.phone_number}}"},"afm":{"type":"string","description":"Template — e.g. {{dynamicVariables.afm}}"}}},"listCompanyContacts":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) to list contacts for"}},"required":["companyId"]},"listSupportMembers":{"type":"object","properties":{}},"createTicket":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) — required by the ERP"},"contactId":{"type":"string"},"supportMemberId":{"type":"string"},"title":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"callUrl":{"type":"string","description":"Template — defaults to {{call.call_url}}"}},"required":["companyId","title","summary"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["pylonGetCustomer","pylonSearchItems","pylonGetCustomerBalance","pylonCreateSalesOrder","pylonGetData","pylonPostData"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"pylonConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","createSalesOrder","getData","postData"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"createSalesOrder":{"type":"object","properties":{"customerTin":{"type":"string","description":"Customer TIN — supports {{dynamicVariables.x}}. Optional when rawData supplies the customer."},"seriesCode":{"type":"string"},"customerBranch":{"type":"string"},"paymentMethod":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0}},"required":["itemCode","quantity"]}},"rawData":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Advanced: a JSON object merged verbatim into the Pylon order payload, overriding the structured fields above. Use native Pylon column names, e.g. {\"Lines\":[{\"CenlItemCode\":\"GG11\",\"CenlAMeasurementQty\":2}],\"CsdcRemarks\":\"…\"}. String values support {{dynamicVariables.x}} templates. Bypasses the structured-field validation, so it must match the target Script exactly."}}},"getData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined getjsondata Script code, e.g. itemsVoiceAgent or custInfoVoice"},"extras":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Param name, e.g. @ItemCode or @phone"},"value":{"type":"string","description":"Param value — supports {{dynamicVariables.x}}"}},"required":["name","value"]},"description":"Script parameters; omit or [] for none"},"packageSize":{"type":"integer","minimum":1,"maximum":5000,"description":"Page size (default 200)"},"allPages":{"type":"boolean","description":"Walk every page until exhausted; otherwise just page 1"}},"required":["entitycode"]},"postData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined postdata Script code, e.g. orderVoice or SalesOrders"},"data":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"JSON object serialized into the postdata `data` field. Use the shape the target Script expects. String values support {{dynamicVariables.x}} templates."}},"required":["entitycode","data"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["entersoftGetCustomer","entersoftSearchItems","entersoftGetCustomerBalance","entersoftGetCustomerAging","entersoftRunPublicQuery","entersoftRunEbsService","entersoftCreateSalesDoc"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"entersoftOneConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","runPublicQuery","runEbsService","createSalesDoc"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"code":{"type":"string","minLength":1,"description":"Customer code — supports templates"}},"required":["code"]},"getCustomerAging":{"type":"object","properties":{"code":{"type":"string","minLength":1}},"required":["code"]},"runPublicQuery":{"type":"object","properties":{"publicQueryGid":{"type":"string"},"groupId":{"type":"string"},"filterId":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Param object — values may be templates"}}},"runEbsService":{"type":"object","properties":{"serviceName":{"type":"string","minLength":1},"parameters":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}}},"required":["serviceName"]},"createSalesDoc":{"type":"object","properties":{"customerGid":{"type":"string"},"customerCode":{"type":"string"},"series":{"type":"string"},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemGid":{"type":"string"},"itemCode":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"ebsServiceName":{"type":"string"}},"required":["lines"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["wooGetCustomer","wooGetOrdersByCustomer","wooGetOrderById","wooSearchProducts","wooGetProductById","wooCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"wooCommerceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric WooCommerce customer id"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string"},"sku":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric customer id (0 for guest)"},"lineItems":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"integer","minimum":0},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","lineItems"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["opencartGetCustomer","opencartGetOrdersByCustomer","opencartGetOrderById","opencartSearchProducts","opencartGetProductById","opencartCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"opencartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"manufacturer":{"type":"string","description":"Exact manufacturer filter. Optional."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Existing OpenCart customer id (for logged-in orders)."},"firstname":{"type":"string"},"lastname":{"type":"string"},"email":{"type":"string"},"telephone":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1},"comment":{"type":"string"}},"required":["products"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["magentoGetCustomer","magentoGetOrdersByCustomer","magentoGetOrderById","magentoSearchProducts","magentoGetProductById","magentoListShippingOptions"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"magentoConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","listShippingOptions"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento order increment id (receipt number) or numeric entity id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento product id."}},"required":["productId"]},"listShippingOptions":{"type":"object","properties":{"countryId":{"type":"string","description":"Destination country as ISO-2 code, e.g. \"GR\". Defaults to \"GR\"."},"postcode":{"type":"string","description":"Destination postcode. Supports templates."},"region":{"type":"string","description":"Optional region/state name."},"sku":{"type":"string","description":"Optional product SKU to price against."}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["megasoftGetCustomer","megasoftSearchProducts","megasoftGetProductByCode","megasoftListShippingMethods","megasoftListPaymentMethods","megasoftGetCustomerBalance","megasoftGetCustomerOrders","megasoftGetOrderStatus","megasoftGetCustomerPurchases","megasoftListOffers","megasoftGetItemPrice","megasoftGetProductStock","megasoftCreateOrder","megasoftCancelOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"megasoftConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchProducts","getProductByCode","listShippingMethods","listPaymentMethods","getCustomerBalance","getCustomerOrders","getOrderStatus","getCustomerPurchases","listOffers","getItemPrice","getProductStock","createOrder","cancelOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getProductByCode":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"getCustomerBalance":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."}},"required":["customerCode"]},"getCustomerOrders":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"orderNo":{"type":"string","description":"Optional order number filter. Supports templates."}},"required":["customerCode"]},"getOrderStatus":{"type":"object","properties":{"orderNo":{"type":"string","description":"Optional order number. Supports templates."},"date":{"type":"string","description":"Optional modified-since date (yyyy-MM-dd)."}}},"getCustomerPurchases":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"itemCode":{"type":"string"}},"required":["customerCode"]},"listOffers":{"type":"object","properties":{"offerId":{"type":"string"},"activeOnly":{"type":"boolean","default":true},"dateFrom":{"type":"string"}}},"getItemPrice":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["customerCode","itemCode"]},"getProductStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"createOrder":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."},"qty":{"oneOf":[{"type":"number","minimum":0},{"type":"string","minLength":1}],"description":"Quantity. Number or template string."},"comments":{"type":"string"}},"required":["customerCode","itemCode","qty"]},"cancelOrder":{"type":"object","properties":{"orderNo":{"type":"string","minLength":1,"description":"Megasoft order number. Supports templates."},"seiraPar":{"type":"string","minLength":1,"description":"Order series / parastatiko code. Supports templates."}},"required":["orderNo","seiraPar"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["gonnaOrderSearchCatalog","gonnaOrderCheckDeliveryAddress","gonnaOrderGetCustomer","gonnaOrderGetCustomerOrders","gonnaOrderGetOrderStatus","gonnaOrderCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"gonnaOrderConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["searchCatalog","checkDeliveryAddress","getCustomer","getCustomerOrders","getOrderStatus","createPaymentLink"]},"searchCatalog":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text menu search. Supports {{dynamicVariables.x}}."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"checkDeliveryAddress":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Delivery address. Supports templates."}},"required":["address"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","name"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getCustomerOrders":{"type":"object","properties":{"customerId":{"type":"string","minLength":1,"description":"Customer id. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":10,"default":5}},"required":["customerId"]},"getOrderStatus":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid. Supports templates."}},"required":["orderUuid"]},"createPaymentLink":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid to charge for. Supports templates."},"amount":{"type":"string","description":"Amount override. Leave blank to use the order total."}},"required":["orderUuid"]}},"required":["operation"],"example":{"operation":"checkDeliveryAddress","checkDeliveryAddress":{"address":"{{dynamicVariables.callerAddress}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["webhotelierCheckAvailability","webhotelierSearchBookings","webhotelierGetReservation","webhotelierGetAvailabilityCalendar","webhotelierGetRooms","webhotelierGetRates"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"webhotelierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["checkAvailability","searchBookings","getReservation","getAvailabilityCalendar","getRooms","getRates"]},"checkAvailability":{"type":"object","properties":{"checkin":{"type":"string","minLength":1,"description":"Check-in date YYYY-MM-DD. Supports templates."},"checkout":{"type":"string","minLength":1,"description":"Check-out date YYYY-MM-DD. Supports templates."},"adults":{"type":"string","minLength":1,"description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"rooms":{"type":"string","description":"Number of rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["checkin","checkout","adults"]},"searchBookings":{"type":"object","properties":{"lastName":{"type":"string","description":"Guest last name. Supports templates. Provide this or email."},"email":{"type":"string","description":"Guest email. Supports templates. Provide this or lastName."},"checkinFrom":{"type":"string","description":"Earliest check-in YYYY-MM-DD. Supports templates."},"checkinTo":{"type":"string","description":"Latest check-in YYYY-MM-DD. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getReservation":{"type":"object","properties":{"resId":{"type":"string","minLength":1,"description":"Reservation id. Supports templates."}},"required":["resId"]},"getAvailabilityCalendar":{"type":"object","properties":{"fromd":{"type":"string","minLength":1,"description":"Calendar start / check-in date YYYY-MM-DD. Supports templates."},"tod":{"type":"string","description":"Calendar end / check-out date YYYY-MM-DD (max 3 months from fromd). Supports templates."},"adults":{"type":"string","description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"room":{"type":"string","description":"Room-type code filter. Supports templates."},"rate":{"type":"string","description":"Rate id filter. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["fromd"]},"getRooms":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code for a single room. Empty = list all rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getRates":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code to scope rates. Supports templates."},"rateId":{"type":"string","description":"Rate id for a single rate (requires roomCode). Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}}},"required":["operation"],"example":{"operation":"getReservation","getReservation":{"resId":"{{dynamicVariables.resId}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hosthubIdentifyCaller","hosthubSearchReservations","hosthubGetReservation","hosthubListRentals","hosthubCheckAvailability"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hosthubConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["identifyCaller","searchReservations","getReservation","listRentals","checkAvailability"]},"identifyCaller":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"description":"Caller phone number. Supports templates (e.g. {{call.phone_number}})."}},"required":["phone"]},"searchReservations":{"type":"object","properties":{"name":{"type":"string","description":"Guest name. Supports templates. Provide one of name / phone / confirmationCode."},"phone":{"type":"string","description":"Guest phone. Supports templates."},"confirmationCode":{"type":"string","description":"Channel confirmation code. Supports templates."}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Hosthub reservation (calendar-event) id. Supports templates."}},"required":["id"]},"getRental":{"type":"object","properties":{"rentalId":{"type":"string","description":"Rental id for a single rental. Empty = list all rentals. Supports templates."}}},"checkAvailability":{"type":"object","properties":{"rentalId":{"type":"string","minLength":1,"description":"Rental id to check. Supports templates."},"from":{"type":"string","minLength":1,"description":"Start date YYYY-MM-DD. Supports templates."},"to":{"type":"string","minLength":1,"description":"End date YYYY-MM-DD. Supports templates."}},"required":["rentalId","from","to"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["prestashopGetCustomer","prestashopGetOrdersByCustomer","prestashopGetOrderById","prestashopSearchProducts","prestashopGetProductById","prestashopCreateOrder","prestashopUpdateOrderStatus"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"prestashopConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder","updateOrderStatus"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"reference":{"type":"string","description":"Exact reference (SKU) filter."},"ean13":{"type":"string","description":"Exact EAN-13 barcode filter."},"mpn":{"type":"string","description":"Exact MPN filter."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id."},"addressDeliveryId":{"oneOf":[{"type":"number"},{"type":"string"}]},"addressInvoiceId":{"oneOf":[{"type":"number"},{"type":"string"}]},"cartId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Pre-existing cart id (PrestaShop requires it)."},"currencyId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"langId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"carrierId":{"oneOf":[{"type":"number"},{"type":"string"}]},"payment":{"type":"string","minLength":1,"description":"Human-readable payment label."},"module":{"type":"string","description":"Payment module code, e.g. \"ps_checkpayment\"."},"totalPaid":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProducts":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProductsWithTax":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalShipping":{"oneOf":[{"type":"number"},{"type":"string"}]},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"product_attribute_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0},"product_name":{"type":"string"},"unit_price":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","addressDeliveryId","addressInvoiceId","cartId","carrierId","payment","totalPaid","totalProducts","totalProductsWithTax","products"]},"updateOrderStatus":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id to update."},"orderStateId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Target order_state id (numeric, store-specific)."}},"required":["orderId","orderStateId"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["airtableGetRecord","airtableSearchRecords","airtableCreateRecord","airtableUpdateRecord"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"airtableConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getRecord","searchRecords","createRecord","updateRecord"]},"getRecord":{"type":"object","properties":{"by":{"type":"string","enum":["phone","id"],"description":"Look up by mapped phone field, or by Airtable record id"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchRecords":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"createRecord":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["fields"]},"updateRecord":{"type":"object","properties":{"recordId":{"type":"string","minLength":1,"description":"Airtable record id (rec...) — supports templates"},"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["recordId","fields"]}},"required":["operation"],"example":{"operation":"getRecord","getRecord":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["jiraGetIssue","jiraSearchIssues","jiraCreateIssue","jiraUpdateIssue","jiraAddComment","jiraTransitionIssue"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"jiraConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getIssue","searchIssues","createIssue","updateIssue","addComment","transitionIssue"]},"getIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key, e.g. SUP-1234 — supports {{dynamicVariables.x}}"}},"required":["issueKey"]},"searchIssues":{"type":"object","properties":{"text":{"type":"string","description":"Free-text query — supports templates"},"jql":{"type":"string","description":"Raw JQL — overrides text when present"},"projectKey":{"type":"string","description":"Scope the search to a project key"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"createIssue":{"type":"object","properties":{"summary":{"type":"string","minLength":1,"description":"Issue summary — supports templates"},"description":{"type":"string","description":"Issue description — supports templates"},"projectKey":{"type":"string","description":"Project key — falls back to the connection default"},"issueType":{"type":"string","description":"Issue type name — falls back to the connection default"},"priority":{"type":"string","description":"Priority name (e.g. High)"},"assignee":{"type":"string","description":"Assign to a person by email or name — supports templates"}},"required":["summary"]},"updateIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key to update — supports templates"},"summary":{"type":"string","description":"New summary — supports templates"},"description":{"type":"string","description":"New description — supports templates"},"priority":{"type":"string","description":"New priority name"}},"required":["issueKey"]},"addComment":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"body":{"type":"string","minLength":1,"description":"Comment body — supports templates"}},"required":["issueKey","body"]},"transitionIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"status":{"type":"string","minLength":1,"description":"Target status name, e.g. \"In Progress\" — supports templates"}},"required":["issueKey","status"]}},"required":["operation"],"example":{"operation":"createIssue","createIssue":{"summary":"Callback requested by {{callerPhone}}","description":"{{transcript}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleChatSendMessage","googleChatSendToDefaultSpace","googleChatSendViaWebhook"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleChatConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["sendMessage","sendToDefaultSpace","sendViaWebhook"]},"sendMessage":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque Google Chat space resource (spaces/AAQA...) — set via UI picker"},"spaceDisplayName":{"type":"string","description":"Cached display name for the node summary"},"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string","description":"Optional thread key for in-thread replies"}},"required":["spaceName","body"]},"sendToDefaultSpace":{"type":"object","properties":{"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string"}},"required":["body"]},"sendViaWebhook":{"type":"object","properties":{"webhookId":{"type":"string","minLength":1,"description":"GoogleChatWebhook document id — set via UI picker"},"webhookLabel":{"type":"string","description":"Cached webhook label for the node summary"},"body":{"type":"string","minLength":1},"threadKey":{"type":"string"}},"required":["webhookId","body"]}},"required":["operation"],"example":{"operation":"sendToDefaultSpace","sendToDefaultSpace":{"body":"New lead from {{caller_name}} ({{caller_phone}})"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["searchContact"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"searchContactConfig":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Phone number to look up (template). Most reliable identifier: matched on the stored phone index, so +30/30/national forms all hit the same contact."},"email":{"type":"string","description":"Email address to look up (template). Matched case-insensitively on the main email and every listed email."},"name":{"type":"string","description":"Name to look up (template). Fuzzy: case- and accent-insensitive, Greek/Latin spellings and common inflections. May match several contacts."}},"example":{"phoneNumber":"{{call.phone_number}}","email":"","name":""}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["managedAgent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"managedAgentConfig":{"type":"object","properties":{"prompt":{"type":"string","maxLength":10000,"default":"","description":"System prompt rendered with {{transcript}}, {{call_summary}}, {{contact}}, {{extracted_entities}}"},"builtInTools":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}},"default":[],"description":"Full AgentTool configurations the LLM may call."},"apiTools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_]{1,40}$","description":"Tool name shown to the LLM; must be unique within the node"},"description":{"type":"string","minLength":10,"maxLength":500,"description":"How the LLM decides when to call this tool"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"default":[],"description":"Input schema for the LLM"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"description":"HTTP request configuration (URL, headers, method, body) — reused from function-call api runner","example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["name","description","apiConfig"]},"default":[],"description":"Inline API tools with name + description + HTTP config"},"mcpServers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the MCP server"},"description":{"type":"string","description":"Optional description"},"serverUrl":{"type":"string","format":"uri","description":"MCP server endpoint"},"transport":{"type":"string","enum":["http","sse"],"description":"Transport: http or sse"},"authType":{"type":"string","enum":["none","bearer","oauth"],"description":"Authentication mode"},"authValue":{"type":"string","description":"Token / credential value — encrypted at rest"},"enabledTools":{"type":"array","items":{"type":"string"},"description":"Whitelist of tools exposed to the LLM. Omit to expose every tool the server publishes."}},"required":["name","serverUrl","transport","authType"]},"default":[],"description":"MCP servers whose tools the LLM may call"},"models":{"type":"object","properties":{"primary":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"description":"Model used by the loop by default","example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"escalation":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Optional fallback model rerun on the whole session if primary failed/stuck. Must use the same provider as primary."}},"required":["primary"]},"limits":{"type":"object","properties":{"maxIterations":{"type":"integer","minimum":0,"maximum":50,"default":15,"description":"Hard cap on LLM turns per run. Set to 0 for no limit (cost cap still enforced)."},"maxCostUsd":{"type":"number","minimum":0,"maximum":0.5,"default":0.5,"description":"Hard cap on total cost (USD) per run. Range: 0 to 0.5."},"stuckDetection":{"type":"boolean","default":true,"description":"Bail if the model calls the same tool with the same args twice in a row"}},"default":{}},"routing":{"type":"object","properties":{"onSuccess":{"type":"string","description":"Next workflow node ID when the run completes successfully"},"onPartial":{"type":"string","description":"Next workflow node ID when the run completed but with partial results"},"onFailure":{"type":"string","description":"Next workflow node ID when the run failed"}},"default":{}},"dryRun":{"type":"boolean","default":false},"enableSubagents":{"type":"boolean","default":false},"maxConcurrentSubagents":{"type":"integer","minimum":1,"maximum":10,"default":5},"maxSubagentIterations":{"type":"integer","minimum":1,"maximum":20,"default":8},"knowledgeFileIds":{"type":"array","items":{"type":"string"},"default":[],"description":"Knowledge files the agent can search via search_knowledge. Empty list = no knowledge tool offered."},"knowledgeRerank":{"type":"object","properties":{"enabled":{"type":"boolean","default":true,"description":"Run the rerank pass. When off, top-K is taken directly from the raw retrieval score (faster but noisier context for the main agent)."},"model":{"type":"string","default":"gpt-5.6-luna","description":"Model used for the rerank pass. Should be small/cheap — its job is ranking, not reasoning. Same provider as the node's primary model."},"candidatesK":{"type":"integer","minimum":5,"maximum":200,"default":50,"description":"How many candidates to retrieve from Pinecone before reranking. Higher = better recall, more rerank tokens. 50 is the sweet spot."},"returnK":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"How many chunks to return after reranking. The main agent sees only these."}},"default":{}},"enableScraping":{"type":"boolean","default":false,"description":"When true, agent gets scrape_website(url) tool that fetches+summarises a page via ScraperService."},"workflowToolIds":{"type":"array","items":{"type":"string"},"default":[],"description":"IDs of during-call workflows the agent may call as tools. Only their duringCall triggers run; onCallEnd-triggered or managed-agent-containing workflows are rejected to prevent recursion."}},"example":{"prompt":"You are an order assistant. From the call transcript, identify the requested products, look them up, and create an order. Use the provided tools.","builtInTools":[],"apiTools":[],"mcpServers":[],"models":{"primary":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0}},"limits":{"maxIterations":15,"maxCostUsd":0.5,"stuckDetection":true},"routing":{"onSuccess":"node-success","onFailure":"node-create-ticket"},"dryRun":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"nodeType"}},"html":{"type":"string"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}]}},"required":["id","name","position","inputs","outputs"],"example":{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}},"description":"Action nodes in the flow"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"visibility":{"type":"string","enum":["private","resellerRead","resellerWrite","globalRead"],"description":"Workflow visibility and access control"},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"WorkFlowVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer; absent for workflows that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","visibility"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Handle Incoming Call","description":"Automated call handling flow","type":"flow","executeAt":"immediate","visibility":"private","trigger":{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}},"nodes":[{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"llmCompletionConfig","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"connections":[{"node":"2","input":"default","output":"default","label":"Continue"}],"files":[{"id":"file_123","filename":"welcome.wav","s3Id":"s3-file-123","displayUrl":"https://example.com/files/welcome.wav"}]}}},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}},"dataRetentionDays":{"type":"number"},"dataRetentionPolicy":{"type":"string","enum":["none","only-phone-number","transcript","all"]},"archiveRecordingForRetrieval":{"type":"boolean"},"requirePassingTestsToPublish":{"type":"boolean"},"coreProvidersOnly":{"type":"boolean"},"skipParametersNotUsedInPrompt":{"type":"boolean","description":"When true, parameters/variables not explicitly referenced in the prompt will not be appended as additional context"},"customerInstructions":{"type":"string"},"testCasesForCustomerInstructions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id of the test case"},"scenario":{"type":"string","description":"The scenario for the test case"},"idealOutcome":{"type":"string","description":"The ideal outcome for the test case"},"actualOutcomes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id of the actual outcome"},"agentEntity":{"type":"string","enum":["systemPrompt","forwardingInstructions","endCallSettings","skipTurn"]},"existingText":{"type":"string","description":"The existing text in the system prompt that will be replaced or modified"},"newText":{"type":"string","description":"The new text to add to the system prompt"},"actionType":{"type":"string","enum":["add","remove","replace"],"description":"The type of the instruction: add, remove, replace"},"reason":{"type":"string","description":"The reason for the instruction"},"applied":{"type":"boolean","description":"Whether the instruction has been applied"},"appliedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"callId":{"type":"string","description":"The ID of the call if the source is call"},"score":{"type":"number","minimum":1,"maximum":10,"description":"1 to 10 by how close was to ideal outcome"},"outcome":{"type":"string","description":"The outcome of the test case"}},"required":["agentEntity","score","outcome"],"description":"The actual outcome of the test case"},"description":"The actual outcomes of the test case"}},"required":["scenario","idealOutcome","actualOutcomes"],"description":"The test cases for the customer instructions"}},"aiDisclosure":{"type":"object","properties":{"enabled":{"type":"boolean","description":"When true, the platform ensures the first spoken greeting names AI / a digital assistant. Default is off. Leaving this off may leave the deployer non-compliant with Article 50(1) and 50(5) EU AI Act."},"disabledAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"disabledById":{"type":"string","description":"User id who turned the overlay off"},"disabledBy":{"type":"string","description":"User name who turned the overlay off"}}},"sensitiveData":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"types":{"type":"array","items":{"type":"string","enum":["amka","afm","personal_number","id_card","passport","gemi","cy_tic","iban","card","cvv","pin","email","phone"]}},"vaultRetentionDays":{"type":"integer","minimum":1,"maximum":365}}},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"AgentVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer. Set to v1 on create/copy; absent only on legacy agents that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name"],"example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support Agent","agentType":"prompt-based","systemPrompt":"You are a helpful customer support assistant. Always be polite and provide accurate information.","dynamicVariables":[{"name":"company_name","value":"{{company_name}}"}],"language":"en-US","secondaryLanguages":[{"language":"es-ES","type":"other_agent","agentId":"agent-123e4567-e89b-12d3-a456-426614174000","enabled":true,"defaultContries":["Greece","United States"]},{"language":"fr-FR","type":"other_voice","voiceConfig":{"voiceProvider":"elevenlabs","voiceId":"21m00Tcm4TlvDq8ikWAM"},"enabled":true,"defaultContries":["Greece","United States"]}],"knowledgeFileIds":["kb-123","kb-456"],"workflowsIds":["workflow-123","workflow-456"],"tools":[{"enabled":true,"name":"send_sms","prompt":"Send an SMS to the user","type":"system"}],"allowedToCopy":"sameCompany","passwordTries":3,"externalDial":1234567890,"internalDial":"4002","knowledgeFiles":[{"id":"kb-123","name":"Product Manual","description":"Complete product documentation"}],"workflows":[{"id":"workflow-123","name":"Send Email Notification","description":"Automated email notification workflow","triggers":[{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}}],"nodes":[],"files":[],"parameters":[{"name":"company_name","value":"{{company_name}}","type":"string","required":true,"aiGenerated":true}],"dataRetentionDays":30,"dataRetentionPolicy":"all"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"404":{"description":"Agent not found","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Agentic - Agents"]},"put":{"summary":"Update agent configuration","description":"Update any aspect of an AI agent's configuration including behavior, settings, and integrations. All fields are optional - only provide fields you want to change.\n\n**What You Can Update:**\n- `name`: Agent display name\n- `systemPrompt`: Core behavior instructions\n- `language`: Supported languages\n- `agentPhoneSettings`: Voice, model, transcription, VoIP connections, transfer settings\n- `agentEmailSettings`: Email handling configuration\n- `knowledgeFileIds`: Connect/disconnect knowledge bases\n- `workflowsIds`: Connect/disconnect workflow automations\n- `appointmentSettings`: Calendar sync and booking configuration\n- `dynamicVariables`: Custom variables for personalization\n- `nodes` / `connections`: Flow configuration (node-based agents only)\n- `integrations`: External system connections (CRM, calendar, etc.)\n\n**Common Update Scenarios:**\n- Refine agent behavior by updating system prompt\n- Connect agent to VoIP phone via `agentPhoneSettings.voipConnectionIds`\n- Add knowledge bases for better responses\n- Change voice or language settings\n- Enable/disable appointment booking\n- Configure post-call analysis and notifications\n- Update transfer settings and hold music\n\n**Response:**\nReturns the complete updated agent configuration with all settings.","responses":{"200":{"description":"Agent updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string"},"agentType":{"type":"string","enum":["prompt-based","analysis-agent","ai-assistant","node-based"],"example":"prompt-based","description":"The type of agent architecture that determines its capabilities and behavior. `prompt-based`: Standard conversational agent that can answer calls, transfer calls, handle emails, book appointments, and execute workflows. Best for general-purpose use cases. `analysis-agent`: Specialized agent for call analysis only. Used to analyze calls after they have been transferred to humans. Monitors and extracts insights from ongoing calls. See: https://docs.voicelogica.ai/transfer-calls/introduction `ai-assistant`: Personal AI assistant/voicemail. Designed ONLY for individual use as your own AI voicemail or personal assistant. Handles calls when you are unavailable. `node-based`: Advanced agent with visual flow builder. Supports complex branching logic, conditional routing, and multi-step reasoning. Best for sophisticated conversational workflows."},"systemPrompt":{"type":"string"},"dynamicVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the dynamic variable"},"value":{"type":"string","description":"The value of the dynamic variable"}},"required":["name","value"]}},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Locale code"},"secondaryLanguages":{"type":"array","items":{"type":"object","properties":{"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"The language of the secondary language"},"type":{"type":"string","enum":["other_agent","other_voice"],"description":"The type of the secondary language"},"agentId":{"type":"string","description":"The ID of the agent that the secondary language is for"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"enabled":{"type":"boolean","description":"Whether the secondary language is enabled"},"defaultContries":{"type":"array","items":{"type":"string","enum":["Afghanistan","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Bouvet Island","Brazil","British Indian Ocean Territory","Brunei Darussalam","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","China","Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo","Congo, The Democratic Republic of the","Cook Islands","Costa Rica","Cote D'Ivoire","Croatia","Cuba","Cyprus","Czech Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Falkland Islands (Malvinas)","Faroe Islands","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Heard Island and Mcdonald Islands","Holy See (Vatican City State)","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran, Islamic Republic Of","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kuwait","Kyrgyzstan","Lao People\"S Democratic Republic","Lao People's Democratic Republic","Latvia","Lebanon","Lesotho","Liberia","Libyan Arab Jamahiriya","Liechtenstein","Lithuania","Luxembourg","Macao","Macedonia, The Former Yugoslav Republic of","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia, Federated States of","Moldova, Republic of","Monaco","Mongolia","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands","Netherlands Antilles","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territory, Occupied","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn","Poland","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saint Helena","Saint Kitts and Nevis","Saint Lucia","Saint Pierre and Miquelon","Saint Vincent and the Grenadines","Samoa","San Marino","Sao Tome and Principe","Saudi Arabia","Senegal","Serbia and Montenegro","Seychelles","Sierra Leone","Singapore","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia and the South Sandwich Islands","Spain","Sri Lanka","Sudan","Suriname","Svalbard and Jan Mayen","Swaziland","Sweden","Switzerland","Syrian Arab Republic","Taiwan, Province of China","Tajikistan","Tanzania, United Republic of","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey","Turkmenistan","Turks and Caicos Islands","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States Minor Outlying Islands","United States","Uruguay","Uzbekistan","Vanuatu","Venezuela","Virgin Islands, British","Virgin Islands, U.S.","Wallis and Futuna","Western Sahara","Yemen","Zambia","Zimbabwe","Unknown or Invalid Region","Russia"],"description":"Country name"},"description":"The default countries for the secondary language"}},"required":["language","type"]}},"knowledgeFileIds":{"type":"array","items":{"type":"string"}},"workflowsIds":{"type":"array","items":{"type":"string"}},"allowedToCopy":{"type":"string","enum":["sameCompany","public","publicWithPassword","private"]},"navigateToNodeTool":{"type":"boolean","description":"Whether the agent can navigate to a specific node tool based on instructions"},"syncWithContacts":{"type":"boolean"},"agentEmailSettings":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"systemPrompt":{"type":"string"},"functionCallIds":{"type":"array","items":{"type":"string"}},"mailboxIds":{"type":"array","items":{"type":"string"},"description":"Mailboxes exclusively assigned to this agent for inbound mail conversations"},"ccOptions":{"type":"array","items":{"type":"string"}},"evaluationSettings":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"methodsEnabled":{"type":"object","properties":{"createDraft":{"type":"boolean"},"reply":{"type":"boolean"},"training":{"type":"boolean"}}},"processEmailPrompt":{"type":"string"},"trainingEvaluationPrompt":{"type":"string"},"completeWhenNoReplyNeeded":{"type":"boolean","description":"When true, newsletters/receipts/no-reply are marked closed (completed). Default true."}},"example":{"methodsEnabled":{"createDraft":true,"reply":true,"training":false},"processEmailPrompt":"Keep replies short and professional.","trainingEvaluationPrompt":"Evaluate this email for training purposes.","completeWhenNoReplyNeeded":true}},"displayBusinessDetails":{"type":"object","properties":{"name":{"type":"boolean"},"address":{"type":"boolean"},"website":{"type":"boolean"},"email":{"type":"boolean"},"phone":{"type":"boolean"},"operatingHours":{"type":"boolean"},"isOpenNow":{"type":"boolean"},"utcOffset":{"type":"boolean"},"wheelchairAccessibleEntrance":{"type":"boolean"}},"example":{"name":true,"address":true,"website":true,"email":true,"phone":true,"operatingHours":true,"isOpenNow":true,"utcOffset":true,"wheelchairAccessibleEntrance":false}},"authorizationConfig":{"type":"object","properties":{"smsEnabled":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"emailEnabled":{"type":"boolean"},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"example":{"smsEnabled":true,"emailEnabled":true}},"contactData":{"type":"object","properties":{"enabled":{"type":"boolean"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["enabled"],"example":{"enabled":true}},"functionCalls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"description":{"type":"string","description":"Description of the function call"},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"description":"Condition blocks for execution logic"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"],"description":"When to execute the function call"},"confirmationMethodConfig":{"type":"object","properties":{"confirmationRequired":{"type":"boolean"},"secondsToWait":{"type":"number","minimum":10},"wordMatch":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"array","items":{"type":"string"}}},"required":["required","value"]},"aiGuidance":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]},"dtmf":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]}},"required":["confirmationRequired","secondsToWait"],"description":"Configuration for user confirmation"},"messageToUserBeforeAction":{"type":"string","description":"Message to show user before executing the action"},"messageToUserAfterAction":{"type":"string","description":"Message to show user after executing the action"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"functions":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"number"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"]},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"action":{"type":"string","enum":["emailConfig","apiCall","sendSms","createEvent","sendPhoneCall","forwardCall","googleSearch","sendMessage","endCallConfig","googleSheetConfig","googleDocConfig","llmCompletion","hubspotConfig","aiResponse","transferCall","afmSearch","codeExecution"]},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}},"forwardCallConfig":{"type":"object","properties":{"voipConnectionId":{"type":"string","minLength":24}},"required":["voipConnectionId"],"example":{"voipConnectionId":"507f1f77bcf86cd799439011"}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}},"sendMessageConfig":{"type":"object","properties":{"messageToUser":{"type":"string","minLength":1}},"required":["messageToUser"],"example":{"messageToUser":"Your order has been shipped!"}},"endCallConfig":{"type":"object","properties":{"reason":{"type":"string","minLength":2}},"required":["reason"],"example":{"reason":"User requested to end the call"}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["sequence","action"]},"description":"Internal actions to execute"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","parameters","functions"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Send Email Notification","description":"Sends an email notification to the user","conditionBlocks":[],"executeAt":"immediate","messageToUserBeforeAction":"I will send you an email notification.","messageToUserAfterAction":"Email notification sent successfully!","fileIds":["file_123","file_456"],"files":[{"id":"file_123","filename":"document.pdf","s3Id":"s3-file-123","displayUrl":"https://example.com/files/document.pdf"}],"parameters":[{"id":"param_1","name":"Email Address","description":"Recipient email address","type":"string","required":true}],"functions":[{"id":"func_1","name":"Send Email","type":"email","config":{"to":"{{emailAddress}}","subject":"Notification","body":"This is a notification email."}}]}}}},"example":{"model":{"completionProvider":"openai","model":"gpt-4o-mini","temperature":0.5,"maxCompletionTokens":500},"systemPrompt":"You are a helpful email assistant. Always be professional and courteous.","functionCalls":[{"id":"fc-123","name":"Send Email","description":"Send an email to the specified recipient"}],"powerUps":["appointment-booking"],"displayBusinessDetails":{"name":true,"address":true,"website":true,"email":true,"phone":true,"operatingHours":true,"isOpenNow":true,"utcOffset":true,"wheelchairAccessibleEntrance":false}}},"agentPhoneSettings":{"type":"object","properties":{"interimGeneration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to generate interim generation while user is speaking"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to trigger interim generation"},"prompt":{"type":"string","description":"The prompt to use when generating interim generation"},"minimumWordsForFullResponse":{"type":"number","description":"The minimum number of words for a full response"}},"description":"Configuration for interim generation"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"AI model configuration for the agent"},"sendSms":{"type":"boolean","description":"Whether to send SMS"},"blockInterruptionWhileAiIsGenerating":{"type":"boolean","description":"Whether to block interruption while AI is generating"},"senderId":{"type":"string","description":"The ID of the sender to use for SMS"},"allowHumanToInterruptAiOnFirstMessage":{"type":"boolean","description":"Whether to allow human to interrupt AI on the first message"},"ssml":{"type":"boolean","description":"Whether to use SSML (Speech Synthesis Markup Language) for voice synthesis"},"skipTurnEnabled":{"type":"boolean","description":"Whether to skip turn during the call"},"skipTurnPrompt":{"type":"string","description":"The prompt to use when skipping turn during the call"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"timesToNudgeBeforeHungup":{"type":"number","minimum":0,"maximum":3,"description":"Number of times to nudge the user before hanging up the call (1-3)"},"nudgeIntervalSeconds":{"type":"number","minimum":0,"maximum":60,"description":"Interval in seconds between nudges when user is silent (0-60 seconds)"},"nudgePrompt":{"type":"string","description":"The prompt to use when nudging the user"},"actionsAfterNudge":{"type":"array","items":{"type":"string","enum":["hangup","forward"]},"maxItems":2,"description":"Actions after nudge when silence threshold is reached (hangup, forward, or both)"},"systemPrompt":{"type":"string","description":"The system prompt that defines the agent's behavior and personality"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"phoneFirstMessageAiGenerated":{"type":"boolean","description":"Whether the first message should be AI-generated or use a predefined message"},"updateAdaptationPhrasesOnSystemPromptChange":{"type":"boolean","description":"Whether to update adaptation phrases when system prompt changes"},"phoneFirstMessage":{"type":"string","description":"The first message to say when the call connects"},"phoneFirstMessageOffHours":{"type":"string","description":"Welcome message when the business is closed; if empty, the normal first message is used"},"endCallAfterOffHoursWelcomeMessage":{"type":"boolean","description":"When the business is closed and the off-hours welcome message plays, hang up as soon as it finishes instead of continuing the conversation"},"transcriptionConfig":{"type":"object","properties":{"transcriptionProvider":{"type":"string","enum":["microsoft","google","fireworks","speechmatics","openai","assemblyai","deepgram","google_v1","google_v2","elevenlabs","voicelogica","soniox"],"description":"The transcription service provider to use for speech-to-text"},"silenceDurationMs":{"type":"number","minimum":500,"description":"Duration of silence in milliseconds before considering the user finished speaking"},"adaptationPhraseSetIds":{"type":"array","items":{"type":"string"},"description":"IDs of adaptation phrase sets to improve transcription accuracy"},"transcriptionVoiceMailPhrases":{"type":"array","items":{"type":"string"},"description":"Phrases that indicate the call has reached a voicemail system"},"waitForFullTranscription":{"type":"boolean","description":"Whether to wait for complete transcription before processing"},"enhanced":{"type":"boolean","description":"Whether to use enhanced transcription models for better accuracy"},"audioEnhancement":{"type":"boolean","description":"Whether to run ai-coustics speech enhancement (noise/background-speech suppression) on caller audio before transcription"},"audioEnhancementLevel":{"type":"number","minimum":0,"maximum":1,"description":"How aggressively the ai-coustics model suppresses noise (0.0-1.0). Uses the model default when omitted"},"endpointSensitivity":{"type":"number","minimum":-1,"maximum":1,"nullable":true,"description":"Soniox only: how aggressively endpoints are detected (-1.0 to 1.0). Higher = faster end-of-turn but more risk of cutting the caller off mid-sentence. Platform default 0.3"},"maxEndpointDelayMs":{"type":"number","minimum":500,"maximum":3000,"nullable":true,"description":"Soniox only: hard cap on how long Soniox may wait for an endpoint after speech ends (500-3000ms). Platform default 1500"},"endpointLatencyAdjustmentLevel":{"type":"integer","minimum":0,"maximum":3,"nullable":true,"description":"Soniox only: endpoint latency reduction level 0-3 (3 = most aggressive). Platform default 3"},"speculativeFinalize":{"type":"boolean","nullable":true,"description":"Soniox only: at the speculative quiet moment, request finalize() to flush pending tokens into the candidate before the endpoint. Platform default from admin settings"},"singleUtterance":{"type":"boolean","description":"Whether to process speech as single utterances"},"openAiModel":{"type":"string","enum":["whisper-1","gpt-transcribe","gpt-4o-transcribe","gpt-4o-mini-transcribe","gpt-4o-transcribe-diarize"],"description":"OpenAI model to use for transcription"},"prompt":{"type":"string","description":"Custom prompt used for transcription processing"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to focus on during transcription"},"initializationMethod":{"type":"string","enum":["on_call_start","on_human_join"],"description":"Method to initialize the transcription service"},"adaptationPhraseSets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the adaptation phrase set"},"description":{"type":"string","nullable":true,"description":"The description of the phrase set"},"phraseSetId":{"type":"string","description":"The phrase set id"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Locale code"},"phrases":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Phrase value"},"boost":{"type":"number","minimum":1,"maximum":20,"description":"Boost value (1-20)"}},"required":["value","boost"]},"nullable":true,"description":"The phrases of the set"},"boost":{"type":"number","minimum":1,"maximum":20,"nullable":true,"description":"Boost value (1-20)"},"apiEnabled":{"type":"boolean","nullable":true,"description":"Whether API is enabled"},"apiUrl":{"type":"string","nullable":true,"description":"API URL"},"apiKey":{"type":"string","nullable":true,"description":"API key"},"lastPulledAt":{"type":"string","format":"date-time","description":"The last pulled at date of the phrase set","nullable":true}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","phraseSetId","language"],"description":"Response schema for adaptation phrase set including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Greetings","description":"Common customer greeting phrases","phraseSetId":"greetings_001","language":"en-US","phrases":[{"value":"Hello","boost":5},{"value":"Hi there","boost":3},{"value":"Good morning","boost":4}],"boost":5,"apiEnabled":true,"apiUrl":"https://api.example.com/phrases","apiKey":"api_key_123","lastPulledAt":"2024-01-15T10:30:00.000Z"}},"description":"Adaptation phrase sets used for transcription"}},"required":["transcriptionProvider"],"description":"Configuration for speech-to-text transcription settings","example":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"waitForFullTranscription":false,"openAiModel":"whisper-1"}},"standbyConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable standby (sleep/wake) for this agent"},"wakePhrases":{"type":"array","items":{"type":"string","minLength":2,"maxLength":50},"maxItems":5,"description":"Phrases that wake the agent. On human-to-human calls the agent stays asleep until one is heard; on normal AI calls a wake phrase brings it back after it was told to sleep. Both parties hear the response."},"sleepPhrases":{"type":"array","items":{"type":"string","minLength":2,"maxLength":50},"maxItems":5,"default":[],"description":"Phrases that put the agent into standby — it stops responding entirely until woken (distinct from skip-turn). Mainly used on normal AI calls."}},"required":["enabled","wakePhrases"],"description":"Standby (sleep/wake) configuration","example":{"enabled":true,"wakePhrases":["logica"],"sleepPhrases":["go to sleep"]}},"voipConnectionIds":{"type":"array","items":{"type":"string"},"description":"@deprecated Legacy VoIP connection IDs. Use transferSettings.availableTransferDestinations + SipTrunk / UserEndpoint / UserGroup. Kept for backward-compat reads until the migration script lands."},"connectDynamically":{"type":"boolean","description":"Whether to connect the user to the appropriate AI or Human Agent dynamically based on the system prompt"},"firstMessageSenderOnOutgoingCall":{"type":"string","enum":["agent","user"],"description":"Who should send the first message on outgoing calls"},"endCallConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable automatic call ending. When enabled, the agent can end calls based on configured reasons"},"messageToClient":{"type":"string","description":"The message the agent will say to the client before ending the call. This is used when aiGenerated is false"},"aiGenerated":{"type":"boolean","description":"When true, the agent will generate a contextual goodbye message. When false, it uses the fixed messageToClient"},"maximumTimeEnabled":{"type":"boolean","description":"Enable automatic call termination after reaching the maximum time limit"},"maximumTimeCallInSeconds":{"type":"number","minimum":1,"description":"Maximum allowed call duration in seconds. Calls will automatically end when this limit is reached (e.g., 300 for 5 minutes)"},"endCallReasons":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","description":"The specific condition or reason when the agent should end the call (e.g., \"customer doesnt want anything else\", \"issue resolved\", \"transferred to human\")"},"aiGenerated":{"type":"boolean","description":"When true, the AI generates a contextual goodbye message. When false, uses a fixed message"},"prompt":{"type":"string","description":"Template or instruction for the AI to generate the goodbye message. Used when aiGenerated is true to guide the tone and content"},"maxInterruptions":{"type":"integer","minimum":0,"maximum":5,"description":"How many times the caller may interrupt the goodbye and keep the call alive before the hangup becomes final. 0 hangs up at once even if the caller speaks. Defaults to 1"}},"required":["reason","aiGenerated"],"example":{"reason":"completed","aiGenerated":true,"prompt":"Thank you for calling. Have a great day!"}},"description":"Detailed end call configurations with specific reasons and custom prompts. Each reason defines when the agent should end the call and what to say"}},"description":"Configuration for automatic call ending behavior","example":{"enabled":true,"aiGenerated":true,"maximumTimeEnabled":true,"maximumTimeCallInSeconds":300,"endCallReasons":[{"reason":"when customer doesnt want anything else","messageToClient":"Thank you for calling. If you need anything else, please call back.","aiGenerated":true}]}},"afterCallFunctionCallIds":{"type":"array","items":{"type":"string"},"description":"IDs of function calls to execute after the call ends"},"postCallAnalysisConfig":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"AI model to use for post-call analysis"},"minimumDuration":{"type":"number","description":"Minimum duration in seconds to generate post-call analysis & summary"},"summaryEnabled":{"type":"boolean","description":"Whether to generate summary"},"summaryPrompt":{"type":"string","maxLength":5000,"description":"Custom prompt for generating call summary"},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties to extract and analyze from the call"},"allowedAutoTaskKinds":{"type":"array","items":{"type":"string","enum":["todo","call","meeting","reminder","callback"]},"description":"Task kinds the AI may auto-create at the end of the call. Human↔AI calls only allow \"callback\"; human↔human (transferred) calls allow the others. Empty = the AI creates no tasks post-call."},"analysisPrompt":{"type":"string","description":"Custom prompt for call analysis"},"emails":{"type":"array","items":{"type":"string","format":"email"},"description":"Email addresses to send post-call analysis to"},"phoneNumbers":{"type":"array","items":{"type":"string"},"description":"Phone numbers to send post-call analysis to"},"webhookHeaders":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The key of the webhook header"},"value":{"type":"string","description":"The value of the webhook header"}},"required":["key","value"]},"description":"Webhook headers to send with the post-call analysis data"},"webhookUrl":{"type":"string","format":"uri","description":"Webhook URL to send post-call analysis data to"},"webhookUseProtectedValues":{"type":"boolean","description":"When the agent protects sensitive data: send the REAL values (ΑΦΜ, ΑΜΚΑ, IBAN, …) to this webhook instead of the placeholders. Off by default; every send is audited. Only members who may reveal sensitive data can turn it on."},"analysisSmsConfig":{"type":"object","properties":{"sendSmsCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"smsPromptEvaluation":{"type":"string","description":"Prompt to evaluate if sms should be sent"},"smsMessage":{"type":"string","description":"Custom sms message to send"},"minimumDuration":{"type":"number","description":"Minimum duration in minutes to send sms"},"sendSmsFromCallerId":{"type":"boolean","description":"Whether to send the SMS using the caller ID (company phone number) that made the call as the sender"}},"required":["sendSmsCondition"],"description":"Configuration for sms content"},"telegramChats":{"type":"array","items":{"type":"string"},"description":"Telegram chat ids that receive the post-call alert. Ids come from the reachable-chat registry (GET /telegram/chats) — a bot may only message a chat that contacted it first, so arbitrary ids cannot be typed in."},"analysisTelegramConfig":{"type":"object","properties":{"sendTelegramCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"telegramPromptEvaluation":{"type":"string","description":"Prompt to evaluate if a Telegram message should be sent (and, with evaluate_condition_and_recipients, which chats)"},"telegramMessage":{"type":"string","description":"Custom Telegram message to send"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds before a Telegram alert is sent"}},"required":["sendTelegramCondition"],"description":"Configuration for the Telegram alert"},"viberChannelIds":{"type":"array","items":{"type":"string"},"description":"Connected Viber Channels (ids from the Viber Channels list) that receive the post-call alert"},"analysisViberChannelConfig":{"type":"object","properties":{"sendViberChannelCondition":{"type":"string","enum":["always","evaluate_condition","never"]},"viberChannelPromptEvaluation":{"type":"string","description":"Prompt to evaluate whether the Viber Channel alert should be posted"},"viberChannelMessage":{"type":"string","description":"Custom Viber Channel message (defaults to the call summary). Takes {{placeholders}}: any analysis property ({{client_name}}), {{summary}}, {{analysis_fields}} (every analysis property as \"Label: value\"), {{phone_number}}"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds before a Viber Channel alert is posted"}},"required":["sendViberChannelCondition"],"description":"Configuration for the Viber Channel alert"},"analysisEmailConfig":{"type":"object","properties":{"dailyDigest":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Send one summary email a day instead of one per call. With a condition prompt, calls that pass it are still emailed at once (urgent); the rest go in the summary."},"alsoEachCall":{"type":"boolean","description":"Also send the normal email after each call, on top of the daily summary. Default false."},"sendTime":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Local time (company timezone) to send the summary, HH:mm. Default 20:00. It covers the 24 hours before."},"lastSentAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["enabled"],"description":"Daily summary email instead of one email per call"},"includeInEmail":{"type":"object","properties":{"callUrl":{"type":"boolean","description":"Whether to include call URL in email"},"summary":{"type":"boolean","description":"Whether to include call summary in email"},"analysisProperties":{"type":"boolean","description":"Whether to include analyzed properties in email"},"dynamicVariables":{"type":"boolean","description":"Whether to include collected / dynamic variables (e.g. widget form fields) in email"},"recording":{"type":"boolean","description":"Whether to include call recording in email"},"transcription":{"type":"boolean","description":"Whether to include call transcription in email"}},"description":"Configuration for email content"},"sendEmailCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"emailPromptEvaluation":{"type":"string","description":"Prompt to evaluate if email should be sent"},"emailSubject":{"type":"string","description":"Custom email subject to send"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds to send email (voice / websocket calls)"},"minimumVisitorMessages":{"type":"integer","minimum":0,"description":"Minimum visitor (Contact/User) messages required to send email for chat / message sessions"}},"required":["sendEmailCondition"],"description":"Configuration for email content"},"excludePhoneNumbers":{"type":"array","items":{"type":"string"},"description":"Caller phone numbers excluded from post-call processing. This suppresses the whole post-call pipeline for that number, not just the notification: no summary is generated, and because caller memory is built from stored summaries, an excluded number also loses memory of its previous calls. Use it for internal test lines, never for a customer you still want remembered."},"evaluationConfig":{"type":"object","properties":{"issuesEnabled":{"type":"boolean","description":"Run the QA/issue lens (defaults on)"},"opportunitiesEnabled":{"type":"boolean","description":"Run the opportunity-mining lens (defaults off; sellable)"},"audioAnalysisEnabled":{"type":"boolean","description":"Re-transcribe the recording for WER and flag awkward pauses (defaults on)"},"errorAlertsEnabled":{"type":"boolean","description":"Email Voice Logica (alerts@) when a call has session errors — never the customer (defaults on)"},"customFocus":{"type":"string","maxLength":2000,"nullable":true,"description":"Free-text \"what matters most\" steering for the judge"},"customCriteria":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"maxItems":5,"description":"Named checks the judge evaluates"},"judgeModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Plan-gated client choice of evaluation model; falls back to the admin A/B pool"},"remediation":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow the evaluator to act post-call (alert business + VL admin for risky/unfixable misses)"},"autoSendToCustomer":{"type":"boolean","description":"Permit auto-sending the drafted follow-up to the caller for SAFE misses (hybrid auto-action)"},"mode":{"type":"string","enum":["alert","managed_agent"],"description":"\"alert\" = detect+notify (+ safe auto-message); \"managed_agent\" = a guard-railed agent re-runs the missed tools using the live toolset, then alerts for what it could not do"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Per-agent override for the remediation agent's primary model (plan-gated)"},"escalationModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Per-agent override for the smarter model the remediation agent escalates to (plan-gated)"}},"description":"Post-call remediation policy — hybrid: safe auto-actions + human alerts for risky"}},"description":"Admin-only post-call evaluation configuration"}},"description":"Configuration for post-call analysis and reporting","example":{"analysisPrompt":"Analyze this call for customer satisfaction and key points discussed.","summaryPrompt":"Provide a concise summary of this call.","emails":["analyst@company.com"],"analysisSmsConfig":{"sendSmsCondition":"always","smsPromptEvaluation":"","smsMessage":"{{phone_number}} {{viewUrl}}","minimumDuration":10,"sendSmsFromCallerId":false},"analysisEmailConfig":{"sendEmailCondition":"always","emailPromptEvaluation":"","emailSubject":"Voice Logica AI- Call analysis: {{caller}} {{date}}","includeInEmail":{"callUrl":true,"summary":true,"analysisProperties":true,"dynamicVariables":true,"recording":true,"transcription":true},"minimumDuration":10,"minimumVisitorMessages":1}}},"sendDmtf":{"type":"boolean","description":"Whether to send DTMF tones during the call (will be active for 40 seconds)"},"dtmfTimeout":{"type":"number","minimum":1,"maximum":60,"description":"Timeout for DTMF input in seconds (1-60 seconds)"},"dtmfKeyToTrigger":{"type":"string","enum":["dtmf-timeout","#","*"],"description":"Keys to trigger the workflow"},"secondsRingingUntilAnswer":{"type":"number","minimum":1,"maximum":60,"description":"Number of seconds to ring before considering the call unanswered (1-60 seconds)"},"volumeThreshold":{"type":"number","minimum":0,"maximum":1,"description":"Audio volume threshold for detecting speech (0.0 to 1.0)"},"saveRecording":{"type":"boolean","description":"Whether to save call recordings"},"saveRecordingGoogleDrive":{"type":"boolean","description":"Whether to save call recordings to Google Drive"},"topNknowledgeQuestionsInPrompt":{"type":"number","minimum":1,"maximum":20,"description":"DEPRECATED — not read by the prompt path; use nKnowledgeFilesQuery"},"nKnowledgeFilesQuery":{"type":"number","minimum":1,"maximum":10,"description":"Number of knowledge files to query for context (max 10)"},"selectiveKnowledgeLookup":{"type":"boolean","description":"When enabled, the AI uses a tool to selectively query specific knowledge files instead of searching all files on every message"},"generateKnowledgeFromTransferredCalls":{"type":"boolean","description":"When enabled, transferred calls are analysed post-transfer and any valuable Q&A insights are added to a private per-agent knowledge file, which is then loaded automatically on future calls."},"recordUnansweredQuestions":{"type":"boolean","description":"When enabled, every finished call is analysed for questions the agent could not answer. Each is stored on the agent’s private knowledge file with no answer and a count of how many calls have asked it, so the gaps can be answered in order of demand. These entries are never retrievable until someone writes the answer."},"unansweredQuestionTargets":{"type":"array","items":{"type":"string","enum":["agent","company"]},"description":"Where captured unanswered questions are stored. 'agent' keeps them on this agent's own file; 'company' puts them on a shared file every agent in the company reads. Select both to have each question routed to one or the other. Defaults to ['agent']."},"unansweredRoutingPrompt":{"type":"string","maxLength":1000,"description":"Only used when BOTH targets are selected: your own rule for which questions belong to the company file and which to this agent. Leave empty to use the default — business-wide facts go to the company, anything tied to what this agent handles stays with the agent."},"maxTimeMemory":{"type":"number","description":"Maximum time in seconds to keep conversation context in memory"},"maxInteractionsMemory":{"type":"number","minimum":0,"maximum":20,"description":"Maximum number of interactions to keep in conversation memory (max 20)"},"droppedCallResumeSeconds":{"type":"number","minimum":0,"maximum":86400,"description":"How long a returning caller or chat visitor (same number / same email) gets the LAST session's messages and AI dialogue on the new call. Memory must be on. The previous session's summary is not injected — the full last conversation is already there. Defaults to 600 (10 minutes). Max 86400 (1 day). Set 0 to always start fresh."},"droppedCallResumeMaxTurns":{"type":"number","minimum":1,"maximum":40,"description":"Optional cap on how many trailing spoken turns of the dropped call to carry over. Leave unset — the default — to carry the ENTIRE conversation, which is what keeps resolved data such as product codes and the identified customer available so the caller is never asked for them twice. Only set this if chained resumes (a caller dropping repeatedly on a bad line) grow the context too far."},"transferType":{"type":"string","enum":["warm","cold"],"description":"Type of call transfer: warm (with context) or cold (without context)"},"transferHoldSoundFileId":{"type":"string","description":"The custom sound to play when the call is transferred"},"transferHoldSound":{"type":"string","enum":["none","coffee_shop","call_center","office","soft_piano","lounge","waiting_room","custom"],"description":"The sounds to play when the call is transferred"},"transferSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Master switch for the agent's transfer capability. When false the AI is not given any transfer tool (forward_call / connect_dynamically) and the available-destinations prompt block is suppressed — but every other field on this object is preserved so the admin can re-enable it without losing config. Treated as true when undefined, for backward compatibility with agents created before this flag existed."},"transferMode":{"type":"string","enum":["blind","warm","attended"],"description":"Transfer mode: blind (immediate REFER), warm (consult + media merge), attended (SIP hold + consult + REFER/Replaces)."},"blindTransfer":{"type":"boolean","description":"Deprecated — use transferMode. Kept for legacy read compat only."},"announceTransferReason":{"type":"boolean","description":"Whether to announce the transfer reason to the person we are transferring the call to."},"transferCallBasedOnPromptInstructions":{"type":"boolean","description":"Whether to dynamically generate the transfer based on the prompt instructions."},"promptForTransferReason":{"type":"string","description":"The prompt to use when dynamically generating the transfer reason."},"analyzeTransferredCall":{"type":"boolean","description":"Whether to analyze the transferred call."},"blockTransferWhenCompanyIsClosed":{"type":"boolean","description":"Whether to block the transfer when the company is closed."},"agentIdToAnalyzeTransferredCall":{"type":"string","description":"The agent ID to analyze the transferred call."},"showCallerId":{"type":"boolean","description":"Whether to show the original caller ID to the person we are transferring the call to Or the current phone number."},"secondsToWaitForCallerToAnswer":{"type":"number","minimum":0,"maximum":60,"description":"The number of seconds to wait for the caller to answer the call."},"availableTransferDestinations":{"type":"array","items":{"type":"object","properties":{"destinationType":{"type":"string","enum":["UserEndpoint","UserGroup","External","Agent"],"description":"Kind of destination — UserEndpoint, UserGroup, External, or Agent."},"destinationId":{"type":"string","minLength":1,"maxLength":100,"description":"Target id (UserEndpoint id, UserGroup id, Agent id) or for External the phone number to dial."},"mode":{"type":"string","enum":["inherit","refer","attended"],"description":"Per-destination dispatch override: `refer` (blind, send SIP REFER), `attended` (place outbound INVITE, bridge on pickup), or `inherit` (use the agent-level blindTransfer flag). Omitted is treated as `inherit`. Internal AGENT destinations ignore this field — they always go through the agent-handoff path once it ships."},"reasonToConnect":{"type":"string","maxLength":500,"description":"When to connect the caller to this destination (e.g. \"when they ask for Dimitris\"). Injected into the live-call transfer catalog."}},"required":["destinationType","destinationId"],"description":"Whitelisted transfer destination available to this agent."},"maxItems":200,"description":"Explicit whitelist of destinations this agent may transfer to. Ignored when allowAllAvailableDestinations is true."},"allowAllAvailableDestinations":{"type":"boolean","description":"When true the agent may transfer a phone call to any enabled UserEndpoint or UserGroup (ringing that user's devices when they have SIP / app / mobile). Chat handoff uses company users. When false, only entries in availableTransferDestinations are offered."},"transferToExternalNumbers":{"type":"boolean","description":"When true the agent may transfer to external phone numbers."},"transferTimeLimitEnabled":{"type":"boolean","description":"Enable automatic transfer after the call reaches the configured time limit."},"transferTimeLimitInSeconds":{"type":"number","minimum":1,"description":"Call duration in seconds after which the agent automatically transfers the call (e.g. 120 for 2 minutes)."},"transferTimeLimitPrompt":{"type":"string","description":"Routing instructions for the automatic time-limit transfer: the destination (phone number, extension or agent ID) and what to tell the caller. Used with connect_dynamically when the time limit is reached."},"maxTransferAttemptsPerCall":{"type":"integer","minimum":1,"maximum":20,"nullable":true,"description":"Opt-in cap on transfer attempts in one call. Once reached, further transfers are refused and the agent takes a message. Unset = unlimited."}},"description":"Configuration for transfer settings","example":{"enabled":true,"announceTransferReason":false,"analyzeTransferredCall":false,"agentIdToAnalyzeTransferredCall":"","transferCallBasedOnPromptInstructions":false,"promptForTransferReason":"Forward to 100 for accounting. For sales, forward to 101. For support, forward to 102.","transferMode":"warm","showCallerId":false,"secondsToWaitForCallerToAnswer":40,"allowAllAvailableDestinations":false,"availableTransferDestinations":[],"transferToExternalNumbers":true}},"enableCallBackAtRequestedTime":{"type":"boolean","description":"Whether to enable callback functionality when users request to be called back at a later date/time"},"callBackIfCallDropsPrompt":{"type":"string","description":"Custom prompt to use when initiating a callback if the call drops"},"skroutzSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether Skroutz is enabled"},"topNSkroutzProductsInPrompt":{"type":"number","description":"Number of Skroutz products to include in the prompt"},"nSkroutzProductsQuery":{"type":"number","description":"Number of Skroutz products to query"},"minProductCodeLength":{"type":"integer","minimum":1,"maximum":20,"description":"Minimum normalized digit length for an utterance to be treated as a product code in the autonomous Skroutz lookup. Defaults to 4 when unset."},"webhookUrl":{"type":"string","format":"uri","description":"Webhook URL to send Skroutz products to"},"webhookHeaders":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The key of the webhook header"},"value":{"type":"string","description":"The value of the webhook header"}},"required":["key","value"]},"description":"Webhook headers to send with the Skroutz products data"}},"required":["enabled","topNSkroutzProductsInPrompt","nSkroutzProductsQuery"],"description":"Configuration for Skroutz settings","example":{"enabled":true,"topNSkroutzProductsInPrompt":3,"nSkroutzProductsQuery":5,"webhookUrl":"https://webhook.site/123e4567-e89b-12d3-a456-426614174000","webhookHeaders":[{"key":"Content-Type","value":"application/json"}]}},"voiceMailPhoneNumber":{"type":"string","description":"Phone numbers to attach voice mail to"},"voipConnections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for the VoIP connection"},"dial":{"type":"number","description":"Dial number or extension assigned to this connection"},"reason":{"type":"string","description":"Internal notes or purpose description for this connection"},"connectionType":{"type":"string","enum":["User","External","Agent"],"description":"Type of destination: 'Agent', 'User', or 'External'"},"agentId":{"type":"string","description":"ID of the AI agent this connection routes to (only for Agent type connections)"},"sipDomain":{"type":"string","description":"SIP domain for this connection."},"phone":{"type":"string","description":"External phone number this connection forwards to (only for External type connections)"},"userId":{"type":"string","description":"ID of the user this connection routes to (only for User type connections)"},"start":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily start time when this connection becomes available"},"end":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily end time when this connection becomes unavailable"},"canAgentTranscribe":{"type":"boolean","description":"Whether the agent can transcribe calls to this connection"},"canAgentRecord":{"type":"boolean","description":"Whether the agent can record calls to this connection"},"canAgentAnalyze":{"type":"boolean","description":"Whether the agent can analyze calls to this connection"},"canAgentSpeakWhenAsked":{"type":"boolean","description":"Whether the agent can speak when asked during calls to this connection"},"allDay":{"type":"boolean","description":"Whether this connection is available 24/7 (ignores start/end times when true)"},"syncWithGoogle":{"type":"boolean","description":"Whether availability is synchronized with Google Calendar"},"syncWithGoogleStatus":{"type":"string","enum":["open","closed"],"description":"Google Calendar sync mode: 'open' for free time availability, 'closed' for busy time unavailability"},"messageToUser":{"type":"string","description":"Custom message or announcement played before transferring calls to this connection"},"aiGeneratedMessage":{"type":"boolean","description":"Whether transfer messages are dynamically generated by AI based on call context"},"transcription_enabled":{"type":"boolean","description":"Whether real-time transcription is enabled for calls on this connection"},"agent":{"type":"object","properties":{"id":{"type":"string","description":"Agent's unique identifier"},"name":{"type":"string","description":"Agent's display name"}},"description":"Full agent details when connectionType is 'Agent' (populated from agents database)"},"user":{"type":"object","properties":{"id":{"type":"string","description":"User's unique identifier"},"name":{"type":"string","description":"User's full name"},"email":{"type":"string","description":"User's email address"},"defaultCompanyId":{"type":"string","description":"User's default company ID"},"picture":{"type":"string","description":"User's profile picture URL"},"emailVerified":{"type":"boolean","description":"Whether the user's email has been verified"},"lastConnectedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"isConnected":{"type":"boolean","description":"Whether the user is currently online/connected"}},"description":"Full user details when connectionType is 'User' (populated from users database)"},"username":{"type":"string","description":"SIP username for direct authentication (advanced configurations only)"},"password":{"type":"string","description":"SIP password for direct authentication (advanced configurations only)"},"ipAddress":{"type":"array","items":{"type":"string"},"description":"Whitelist of allowed IP addresses for security restrictions"},"extensionRegistrationIds":{"type":"array","items":{"type":"string"},"description":"IDs of the extension registrations linked with this connection"},"extensionRegistrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"voipConnectionId":{"type":"string","description":"ID of the VoIP Connection that owns this extension (legacy)"},"phoneExtensionId":{"type":"string","description":"ID of the Phone Extension that owns this extension"},"username":{"type":"string","description":"SIP username/extension that is registered"},"contactUri":{"type":"string","description":"Full SIP Contact URI for routing calls to this extension"},"remoteAddress":{"type":"string","description":"IP address of the registered SIP client"},"clientIp":{"type":"string","description":"Public client IP when known"},"remotePort":{"type":"number","description":"Port number of the registered SIP client"},"transport":{"type":"string","enum":["udp","tcp","tls","websocket"],"description":"Transport protocol: 'udp', 'tcp', 'tls' for SIP; 'websocket' for app clients"},"registeredAt":{"type":"string","format":"date-time","description":"Timestamp when this extension was registered (ISO 8601 format)"},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp when this registration will expire (ISO 8601 format)"},"expires":{"type":"number","description":"Number of seconds until expiration (decreases over time)"},"userAgent":{"type":"string","description":"SIP User-Agent identifying the client software"},"callId":{"type":"string","description":"SIP Call-ID from the REGISTER request"},"bindingSource":{"type":"string","enum":["register","invite"],"description":"'register' = the phone sent a REGISTER and can be rung; 'invite' = stand-in written from an authenticated outbound INVITE, used only for that call's in-dialog requests and never for ringing the phone"},"consecutiveInviteFailures":{"type":"integer","description":"Liveness skip-list counter. Bumped on 5xx/timeout from fork-INVITEs, reset on 200 OK. When ≥3 and `lastInviteFailureAt` is within the last 5 minutes, the registration is skipped by routing."},"lastInviteFailureAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"voipConnection":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"agentId":{"type":"string"},"userId":{"type":"string"},"connectionType":{"type":"string"}},"description":"Legacy VoIP Connection — only populated for pre-migration rows."},"userEndpoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"number":{"type":"string"},"status":{"type":"string"}},"description":"Populated UserEndpoint this registration belongs to."}},"required":["id","createdAt","active","createdBy","createdById","companyId","username","contactUri","remoteAddress","remotePort","transport","registeredAt","expiresAt","expires"],"description":"Extension registration details including contact information and expiration status","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","voipConnectionId":"507f1f77bcf86cd799439011","username":"1001","contactUri":"sip:1001@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300,"userAgent":"Zoiper 5.5.10","callId":"abc123@192.168.1.100","voipConnection":{"id":"507f1f77bcf86cd799439011","name":"Customer Support","agentId":"507f1f77bcf86cd799439012","connectionType":"Agent"}}},"description":"Active SIP device registrations for this connection (virtual populate from ExtensionRegistration collection, filtered to show only non-expired registrations). Each entry represents a physical device (phone, softphone, etc.) currently registered with this extension."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","connectionType","syncWithGoogle","syncWithGoogleStatus"],"description":"Response schema for VoIP connection including complete configuration, company metadata, and linked agent or user details","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support","dial":1,"reason":"General customer support inquiries","connectionType":"Agent","agentId":"507f1f77bcf86cd799439011","phone":"+1234567890","userId":"507f1f77bcf86cd799439012","start":{"hours":9,"minutes":0},"end":{"hours":17,"minutes":0},"canAgentTranscribe":true,"canAgentRecord":true,"canAgentAnalyze":true,"canAgentSpeakWhenAsked":false,"allDay":false,"syncWithGoogle":true,"syncWithGoogleStatus":"open","messageToUser":"Welcome to customer support!","aiGeneratedMessage":false,"agent":{"id":"507f1f77bcf86cd799439011","name":"John Doe","email":"john@example.com"},"user":{"id":"507f1f77bcf86cd799439012","name":"Jane Smith","email":"jane@example.com"},"registrations":[{"id":"507f1f77bcf86cd799439013","username":"customer_support","contactUri":"sip:customer_support@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300}]}},"description":"@deprecated Legacy populated VoIP connections. Use transferSettings.availableTransferDestinations + SipTrunk / UserEndpoint / UserGroup."},"adaptationPhraseSets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the adaptation phrase set"},"description":{"type":"string","nullable":true,"description":"The description of the phrase set"},"phraseSetId":{"type":"string","description":"The phrase set id"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Locale code"},"phrases":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Phrase value"},"boost":{"type":"number","minimum":1,"maximum":20,"description":"Boost value (1-20)"}},"required":["value","boost"]},"nullable":true,"description":"The phrases of the set"},"boost":{"type":"number","minimum":1,"maximum":20,"nullable":true,"description":"Boost value (1-20)"},"apiEnabled":{"type":"boolean","nullable":true,"description":"Whether API is enabled"},"apiUrl":{"type":"string","nullable":true,"description":"API URL"},"apiKey":{"type":"string","nullable":true,"description":"API key"},"lastPulledAt":{"type":"string","format":"date-time","description":"The last pulled at date of the phrase set","nullable":true}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","phraseSetId","language"],"description":"Response schema for adaptation phrase set including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Greetings","description":"Common customer greeting phrases","phraseSetId":"greetings_001","language":"en-US","phrases":[{"value":"Hello","boost":5},{"value":"Hi there","boost":3},{"value":"Good morning","boost":4}],"boost":5,"apiEnabled":true,"apiUrl":"https://api.example.com/phrases","apiKey":"api_key_123","lastPulledAt":"2024-01-15T10:30:00.000Z"}},"description":"List of adaptation phrase sets for improving transcription accuracy"},"afterCallFunctionCalls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"description":{"type":"string","description":"Description of the function call"},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"description":"Condition blocks for execution logic"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"],"description":"When to execute the function call"},"confirmationMethodConfig":{"type":"object","properties":{"confirmationRequired":{"type":"boolean"},"secondsToWait":{"type":"number","minimum":10},"wordMatch":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"array","items":{"type":"string"}}},"required":["required","value"]},"aiGuidance":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]},"dtmf":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]}},"required":["confirmationRequired","secondsToWait"],"description":"Configuration for user confirmation"},"messageToUserBeforeAction":{"type":"string","description":"Message to show user before executing the action"},"messageToUserAfterAction":{"type":"string","description":"Message to show user after executing the action"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"functions":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"number"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"]},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"action":{"type":"string","enum":["emailConfig","apiCall","sendSms","createEvent","sendPhoneCall","forwardCall","googleSearch","sendMessage","endCallConfig","googleSheetConfig","googleDocConfig","llmCompletion","hubspotConfig","aiResponse","transferCall","afmSearch","codeExecution"]},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}},"forwardCallConfig":{"type":"object","properties":{"voipConnectionId":{"type":"string","minLength":24}},"required":["voipConnectionId"],"example":{"voipConnectionId":"507f1f77bcf86cd799439011"}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}},"sendMessageConfig":{"type":"object","properties":{"messageToUser":{"type":"string","minLength":1}},"required":["messageToUser"],"example":{"messageToUser":"Your order has been shipped!"}},"endCallConfig":{"type":"object","properties":{"reason":{"type":"string","minLength":2}},"required":["reason"],"example":{"reason":"User requested to end the call"}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["sequence","action"]},"description":"Internal actions to execute"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","parameters","functions"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Send Email Notification","description":"Sends an email notification to the user","conditionBlocks":[],"executeAt":"immediate","messageToUserBeforeAction":"I will send you an email notification.","messageToUserAfterAction":"Email notification sent successfully!","fileIds":["file_123","file_456"],"files":[{"id":"file_123","filename":"document.pdf","s3Id":"s3-file-123","displayUrl":"https://example.com/files/document.pdf"}],"parameters":[{"id":"param_1","name":"Email Address","description":"Recipient email address","type":"string","required":true}],"functions":[{"id":"func_1","name":"Send Email","type":"email","config":{"to":"{{emailAddress}}","subject":"Notification","body":"This is a notification email."}}]}},"description":"List of function calls that are executed after the call ends"},"transferHoldSoundFile":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}}},"description":"Response schema for agent phone settings including related data","example":{"model":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0.5,"maxCompletionTokens":500},"systemPrompt":"You are a helpful customer support assistant.","voiceConfig":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","speed":1,"backgroundSound":"none","stability":0.5,"similarity":0.5},"voipConnections":[{"id":"voip-123","name":"Main Office Line","provider":"Twilio","phoneNumber":"+1234567890"}],"adaptationPhraseSets":[{"id":"aps-123","name":"Customer Service Phrases","phrases":["customer service","support","help"]}],"transcriptionConfig":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"adaptationPhraseSets":[{"id":"aps-123","name":"Customer Service Phrases","phrases":["customer service","support","help"]}]},"skroutzSettings":{"enabled":true,"topNSkroutzProductsInPrompt":3,"nSkroutzProductsQuery":5,"webhookUrl":"https://webhook.site/123e4567-e89b-12d3-a456-426614174000","webhookHeaders":[{"key":"Content-Type","value":"application/json"}]},"transferSettings":{"announceTransferReason":false,"transferCallBasedOnPromptInstructions":false,"promptForTransferReason":"Forward to 100 for accounting. For sales, forward to 101. For support, forward to 102.","transferMode":"warm","showCallerId":false},"transferHoldSound":"custom","transferHoldSoundFileId":"file-123","transferHoldSoundFile":{"id":"file-123","name":"Human Laugh 1","contentType":"audio/wav","size":1024000}}},"appointmentSettings":{"type":"object","properties":{"enabled":{"type":"boolean","nullable":true,"description":"Whether the appointment settings are enabled"},"isOnline":{"type":"boolean","nullable":true,"description":"Whether the appointment settings are online"},"services":{"type":"array","items":{"type":"object","properties":{"serviceKey":{"type":"string","description":"Stable internal identity for this service; calendars reference it so renames are safe"},"name":{"type":"string","description":"The name of the service"},"description":{"type":"string","description":"The description of the service"},"duration":{"type":"number","description":"The duration of the service in minutes"},"allowedMeetingTypes":{"type":"array","items":{"type":"string","enum":["online","phone","client-location","office-location"]},"description":"How this service can be delivered. `online`: video (e.g. Google Meet). `phone`: voice call only. `client-location`: at an address the caller provides (use location lookup tool). `office-location`: at the provider’s office; set `officeAddress` on the service (or on the matching working-hours row). Omit or `[]` when not set. Used when a working-hours row is `not-set` to decide Meet / location / office."},"officeAddress":{"type":"string","description":"Provider’s office address when `office-location` is in allowedMeetingTypes. Shown to the user for office bookings; working-hours rows may override with their own officeAddress."},"colorId":{"oneOf":[{"type":"string","enum":["1","2","3","4","5","6","7","8","9","10","11"]},{"type":"string","enum":[""]}],"description":"Google Calendar event color ID as a string, \"1\"–\"11\". Omit or \"\" for the default calendar color."}},"required":["name","description","duration","allowedMeetingTypes","colorId"]},"description":"The services of the appointment settings"},"concurrentBookings":{"type":"number","description":"The number of concurrent bookings"},"useGlobalConcurrentBookings":{"type":"string","enum":["not-set","true"],"description":"Use the global concurrentBookings for all calendars (true) or per-calendar concurrentBookings (not-set)"},"allDayBookings":{"type":"boolean","description":"Whether the appointment settings are enabled for all day bookings"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"The parameters of the appointment settings"},"canSameClientBookMultipleAppointmentsInFuture":{"type":"string","enum":["not-set","true","false"],"description":"Whether the same client can book multiple appointments in the future"},"canClientCancelAppointmentWithAi":{"type":"string","enum":["not-set","true","false"],"description":"Whether the client can cancel the appointment with AI"},"futureDaysAllowToBook":{"type":"string","enum":["not-set","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","21","30","45","60","90","120","180","365"],"description":"The number of days in advance that the appointment can be booked"},"sendConfirmation":{"type":"boolean","description":"Whether the confirmation is sent"},"confirmationPrompt":{"type":"string","description":"The confirmation prompt for the appointment"},"confirmationSmsSenderId":{"type":"string","description":"Sender shown on the confirmation SMS (a verified Yuboto sender ID). Empty falls back to the send_sms tool sender, then to VoiceLogica."},"appointmentDescriptionContents":{"type":"array","items":{"type":"string","enum":["questions","services","notes","location","call_url","summary","recording_url"]},"description":"Blocks included in the calendar event description: questions, services, notes, location, call_url, summary, recording_url. Omit for the default set (questions, notes, location, summary)"},"calendars":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the calendar"},"calendarKey":{"type":"string","description":"Stable internal identity for this calendar; allows several calendars to share one Google calendarId"},"calendarId":{"type":"string","description":"The provider calendar ID this calendar reads/writes (Google or Azure/Outlook; may be shared across calendars)"},"provider":{"type":"string","enum":["google","azure"],"description":"Calendar backend for this calendar: 'google' or 'azure' (Microsoft 365). Omit to use the company default."},"description":{"type":"string","description":"The description of the calendar"},"serviceKeys":{"type":"array","items":{"type":"string"},"description":"The serviceKeys of the services of the calendar"},"serviceNames":{"type":"array","items":{"type":"string"},"description":"Legacy name-based service reference; kept for calendars saved before serviceKeys existed"},"futureDaysAllowToBook":{"type":"number","minimum":1,"maximum":365,"description":"The number of days in advance that the appointment can be booked"},"concurrentBookings":{"type":"number","description":"Per-calendar concurrent bookings; omit or 0 to inherit the agent-level default"},"countAllCalendarEventsForConcurrency":{"type":"boolean","description":"Advanced: count every Voice Logica booking on the same Google calendar toward concurrency, whichever logical calendar made it (ignore service names). Use it when several logical calendars share one Google calendar. Default is service-name concurrency."},"restrictions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["max_per_hour","max_per_day","max_per_week","min_gap_minutes","min_notice_hours","min_notice_business_days","min_notice_calendar_days"],"description":"max_per_hour | max_per_day | max_per_week | min_gap_minutes (minimum free gap between appointments) | min_notice_hours (earliest bookable slot is this many hours from now) | min_notice_business_days (this many full company operating days of notice after today; today never counts; every calendar uses that same date, falling back to the union of calendar working days when the company has no hours) | min_notice_calendar_days (same, counting every day including closed ones)"},"limit":{"type":"number","minimum":1,"description":"Cap for max_* types, gap in minutes for min_gap_minutes, lead-time hours for min_notice_hours, or number of days for the min_notice_*_days types (days of notice after today, so 2 on a Wednesday makes Friday the earliest bookable day)"},"serviceNames":{"type":"array","items":{"type":"string"},"description":"When set, restriction applies only to these service names; omit for all services on the calendar"},"enabled":{"type":"boolean","description":"When false, restriction is ignored. Default true."}},"required":["type","limit"]},"description":"Optional booking restrictions: max per hour/day/week, minimum gap between appointments, or minimum notice (hours or operating days) before the start"},"appointmentTitle":{"type":"string","description":"The title of the appointment"},"appointmentNotes":{"type":"string","description":"The notes of the appointment"},"canClientCancelAppointmentWithAi":{"type":"boolean","description":"Whether the client can cancel the appointment with AI"},"canSameClientBookMultipleAppointmentsInFuture":{"type":"boolean","description":"Whether the same client can book multiple appointments in the future"},"workingHours":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Day of the week"},"meetingType":{"type":"string","enum":["online","phone","client-location","office-location","not-set"],"default":"not-set","description":"Modality for this time window: online (Meet), phone, client-location, or office-location. `not-set` = inherit Meet / location / office behaviour from each booked service’s allowedMeetingTypes."},"officeAddress":{"type":"string","description":"Physical office for this window when it includes office-location; overrides service.officeAddress if both are set."},"startTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"Start time for bookings in this window (local calendar day)"},"endTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"End time for bookings in this window (local calendar day)"}},"required":["day","startTime","endTime"]},"description":"Per-calendar bookable windows. Same `day` may appear multiple times for split schedules (e.g. Fri morning office, Fri afternoon client site)."}},"required":["name","calendarId","description","serviceNames","futureDaysAllowToBook"]},"description":"Array of calendar IDs that the appointment settings are enabled for"},"useGlobalWorkingHours":{"type":"string","enum":["not-set","true"],"description":"Use global working hours for all calendars (true) or per-calendar working hours (not-set)"},"workingHours":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Day of the week"},"meetingType":{"type":"string","enum":["online","phone","client-location","office-location","not-set"],"default":"not-set","description":"Modality for this time window: online (Meet), phone, client-location, or office-location. `not-set` = inherit Meet / location / office behaviour from each booked service’s allowedMeetingTypes."},"officeAddress":{"type":"string","description":"Physical office for this window when it includes office-location; overrides service.officeAddress if both are set."},"startTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"Start time for bookings in this window (local calendar day)"},"endTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"End time for bookings in this window (local calendar day)"}},"required":["day","startTime","endTime"]},"description":"Global bookable windows when useGlobalWorkingHours is true. Same weekday may repeat with different times and meetingType (e.g. Fri morning office, Fri afternoon client site)."},"reminderSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the reminder is enabled"},"daysBefore":{"type":"number","description":"The number of days before the appointment to send the reminder"},"time":{"type":"string","description":"The time of the day to send the reminder"},"type":{"type":"string","enum":["email","sms","phone"],"description":"The type of reminder"},"numberOfRetries":{"type":"number","description":"The number of retries for the reminder"},"sendFallbackSms":{"type":"boolean","description":"Whether the fallback SMS is sent"},"fallbackSms":{"type":"string","description":"The fallback SMS message for the appointment"}},"required":["enabled","daysBefore","time","type","numberOfRetries","sendFallbackSms","fallbackSms"],"description":"The reminder settings for the appointment"},"waitingListEnabled":{"type":"boolean","description":"Whether the waiting list is enabled"},"waitingListSettings":{"type":"object","properties":{"candidateDays":{"type":"number","minimum":1,"maximum":365,"description":"How far ahead to look for people to call about a freed slot. Defaults to 30 days; without it the search follows futureDaysAllowToBook, which can be a full year."},"callFromHour":{"type":"string","description":"Earliest local time to place a waiting-list call, HH:MM. Default 09:00."},"callToHour":{"type":"string","description":"Latest local time to place a waiting-list call, HH:MM. Default 20:00."}},"description":"Bounds on who the waiting list calls, and when"}},"required":["sendConfirmation"]},"widgetSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the embeddable widget is enabled for this agent"},"allowedDomains":{"type":"array","items":{"type":"string"},"description":"Hostnames allowed to embed this widget. Empty = allow all."},"allowWwwVariant":{"type":"boolean","description":"Also allow www. variant of each allowed domain"},"actionsRequireVerification":{"type":"boolean","description":"Unverified visitors get a questions-only agent: tools that send messages or touch external systems load only after email/mobile/Google verification"},"collectFields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$","description":"Dynamic variable key used in prompts as {{key}}"},"label":{"type":"string","minLength":1,"maxLength":120,"description":"Label shown to the visitor"},"placeholder":{"type":"string","maxLength":200},"type":{"type":"string","enum":["text","email","tel","number","location","files"],"description":"Input type"},"required":{"type":"boolean"}},"required":["key","label"]},"maxItems":20,"description":"Dynamic fields to ask visitors before starting (name, client_id, …). Email is widgetSettings.email."},"email":{"type":"object","properties":{"required":{"type":"boolean"},"validation":{"type":"boolean"}},"description":"Require a visitor email; optional 6-digit email validation"},"phone":{"type":"object","properties":{"required":{"type":"boolean"},"validation":{"type":"boolean"}},"description":"Require a visitor mobile; optional SMS code (Greece/Cyprus only)"},"feedback":{"type":"object","properties":{"mode":{"type":"string","enum":["none","end"]},"collectComment":{"type":"boolean"}},"description":"Legacy, always 'none'. The end-of-chat rating (Good/Bad + optional comment) is set on the evaluate_conversation tool, not here: update_agent_settings with section 'tools' and changes { name: 'evaluate_conversation', enabled: true, channels: ['widget'], collectComment: true }."},"interface":{"type":"object","properties":{"startsCollapsed":{"type":"boolean"},"languageDropdown":{"type":"boolean"},"enableMuting":{"type":"boolean"},"markdownAllowedDomains":{"type":"array","items":{"type":"string"},"description":"Hostnames whose links in agent replies are clickable, e.g. [\"example.com\", \"hihello.com\"]. Exact host match (plus www. when allowWwwVariantForMarkdown). Empty = no link is clickable; other links show struck through."},"allowWwwVariantForMarkdown":{"type":"boolean","description":"Also accept the www. variant of each markdownAllowedDomains entry. Default true."},"allowHttpLinks":{"type":"boolean","description":"Also allow plain http:// (not https) links on markdownAllowedDomains. Does not make any link clickable by itself."},"acceptFiles":{"type":"boolean"},"acceptLocation":{"type":"boolean"},"pageContext":{"type":"boolean","description":"Tell the agent which page the visitor is on (address without query string, title, description, main heading), at start and whenever they move to another page. Default false."},"inactivityMinutes":{"type":"number","minimum":1,"maximum":30}}},"avatar":{"type":"object","properties":{"type":{"type":"string","enum":["orb","link","image"]},"firstColor":{"type":"string"},"secondColor":{"type":"string"},"linkUrl":{"type":"string"},"imageUrl":{"type":"string"},"imageFileId":{"type":"string"}}},"terms":{"type":"object","properties":{"required":{"type":"boolean"},"termsText":{"type":"string"}}},"styling":{"type":"object","properties":{"variant":{"type":"string","enum":["tiny","compact","full"]},"placement":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left"]},"base":{"type":"string"},"baseHover":{"type":"string"},"baseActive":{"type":"string"},"baseBorder":{"type":"string"},"baseSubtle":{"type":"string"},"basePrimary":{"type":"string"},"baseError":{"type":"string"},"accent":{"type":"string"},"accentHover":{"type":"string"},"accentActive":{"type":"string"},"accentBorder":{"type":"string"},"accentSubtle":{"type":"string"},"accentPrimary":{"type":"string"},"overlayPadding":{"type":"number"},"buttonRadius":{"type":"number"},"inputRadius":{"type":"number"},"bubbleRadius":{"type":"number"},"sheetRadius":{"type":"number"},"compactSheetRadius":{"type":"number"},"dropdownSheetRadius":{"type":"number"},"syntaxTheme":{"type":"string","enum":["auto","light","dark"]},"offsetX":{"type":"number","minimum":0,"maximum":400,"description":"Desktop gap from the left/right edge in px (default: overlayPadding)"},"offsetY":{"type":"number","minimum":0,"maximum":400,"description":"Desktop gap from the top/bottom edge in px (default: overlayPadding)"},"mobileOffsetX":{"type":"number","minimum":0,"maximum":400,"description":"Phones (≤767px): gap from the left/right edge in px (default: the desktop gap)"},"mobileOffsetY":{"type":"number","minimum":0,"maximum":400,"description":"Phones (≤767px): gap from the top/bottom edge in px, e.g. 90 to clear a fixed \"Book now\" bar (default: the desktop gap)"},"mobilePlacement":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left"],"description":"Phones (≤767px): another corner than placement (default: placement)"}}},"text":{"type":"object","properties":{"main_label":{"type":"string"},"start_call":{"type":"string"},"start_chat":{"type":"string"},"new_call":{"type":"string"},"end_call":{"type":"string"},"end_chat":{"type":"string"},"mute_microphone":{"type":"string"},"change_language":{"type":"string"},"collapse":{"type":"string"},"expand":{"type":"string"},"copied":{"type":"string"},"accept_terms":{"type":"string"},"dismiss_terms":{"type":"string"},"collect_title":{"type":"string"},"collect_continue":{"type":"string"},"listening_status":{"type":"string"},"speaking_status":{"type":"string"},"connecting_status":{"type":"string"},"chatting_status":{"type":"string"},"input_label":{"type":"string"},"input_placeholder":{"type":"string"},"input_placeholder_text_only":{"type":"string"},"input_placeholder_new_conversation":{"type":"string"},"user_ended_conversation":{"type":"string"},"agent_ended_conversation":{"type":"string"},"conversation_id":{"type":"string"},"error_occurred":{"type":"string"},"copy_id":{"type":"string"},"initiate_feedback":{"type":"string"},"request_follow_up_feedback":{"type":"string"},"thanks_for_feedback":{"type":"string"},"thanks_for_feedback_details":{"type":"string"},"follow_up_feedback_placeholder":{"type":"string"},"submit":{"type":"string"},"go_back":{"type":"string"},"send_message":{"type":"string"},"text_mode":{"type":"string"},"voice_mode":{"type":"string"},"switched_to_text_mode":{"type":"string"},"switched_to_voice_mode":{"type":"string"},"copy":{"type":"string"},"download":{"type":"string"},"wrap":{"type":"string"},"agent_working":{"type":"string"},"agent_done":{"type":"string"},"agent_error":{"type":"string"},"attach_file":{"type":"string"},"remove_file":{"type":"string"},"file_upload_error":{"type":"string"},"file_type_unsupported":{"type":"string"},"file_too_large":{"type":"string"},"file_limit_reached":{"type":"string"},"share_location":{"type":"string"},"locating":{"type":"string"},"location_ready":{"type":"string"},"location_denied":{"type":"string"},"files_hint":{"type":"string"},"uploading_files":{"type":"string"},"typing_indicator":{"type":"string"},"start_chat_hint":{"type":"string"},"start_chat_hint_files":{"type":"string"},"start_call_hint":{"type":"string"},"preview_agent":{"type":"string"},"preview_visitor":{"type":"string"},"collect_hint_chat":{"type":"string"},"collect_hint_call":{"type":"string"},"terms_title":{"type":"string"},"try_again":{"type":"string"},"show_transcript":{"type":"string"},"hide_transcript":{"type":"string"},"unmute_microphone":{"type":"string"},"microphone_muted":{"type":"string"},"conversation_ended":{"type":"string"},"call_ended":{"type":"string"},"teammate_joined":{"type":"string"},"teammate_joined_hint":{"type":"string"},"team_member":{"type":"string"},"duration":{"type":"string"},"messages":{"type":"string"},"feedback_good":{"type":"string"},"feedback_bad":{"type":"string"}}},"shareablePage":{"type":"object","properties":{"description":{"type":"string"},"requireTerms":{"type":"boolean"}}},"pageNavigation":{"type":"object","properties":{"enabled":{"type":"boolean","description":"The widget AI may open pages of this website for the visitor (text chat only). Only the page's own site and allowedDomains; the visitor sees \"Taking you to …\" and can cancel. Default false."},"listedPagesOnly":{"type":"boolean","description":"When pages are listed, the AI may open only those addresses (any query string). Default true. Ignored while the list is empty."},"instructions":{"type":"string","maxLength":1000,"description":"Extra instructions for the AI about opening pages"},"pages":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","maxLength":500,"description":"The page: a path on the site (\"/el/crete\") or an absolute https address on it"},"name":{"type":"string","maxLength":120,"description":"What the page is, e.g. \"Hotels in Crete\""},"description":{"type":"string","maxLength":150,"description":"Optional: when to open it, e.g. \"all our Cretan hotels, filter by town\""}},"required":["url","name"]},"maxItems":200,"description":"Pages the AI can open, with a name and an optional description (import them from the sitemap in the app)"}},"description":"The AI opens pages of this website for the visitor (text chat only)"}}},"tools":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"name":{"type":"string","enum":["skip_turn","send_sms","send_email","eshop_integration","hubspot","zoho","salesforce","navigate_ivr","schedule_callback","detect_live_sentiment","detect_live_frustration","schedule_appointment","handle_silence","lock_on_speaker","galaxy_drugstore","galaxy_erp","soft1_erp","entersoft_one","odoo_erp","pylon_erp","sap_erp","splynx","shopify","woocommerce","opencart","magento","megasoft","gonnaorder","prestashop","airtable","jira","guesty","clickup","trello","dropbox","googleChat","zoho_crm","helpdesk","courier","outlook","detect_voice_mail","add_participant","make_call_private","pause_recording","request_data_erasure","send_info_page","capture_data_via_sms","compare_caller_to_branches","find_location_info","evaluate_conversation","extract_document","scrape_website","fleet_management","caller_verification","custom_api","webhotelier","hosthub","exelixis_smart"]},"prompt":{"type":"string"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"Play keyboard wait music while this tool runs mid-call"},"senderId":{"type":"string"},"mailboxId":{"type":"string"},"propertyCode":{"type":"string"},"url":{"type":"string","format":"uri"},"interval":{"type":"number","minimum":10,"maximum":10080},"vectorField":{"type":"string"},"aiEnabled":{"type":"boolean"},"keyOfId":{"type":"string","enum":["mpn","ean","sku","skroutzId","groupCode","none"]},"deltaCapable":{"type":"boolean"},"lastSyncAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastFullSyncAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"feedEtag":{"type":"string"},"feedLastModified":{"type":"string"},"timesFailed":{"type":"number"},"readContactProperties":{"type":"array","items":{"type":"string"}},"updateContactProperties":{"type":"array","items":{"type":"string"}},"createCallActivity":{"type":"boolean"},"nudgeIntervalSeconds":{"type":"number","minimum":0,"maximum":60},"timesToNudge":{"type":"number","minimum":1,"maximum":3},"actions":{"type":"array","items":{"type":"string","enum":["forward","hangup"]}},"allowMultipleSpeakers":{"type":"boolean"},"leaveMessage":{"type":"boolean"},"maxDurationSeconds":{"type":"number","minimum":5,"maximum":120},"words":{"type":"array","items":{"type":"string"}},"timeoutSeconds":{"type":"number","minimum":0,"maximum":10},"maxSkips":{"type":"integer","minimum":0,"maximum":20},"enabledOperations":{"type":"array","items":{"oneOf":[{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","check_item_availability","get_item_price","calculate_order","place_order","get_order_status","get_customer_history","get_customer_balance","get_customer_aging","get_customer_kartela_link","find_items_by_active_ingredient","get_invoice_pdf_links","get_next_route","get_customer_top_items","get_top_selling_items","get_customer_fin_info_per_drug_type"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_item_by_id","create_sales_doc","get_sales_doc_by_id"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_balance","get_customer_aging","get_customer_history","get_customer_orders","get_customer_top_items","get_top_selling_items","create_order","create_invoice","create_delivery_note","create_receipt","update_order","update_invoice","update_delivery_note","update_receipt","add_order_line","remove_order_line","adjust_order_quantity","set_order_transfer","log_call","create_meeting","create_task","search_activities","list_projects","create_project","list_project_actions","create_customer","add_customer_phone","remove_customer_phone","get_order_by_key","create_sales_doc","update_sales_doc","transmit_einvoice"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_purchase_history","get_customer_branches","get_customer_balance","add_order_line","remove_order_line","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_products","get_customer_orders","get_order","get_customer_balance","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_login","lookup_customer_by_name","link_caller_to_customer","get_customer_balance","get_services","get_invoices","get_online_status","create_ticket","set_customer_status"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_balance","get_customer_aging","run_public_query","run_ebs_service","create_sales_doc"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order","create_draft_order","sync_products_to_skroutz"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","create_order"]},{"type":"string","enum":["lookup_customer","check_availability","create_order","get_order","list_customer_orders"]},{"type":"string","enum":["get_contact","list_company_contacts","list_support_members","get_order","list_customer_orders","create_ticket","search_items","create_order","send_statement","get_balance"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_name","link_caller_to_customer","lookup_customer_by_afm","verify_customer","get_customer_by_code","get_customer_balance","search_products","get_product_by_code","list_shipping_methods","list_payment_methods","get_customer_orders","get_order_status","get_customer_purchases","list_offers","get_item_price","get_product_stock","get_alt_items","cancel_order","create_order"]},{"type":"string","enum":["search_catalog","get_offer","check_delivery_address","lookup_customer_by_phone","lookup_customer_by_name","link_caller_to_customer","get_customer_orders","list_time_slots","create_order","validate_location","get_order_status","create_payment_link","check_payment_status","create_reservation"]},{"type":"string","enum":["check_availability","search_bookings","get_reservation","get_property_info","create_booking","cancel_booking","get_rooms","get_rates","get_extras","get_availability_calendar","get_best_rate","search_offers","resend_confirmation","check_multi_property_availability","search_properties"]},{"type":"string","enum":["identify_caller","search_reservations","get_reservation","list_rentals","get_rental","check_availability"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_order_states","create_order","update_order_status"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_email","get_contact_by_id","lookup_contact_by_name","link_caller_to_contact"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","create_lead","add_note"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","link_caller_to_contact","get_contact_by_id","create_lead","log_call"]},{"type":"string","enum":["lookup_record_by_phone","search_records","get_record_by_id","create_record","update_record"]},{"type":"string","enum":["lookup_issue","search_issues","create_issue","update_issue","add_comment","get_comments","transition_issue","assign_issue","list_projects","list_create_fields"]},{"type":"string","enum":["identify_caller","get_reservations","get_reservation","get_listings","get_listing_details","get_house_rules","get_conversations","check_availability","get_quote","get_owner_revenue","create_task","list_tasks","send_message"]},{"type":"string","enum":["create_task","update_task","update_task_status","move_task","assign_task","list_members","add_attachment","add_comment","search_tasks","get_task","find_list","get_contact_by_number","list_contacts"]},{"type":"string","enum":["list_boards","list_lists","list_cards","get_card","search_cards","list_members","create_card","update_card","move_card","list_comments","add_comment","assign_member","remove_member","add_attachment"]},{"type":"string","enum":["get_account","list_files","get_metadata","get_download_link","search_files","list_shared_links","upload_file","create_folder","create_shared_link","create_file_request","move_file","copy_file","delete_file"]},{"type":"string","enum":["send_message","send_to_default_space","send_via_webhook"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","create_lead","add_note"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","link_caller_to_contact","get_recent_tickets","create_ticket","add_ticket_reply"]},{"type":"string","enum":["track_voucher","reschedule_delivery"]},{"type":"string","enum":["check_availability","list_events","create_event","update_event","lookup_contact"]}]}},"defaultWrhsCode":{"type":"string"},"defaultProjectKey":{"type":"string"},"defaultIssueTypeName":{"type":"string"},"defaultCalendarId":{"type":"string"},"timeZone":{"type":"string"},"callerKeyType":{"type":"string","enum":["phone","vat","email","custom","none"]},"callerKeyLabel":{"type":"string"},"prefetchTicketsOnCallStart":{"type":"boolean"},"callerPhoneFields":{"type":"array","items":{"type":"string"}},"guestyPrefetch":{"type":"object","properties":{"reservations":{"type":"boolean","description":"Prefetch the caller's reservations (guest: own bookings; owner: active+upcoming across their listings)."},"listings":{"type":"boolean","description":"Prefetch the owner's listings (owners only)."},"houseRules":{"type":"boolean","description":"Prefetch house rules of the guest's reserved listing (guests with a current/upcoming reservation)."},"conversations":{"type":"boolean","description":"Prefetch the caller's recent Guesty conversations."}}},"guestyLimits":{"type":"object","properties":{"maxReservationRangeDays":{"type":"integer","minimum":0,"nullable":true,"description":"Cap (days) on an owner-by-listing reservation date range — the strongest guard. Default and system maximum 7."},"maxReservations":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on reservations returned by any single call. Default 10, system maximum 20."},"maxConversations":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on conversations returned / prefetched. Default 5."},"maxListings":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on listings returned. Default 20."},"prefetchReservationBackDays":{"type":"integer","minimum":0,"nullable":true,"description":"Prefetch window: days before today for a caller's reservations. Default 3."},"prefetchReservationForwardDays":{"type":"integer","minimum":0,"nullable":true,"description":"Prefetch window: days after today. Default 4."}}},"guestyQuoteSource":{"type":"string"},"autoIdentifyCaller":{"type":"boolean"},"prefetchOrdersOnCallStart":{"type":"boolean"},"prefetchOrdersDays":{"type":"integer"},"prefetchOrdersMaxOrders":{"type":"integer"},"prefetchShippingZonesOnCallStart":{"type":"boolean"},"maxOrderValue":{"type":"number","nullable":true},"maxOrderLines":{"type":"integer","nullable":true},"maxSalesDocValue":{"type":"number","nullable":true},"maxSalesDocLines":{"type":"integer","nullable":true},"salesDocShippingEnabled":{"type":"boolean"},"salesDocManageOlderThan24h":{"type":"boolean"},"allowExternalNumbers":{"type":"boolean"},"announceRecordingPause":{"type":"string","enum":["off","pause","resume","both"]},"customAttributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"The attribute key. Meaning varies per provider (see tool config description)."},"description":{"type":"string","minLength":1,"description":"What the AI should put in this field — shown to the LLM as the parameter description."},"required":{"type":"boolean","description":"When true, the AI must fill the field. The write op is rejected if missing."}},"required":["key","description"]}},"logCallNotesTemplate":{"type":"string"},"logCallOnlyWhenField":{"type":"string"},"logCallMergeDaily":{"type":"boolean"},"logCallActor":{"type":"string"},"logCallActorRules":{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","minLength":1,"description":"Post-call analysis property to test, e.g. \"requested_person\"."},"values":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"description":"Values that select this rule — the canonical name plus spoken variants. Case/accent-insensitive; a value also matches when it appears as whole words inside the analysis text."},"actor":{"type":"string","minLength":1,"description":"Soft1 ACTOR (user) the call is assigned to when this rule matches. Supports {{variables}}."},"label":{"type":"string","description":"Operator note, e.g. the person's name. Shown in logs only."}},"required":["property","values","actor"]}},"logCallHeaderFields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"SOACTION column name, e.g. \"UDSTRING01\" or \"CCCSOACTION.UDFTYPE\"."},"value":{"type":"string","description":"Template for the value, e.g. \"{{request_type}}\". Supports {{phone_number}}, {{caller_name}}, {{agent_name}}, {{call_date}} and any post-call analysis property."},"valueMap":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional map from the rendered text to the stored value (case/accent-insensitive key match), e.g. {\"Πωλήσεις\":\"1\",\"Υποστήριξη\":\"2\"}. Unmapped text is stored as is."}},"required":["key","value"]}},"allowedSpaces":{"type":"array","items":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque space resource name (spaces/AAQA...)"},"displayName":{"type":"string","minLength":1,"description":"Friendly label shown to the LLM and rendered in the UI"}},"required":["spaceName","displayName"]}},"allowedBoards":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Trello board id"},"name":{"type":"string","minLength":1,"description":"Board display name shown in the UI and to the AI"}},"required":["id","name"]}},"allowedWebhookLabels":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Field key, e.g. \"full_name\" or \"accident_location\""},"description":{"type":"string","description":"What to ask for — shown as the field label/help text on the web form"},"type":{"type":"string","enum":["text","number","location","files"],"description":"Input type; \"location\" asks for GPS + map pin; \"files\" lets the caller upload photos/PDFs (S3 + OCR/AI analysis)"},"required":{"type":"boolean","default":true}},"required":["name","description","type"]}},"ttlMinutes":{"type":"integer"},"notifyEmails":{"type":"array","items":{"type":"string"}},"smsMessage":{"type":"string"},"maxCallbacks":{"type":"integer"},"dynamicWelcomeMessage":{"type":"boolean"},"branches":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Optional stable id for this branch"},"name":{"type":"string","minLength":1,"description":"Spoken branch name, e.g. \"Syntagma store\""},"address":{"type":"string","description":"Full address text used for geocoding when lat/lng are missing"},"latitude":{"type":"number","description":"Latitude in decimal degrees"},"longitude":{"type":"number","description":"Longitude in decimal degrees"},"googlePlaceId":{"type":"string","description":"Optional Google Place ID; used to resolve coordinates when lat/lng are missing"}},"required":["name"]}},"includeCompanyLocation":{"type":"boolean"},"regionBias":{"type":"string"},"locationDetails":{"type":"array","items":{"type":"string","enum":["phone","website","openingHours","rating","priceLevel","category","summary","mapsLink"]}},"maxResults":{"type":"integer"},"channels":{"type":"array","items":{"type":"string","enum":["calls","widget"]}},"collectComment":{"type":"boolean"},"allowResubmit":{"type":"boolean"},"sendMode":{"type":"string","enum":["always","evaluate"]},"evaluationPrompt":{"type":"string"},"channel":{"type":"string","enum":["email","sms","both"]},"maxAttempts":{"type":"integer"},"codeTtlSeconds":{"type":"integer"},"method":{"type":"string","enum":["otp","known_field"]},"matchField":{"type":"string","enum":["vatNumber"]},"matchLastDigits":{"type":"integer"},"saveCallerNumber":{"type":"boolean"},"recentlyCalledDays":{"type":"integer"},"stopsAtStart":{"type":"boolean"}},"required":["enabled","name","type"],"example":{"enabled":true,"name":"send_sms","prompt":"Send an SMS to the user","type":"system","senderId":"1234567890","url":"https://eshopkatoikidio.gr/skroutz-feed.xml","interval":60,"vectorField":"sku","aiEnabled":false,"keyOfId":"mpn","lastSyncAt":"2024-01-15T10:30:00.000Z","timesFailed":0,"readContactProperties":["firstname","lastname","phone"],"updateContactProperties":["phone"],"createCallActivity":false,"nudgeIntervalSeconds":10,"timesToNudge":3,"actions":["forward"]}}},"mcpServers":{"type":"array","items":{"type":"object","properties":{"connectionId":{"type":"string","minLength":1,"description":"Company MCP connection this agent uses"},"name":{"type":"string","minLength":1,"description":"Display name"},"slug":{"type":"string","minLength":1,"description":"Prefix for LLM tool names (mcp_{slug}__{tool})"},"enabled":{"type":"boolean","default":false},"enabledTools":{"type":"array","items":{"type":"string"},"default":[],"description":"Remote tool names the agent may call"},"selectedToolDefs":{"type":"array","items":{"type":"object","properties":{"remoteName":{"type":"string","minLength":1,"description":"Tool name as published by the MCP server"},"description":{"type":"string","default":""},"inputSchema":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"default":{}}},"required":["remoteName"]},"default":[],"description":"Schemas for enabled tools so live calls stay sync"}},"required":["connectionId","name","slug"]}},"playWaitMusicOnDuringCallTools":{"type":"boolean"},"password":{"type":"string"},"passwordTries":{"type":"number"},"externalDial":{"type":"number"},"internalDial":{"type":"string"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Unique identifier for the node"},"name":{"type":"string","description":"Display name of the node"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"description":"X,Y coordinates for node positioning"},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}},"description":"Input connections to this node"},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}},"description":"Output connections from this node"},"className":{"type":"string","description":"CSS class for styling the node"},"data":{"oneOf":[{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["conversation"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"},"systemPrompt":{"type":"string"},"enableModel":{"type":"boolean"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"enableTranscription":{"type":"boolean"},"transcriptionConfig":{"type":"object","properties":{"transcriptionProvider":{"type":"string","enum":["microsoft","google","fireworks","speechmatics","openai","assemblyai","deepgram","google_v1","google_v2","elevenlabs","voicelogica","soniox"],"description":"The transcription service provider to use for speech-to-text"},"silenceDurationMs":{"type":"number","minimum":500,"description":"Duration of silence in milliseconds before considering the user finished speaking"},"adaptationPhraseSetIds":{"type":"array","items":{"type":"string"},"description":"IDs of adaptation phrase sets to improve transcription accuracy"},"transcriptionVoiceMailPhrases":{"type":"array","items":{"type":"string"},"description":"Phrases that indicate the call has reached a voicemail system"},"waitForFullTranscription":{"type":"boolean","description":"Whether to wait for complete transcription before processing"},"enhanced":{"type":"boolean","description":"Whether to use enhanced transcription models for better accuracy"},"audioEnhancement":{"type":"boolean","description":"Whether to run ai-coustics speech enhancement (noise/background-speech suppression) on caller audio before transcription"},"audioEnhancementLevel":{"type":"number","minimum":0,"maximum":1,"description":"How aggressively the ai-coustics model suppresses noise (0.0-1.0). Uses the model default when omitted"},"endpointSensitivity":{"type":"number","minimum":-1,"maximum":1,"nullable":true,"description":"Soniox only: how aggressively endpoints are detected (-1.0 to 1.0). Higher = faster end-of-turn but more risk of cutting the caller off mid-sentence. Platform default 0.3"},"maxEndpointDelayMs":{"type":"number","minimum":500,"maximum":3000,"nullable":true,"description":"Soniox only: hard cap on how long Soniox may wait for an endpoint after speech ends (500-3000ms). Platform default 1500"},"endpointLatencyAdjustmentLevel":{"type":"integer","minimum":0,"maximum":3,"nullable":true,"description":"Soniox only: endpoint latency reduction level 0-3 (3 = most aggressive). Platform default 3"},"speculativeFinalize":{"type":"boolean","nullable":true,"description":"Soniox only: at the speculative quiet moment, request finalize() to flush pending tokens into the candidate before the endpoint. Platform default from admin settings"},"singleUtterance":{"type":"boolean","description":"Whether to process speech as single utterances"},"openAiModel":{"type":"string","enum":["whisper-1","gpt-transcribe","gpt-4o-transcribe","gpt-4o-mini-transcribe","gpt-4o-transcribe-diarize"],"description":"OpenAI model to use for transcription"},"prompt":{"type":"string","description":"Custom prompt used for transcription processing"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to focus on during transcription"},"initializationMethod":{"type":"string","enum":["on_call_start","on_human_join"],"description":"Method to initialize the transcription service"}},"required":["transcriptionProvider"],"description":"Configuration for speech-to-text transcription settings","example":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"waitForFullTranscription":false,"openAiModel":"whisper-1"}},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}},"skipTurnEnabled":{"type":"boolean"},"skipTurnPrompt":{"type":"string"},"workflowsIds":{"type":"array","items":{"type":"string"}},"knowledgeFileIds":{"type":"array","items":{"type":"string"}},"enableVoice":{"type":"boolean"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"canJumpToPreviousNode":{"type":"boolean"},"workflows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"triggers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCallStart","onCallConnect","onCallEnd","onCallTransfer","onMissedCall","onDTMFInput","onKeywordDetected","duringCall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"functionName":{"type":"string","pattern":"^[a-z0-9_]+$"},"keywords":{"type":"array","items":{"type":"string"}},"condition":{"type":"string"},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"generateMessageBeforeRunningWorkflow":{"type":"boolean"},"messageAiGenerated":{"type":"boolean"},"messagePrompt":{"type":"string"},"playWaitMusic":{"type":"boolean","description":"When true (default), play keyboard wait music while this duringCall workflow tool runs"},"useProtectedValues":{"type":"boolean","description":"onCallEnd only. When true, the non-AI steps of this workflow (API call, integrations, booking, email, SMS, sheets, conditions) get the REAL values the caller said ({{protected.afm}}, {{afm_1}}, …) when the agent protects sensitive data; AI steps (llmCompletion, aiResponse, managedAgent, googleSearch) always get placeholders. Every use is audited. Only members who may reveal sensitive data can turn it on."}},"example":{"keywords":["hello","world"],"condition":"call_started","parameters":[{"name":"call_id","value":"123"}],"playWaitMusic":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onEmailReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"emailFilters":{"type":"object","properties":{"from":{"type":"array","items":{"type":"string"}},"subject":{"type":"array","items":{"type":"string"}},"labels":{"type":"array","items":{"type":"string"}}}}},"example":{"emailFilters":{"from":["test@test.com"],"subject":["test"],"labels":["test"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onAPICall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"payloadSchema":{"type":"object","properties":{"type":{"type":"string","enum":["object"]},"properties":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","enum":["object","array","string","number","boolean","date","enum"]},"required":{"type":"boolean","default":false},"properties":{"type":"object","additionalProperties":{"type":"object","description":"Circular reference detected"}},"items":{"type":"object","description":"Circular reference detected"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"},"minimum":{"type":"number"},"maximum":{"type":"number"},"enum":{"type":"array","items":{"type":"string"}}},"required":["type"]}},"required":{"type":"array","items":{"type":"string"}}},"required":["type","properties"],"description":"Expected payload structure"}},"example":{"payloadSchema":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^TX-[0-9]{8}$"},"amount":{"type":"number","minimum":0},"currency":{"type":"string","enum":["USD","EUR","GBP"]}},"required":["transactionId","amount","currency"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onContactCreated","onCompanyCreated","onDealCreated","onTicketCreated","onPropertyChange"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","property"]},"property":{"type":"string","enum":["hs_lead_status","lifecyclestage","hubspot_owner_id","companyname","domain","dealstage","amount","closedate","closed_won_reason","closed_lost_reason","pipeline","hs_pipeline_stage","hs_due_date"]}},"example":{"resource":"contact","property":"hs_lead_status"}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onWooCommerce"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"getCustomerOrders":{"type":"boolean"},"getProductByName":{"type":"boolean"},"getProductByCode":{"type":"boolean"},"productCodeType":{"type":"string","enum":["id","sku","global_unique_id"]},"createOrder":{"type":"boolean"},"getOrderById":{"type":"boolean"},"notifyEmailsOnOrderCreation":{"type":"array","items":{"type":"string"}}},"example":{"getCustomerOrders":true,"getProductByName":true,"getProductByCode":true,"productCodeType":"id","createOrder":true,"getOrderById":true,"notifyEmailsOnOrderCreation":["test@test.com"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onYubotoPbxChannelHangup","onYubotoPbxChannelAnswer","onYubotoPbxChannelCreate"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"agentId":{"type":"string"},"allowedExtensions":{"type":"array","items":{"type":"string"}}},"example":{"username":"test","password":"test","agentId":"test","allowedExtensions":["123","456"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCampaignLeadStatusChanged"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign to watch. Omit to fire for every campaign of the company."},"statuses":{"type":"array","items":{"type":"string","enum":["successful","failed","reachedMaxRetries","askedToCallBackLater","askedToNeverCallAgain","cancelled"]},"description":"Lead statuses that fire the workflow. Omit or empty = every outcome status."},"stages":{"type":"array","items":{"type":"string"},"description":"Only fire when the lead is in one of these campaign stage names. Omit or empty = any stage."}},"example":{"campaignId":"66f1c0ffee0000000000abcd","statuses":["failed","reachedMaxRetries"],"stages":[]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onShopifyEvent"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["orders/create","orders/paid","orders/fulfilled","orders/partially_fulfilled","orders/cancelled","refunds/create","fulfillments/create","fulfillments/update"]},"minItems":1,"description":"Shopify events that start the workflow."},"financialStatuses":{"type":"array","items":{"type":"string","enum":["pending","authorized","partially_paid","paid","partially_refunded","refunded","voided"]},"description":"Only when the order payment status is one of these. Empty = any."},"fulfillmentStatuses":{"type":"array","items":{"type":"string","enum":["unfulfilled","partial","fulfilled","restocked"]},"description":"Only when the order fulfillment status is one of these. Empty = any."},"shipmentStatuses":{"type":"array","items":{"type":"string","enum":["label_printed","label_purchased","confirmed","in_transit","out_for_delivery","attempted_delivery","ready_for_pickup","delivered","failure"]},"description":"Shipment topics only: only when the carrier status is one of these. Empty = any."},"paymentGateways":{"type":"array","items":{"type":"string"},"description":"Only when a payment gateway name contains one of these (case-insensitive), e.g. \"Cash on Delivery\". Empty = any."},"tags":{"type":"array","items":{"type":"string"},"description":"Only when the order has at least one of these tags (case-insensitive). Empty = any."},"minTotal":{"type":"number","minimum":0,"description":"Only when the order total is at least this amount."},"maxTotal":{"type":"number","minimum":0,"description":"Only when the order total is at most this amount."}},"required":["topics"],"example":{"topics":["orders/create"],"financialStatuses":["pending"],"paymentGateways":["Cash on Delivery"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onLeadReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"string","enum":["tiktok","meta","google_ads","linkedin","webhook","form"]},"description":"Only leads from these sources start the workflow. Empty = any source, including ones added later."},"formIds":{"type":"array","items":{"type":"string","minLength":1},"description":"Only these forms: our lead form ids (from lead_forms_list_forms). A platform form id or a form name also matches, for older triggers. Empty = any."},"requirePhone":{"type":"boolean","description":"Skip a lead with no phone number."},"includeTestSubmissions":{"type":"boolean","description":"Also fire for test submissions. Off by default."}},"example":{"sources":["google_ads","form"],"requirePhone":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"triggerType"}}},"required":["id","name","position","outputs"],"example":{"id":1,"name":"Call Start Trigger","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"},{"node":"3","output":"default"}]},"className":"trigger-node","data":{"triggerType":"onCallStart","triggerConfig":{"enabled":true,"triggerType":"onCallEnd","description":"Trigger when a new call starts"},"transitions":[2,3]}}},"description":"Trigger node that starts the flow"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"nodeType":{"type":"string","enum":["emailConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["nodeType","nodeTitle","transitions","emailConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendSms"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["nodeType","nodeTitle","transitions","smsConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["apiCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["nodeType","nodeTitle","transitions","apiConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["codeExecution"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"codeConfig":{"type":"object","properties":{"code":{"type":"string"},"language":{"type":"string","enum":["javascript","python","java","cpp","php","ruby"]},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties for the code"}},"required":["code","language"],"example":{"code":"console.log(\"Hello, world!\");","language":"javascript","properties":[{"name":"name","type":"string"}]}}},"required":["nodeType","nodeTitle","transitions","codeConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleDocConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}}},"required":["nodeType","nodeTitle","transitions","googleDocConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createEvent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"eventConfig":{"type":"object","properties":{"calendarId":{"type":"string","description":"Google calendar id. Empty = the company's primary calendar."},"summary":{"type":"string","description":"Event title."},"startDateTime":{"type":"string","description":"Start, ISO 8601 (\"2026-08-12T15:00:00\") or \"YYYY-MM-DD HH:mm\"."},"endDateTime":{"type":"string","description":"End. Empty = start + durationMinutes."},"durationMinutes":{"type":"number","minimum":1,"maximum":1440,"description":"Used only when endDateTime is empty. Defaults to 30."},"description":{"type":"string"},"location":{"type":"string"},"attendees":{"type":"string","description":"Comma-separated emails."},"timeZone":{"type":"string","description":"IANA zone. Empty = the company timezone."},"isOnline":{"type":"boolean","description":"When true, Google adds a Meet link to the event."}},"required":["durationMinutes"],"example":{"summary":"Callback for {{contact_name}}","startDateTime":"{{callback_datetime}}","durationMinutes":30,"description":"Requested during call {{call_id}}","attendees":"sales@example.com","isOnline":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendPhoneCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}}},"required":["nodeType","nodeTitle","transitions","phoneCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["llmCompletion"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}}},"required":["nodeType","nodeTitle","transitions","llmCompletionConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheet"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]}},"required":["nodeType","nodeTitle","transitions","googleSheetConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}}},"required":["nodeType","nodeTitle","transitions","googleSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendViber"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}}},"required":["nodeType","nodeTitle","transitions","viberConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["switch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"switchConfig":{"type":"object","properties":{"cases":{"type":"array","items":{"type":"object","properties":{"block":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"transition":{"type":"string"},"transitionIndex":{"type":"number"}},"required":["block"]}}},"required":["cases"],"example":{"cases":[{"transition":"Schedule Appointment","transitionIndex":1,"block":{"operator":"and","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"schedule_appointment","fieldType":"string"}]}},{"transition":"Cancel Appointment","transitionIndex":0,"block":{"operator":"or","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"cancel_appointment","fieldType":"string"}]}}]}}},"required":["nodeType","nodeTitle","transitions","switchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["if"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"ifConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","ifConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["filter"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"filterConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","filterConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["loop"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"loopConfig":{"type":"object","properties":{"array":{"type":"string"}},"required":["array"],"example":{"array":"user_response"}}},"required":["nodeType","nodeTitle","transitions","loopConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["tableNode"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"tableConfig":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","maxLength":128},"type":{"type":"string","enum":["string","number","boolean"]}},"required":["key","label"]},"maxItems":50},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"maxItems":500},"filters":{"type":"array","items":{"type":"object","properties":{"column":{"type":"string","minLength":1},"op":{"type":"string","enum":["equals","notEquals","contains","gt","lt","gte","lte"]},"value":{"type":"string"}},"required":["column","op","value"]}},"mode":{"type":"string","enum":["producer","lookup"]},"keyColumn":{"type":"string"},"keyValue":{"type":"string"}},"required":["columns","rows"],"example":{"columns":[{"key":"name","label":"Name","type":"string"},{"key":"phone","label":"Phone","type":"string"}],"rows":[{"name":"Alice","phone":"+30 210 1234567"},{"name":"Bob","phone":"+30 210 7654321"}],"mode":"producer"}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hubspotContact","hubspotCompany","hubspotDeal","hubspotTicket","hubspotTask","hubspotNote","hubspotMeeting","hubspotEmail","hubspotCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hubspotConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"operation":{"type":"string","enum":["get","create","createOrUpdate","getOrCreate","delete","update","search","list","exists"]},"value":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"associations":{"type":"array","items":{"type":"object","properties":{"associationType":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["associationType","valueType","value"],"example":{"associationType":"contact","valueType":"id","value":"123"}}},"owner":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"contactData":{"type":"object","properties":{"properties":{"type":"object","properties":{"email":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"}},"required":[]}},"example":{"email":"test@test.com","firstname":"John","lastname":"Doe","phone":"+1234567890","company":"Test Corp","website":"https://test.com","lifecyclestage":"marketingqualifiedlead","jobtitle":"Manager","hs_additional_emails":["test2@test.com"]}},"companyData":{"type":"object","properties":{"properties":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"industry":{"type":"string"},"description":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"}},"required":[]}},"example":{"name":"Test Corp","domain":"test.com","industry":"Technology","description":"Test Description","city":"Test City","country":"Test Country","phone":"1234567890","address":"Test Address","owner":{"valueType":"email","value":"test@test.com"}}},"dealData":{"type":"object","properties":{"properties":{"type":"object","properties":{"dealname":{"type":"string"},"pipeline":{"type":"string"},"stage":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string"},"closeDate":{"type":"string"},"dealType":{"type":"string","enum":["new","existing"]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["pipeline","stage"]}},"example":{"name":"Test Deal","description":"Test Description","amount":"1000","stage":"Test Stage"}},"ticketData":{"type":"object","properties":{"properties":{"type":"object","properties":{"pipeline":{"type":"string"},"stage":{"type":"string"},"priority":{"type":"string","enum":["HIGH","MEDIUM","LOW"]},"subject":{"type":"string"},"content":{"type":"string"}},"required":["pipeline","stage","subject"]}},"example":{"pipeline":"Test Pipeline","stage":"Test Stage","priority":"HIGH","subject":"Test Subject","content":"Test Content"}},"taskData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string"},"taskType":{"type":"string"},"priority":{"type":"string"},"dueDate":{"type":"string"},"repeatType":{"type":"object","properties":{"enabled":{"type":"boolean"},"type":{"type":"string","enum":["hour","day","week","month","year"]},"value":{"type":"string"}},"example":{"enabled":true,"type":"day","value":"1"}},"reminderTime":{"oneOf":[{"type":"number"},{"type":"string"}]},"notes":{"type":"string"}},"required":["title","dueDate"]}},"example":{"associations":[{"associationType":"contact","valueType":"email","value":"contact@example.com"}],"properties":{"title":"Task Title","taskType":"TODO","priority":"MEDIUM","associations":[],"timestamp":"2021-01-01","dueDate":"2021-01-01","notes":"Task Notes","ownerEmail":"owner@example.com","status":"NOT_STARTED","reminderTime":1000}}},"noteData":{"type":"object","properties":{"properties":{"type":"object","properties":{"body":{"type":"string"}},"required":[]}}},"meetingData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title of the meeting"},"body":{"type":"string","description":"Meeting description"}}}},"required":["properties"],"example":{"properties":{"title":"Initial Project Discussion","body":"Meeting to discuss project requirements and timeline"}}},"emailData":{"type":"object","properties":{"properties":{"type":"object","properties":{"subject":{"type":"string","description":"Subject of the email"},"body":{"type":"string","description":"Email body content"}},"required":[]}},"example":{"properties":{"subject":"Project Update","body":"Here are the latest updates on the project progress."}}},"callData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title/subject of the call"},"body":{"type":"string","description":"Call description and notes"},"direction":{"type":"string","enum":["INBOUND","OUTBOUND"],"description":"Call direction"},"caller":{"type":"string","description":"Caller phone number"},"callee":{"type":"string","description":"Callee phone number"},"duration":{"type":"string","description":"Call duration in milliseconds"},"disposition":{"type":"string","enum":["9d9162e7-6cf3-4944-bf63-4dff82258764","f240bbac-87c9-4f6e-bf70-924b57d47db7","a4c4c377-d246-4b32-a13b-75a56a4cd0ff","b2cf5968-551e-4856-9783-52b3da59a7d0","73a0d17f-1163-4015-bdd5-ec830791da20","17b47fee-58de-441e-a44c-c6300d46f273"],"description":"Call disposition"},"recordingUrl":{"type":"string","description":"Call recording URL"}},"required":[]}},"example":{"properties":{"title":"Test Call","body":"Test Body"}}}},"required":["resource","operation"],"example":{"resource":"call","operation":"create","owner":{"valueType":"email","value":"test@test.com"},"properties":{"callData":{"properties":{"callTitle":"Test Call","callBody":"Test Body"}}}}}},"required":["nodeType","nodeTitle","transitions","hubspotConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheetSettings"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetSettingsConfig":{"type":"object","properties":{"googleSheetId":{"type":"string","minLength":1,"description":"The unique identifier of the Google Sheet"},"sheetName":{"type":"string","minLength":1,"description":"The name of the specific sheet within the Google Sheet"},"operation":{"type":"string","enum":["getRow","getRows","updateRow","appendRow","deleteRow","getData"],"description":"The operation to perform on the Google Sheet (getRow, getRows, updateRow, appendRow, deleteRow)"},"filter":{"type":"object","properties":{"filterType":{"type":"string","enum":["index","columnName"]},"column":{"type":"string"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"fieldType":{"type":"string","enum":["string","phone","email","number","boolean","date","time","enum"]},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["filterType","column","operator","fieldType"],"example":{"filterType":"index","column":"1","operator":"eq","fieldType":"string","fieldValue":"Chris"},"description":"Filter to apply for selecting rows, such as by index or column name"},"values":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"object","description":"Any valid JSON value"}},"required":["key","value"]},"description":"Key-value pairs for the row data"}},"required":["googleSheetId","sheetName","operation"],"example":{"googleSheetId":"123","sheetName":"Sheet1","operation":"getRow","filter":{"filterType":"index","column":"1","operator":"eq","fieldType":"number","fieldValue":"152"},"values":[{"key":"Email","value":"john.doe@example.com"},{"key":"Name","value":"John Doe"}]}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["aiResponse"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}}},"required":["nodeType","nodeTitle","transitions","aiResponseConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["transferCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["nodeType","nodeTitle","transitions","transferCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["afmSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"afmSearchConfig":{"type":"object","properties":{"afm":{"type":"string","description":"AFM of company"}},"required":["afm"],"example":{"afm":"8022188180"}}},"required":["nodeType","nodeTitle","transitions","afmSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["galaxyGetCustomer","galaxySearchItems","galaxyCheckStock","galaxyGetPrice","galaxyCalculateOrder","galaxyPlaceOrder","galaxyUpdateOrder","galaxyGetOrderStatus","galaxyGetTransactionHistory","galaxyGetCustomerBalance","galaxyGetCustomerAging","galaxyGetFinInfoPerDrugType","galaxyGetItemPurchases","galaxyGetCustomerKartelaLink","galaxyFindItemsByActiveIngredient","galaxyGetInvoicePdfLinks","galaxyGetNextRoute","galaxyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"galaxyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","checkStock","getPrice","calcLines","calculateOrder","placeOrder","updateOrder","getOrderStatus","getTransactionHistory","getCustomerBalance","getCustomerAging","getFinInfoPerDrugType","getItemPurchases","getCustomerKartelaLink","findItemsByActiveIngredient","getInvoicePdfLinks","getNextRoute","customRequest"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","custCode"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query (supports {{variables.x}})"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"checkStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"wrhsCode":{"type":"string","description":"Overrides the company default warehouse"}},"required":["itemCode"]},"getPrice":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"}},"required":["EntryType","Date","Quantity"]},"calcLines":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"},"WrhsCode":{"type":"string"},"AlterCode":{"type":"string"},"Barcode":{"type":"string"}},"required":["EntryType","Date","Quantity","WrhsCode"]},"placeOrder":{"type":"object","properties":{"entry":{"type":"object","properties":{"CompID":{"type":"string"},"CompCode":{"type":"string"},"CmpsID":{"type":"string"},"CmpsCode":{"type":"string"},"WrhsID":{"type":"string"},"WrhsCode":{"type":"string"},"CoetID":{"type":"string"},"CoetCode":{"type":"string"},"DnumID":{"type":"string"},"TransDate":{"type":"string"},"TradeDate":{"type":"string"},"CustID":{"type":"string"},"CustCode":{"type":"string"},"CussID":{"type":"string"},"CussCode":{"type":"string"},"PytmID":{"type":"string"},"PytmCode":{"type":"string"},"MeroID":{"type":"string"},"CollMeroID":{"type":"string"},"RuteID":{"type":"string"},"UserID":{"type":"string"},"SourceType":{"type":"integer"},"RefTradeCode":{"type":"string"},"VoucherCode":{"type":"string"},"Comments":{"type":"string"},"ExecutionDate":{"type":"string"},"Street":{"type":"string"},"StreetNumber":{"type":"string"},"PostalCode":{"type":"string"},"Phone":{"type":"string"},"RegnDescription":{"type":"string"},"PrefDescription":{"type":"string"},"CntrDescription":{"type":"string"},"AddressDescr":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"EntryStatus":{"type":"integer"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1},"ID":{"type":"string"},"FastNumber":{"type":"string"},"TotalValue":{"type":"number"},"NetValue":{"type":"number"},"VatValue":{"type":"number"},"Lines":{"type":"array","items":{"type":"object","properties":{"ItcpID":{"type":"string"},"ItemCode":{"type":"string"},"RequestAQty":{"oneOf":[{"type":"number"},{"type":"string"}]},"WrhsID":{"type":"string"},"Price":{"type":"number"},"Disc1Pcnt":{"type":"number"},"Disc1Val":{"type":"number"},"Disc2Pcnt":{"type":"number"},"Disc2Val":{"type":"number"},"Disc3Pcnt":{"type":"number"},"Disc3Val":{"type":"number"},"Comments":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"DiscountBehaviour":{"type":"integer","minimum":0,"maximum":2},"ZeroingDiscounts":{"type":"integer","minimum":0,"maximum":3,"description":"v103: suppress discounts"},"ApplyDscnID":{"type":"string"},"ApplyDrulID":{"type":"string"},"CicoID":{"type":"string","description":"v103: item-collection (bundle) ID"},"AQty":{"type":"number"},"DisposalAQty":{"type":"number"},"PickingQty":{"type":"number"},"NetValue":{"type":"number"},"GrossValue":{"type":"number"}},"required":["ItcpID","ItemCode","RequestAQty","WrhsID","Price","Disc1Pcnt","Disc1Val","Disc2Pcnt","Disc2Val","Disc3Pcnt","Disc3Val","Comments","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","DiscountBehaviour","ZeroingDiscounts","ApplyDscnID","ApplyDrulID","CicoID","AQty","DisposalAQty","PickingQty","NetValue","GrossValue"]},"nullable":true},"Taxes":{"type":"array","items":{"type":"object","properties":{"FiacID":{"type":"string"},"FiacCode":{"type":"string"},"TrnValue":{"oneOf":[{"type":"number"},{"type":"string"}]},"ExchVatValue":{"type":"number"}},"required":["FiacID","FiacCode","ExchVatValue"]},"nullable":true}},"required":["CompID","CompCode","CmpsID","CmpsCode","WrhsID","WrhsCode","CoetID","CoetCode","DnumID","TransDate","TradeDate","CustID","CustCode","CussID","CussCode","PytmID","PytmCode","MeroID","CollMeroID","RuteID","UserID","SourceType","RefTradeCode","VoucherCode","Comments","ExecutionDate","Street","StreetNumber","PostalCode","Phone","RegnDescription","PrefDescription","CntrDescription","AddressDescr","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","EntryStatus","LockTransaction","ID","FastNumber","TotalValue","NetValue","VatValue","Lines","Taxes"]},"previewFirst":{"type":"boolean","default":false}},"required":["entry"]},"updateOrder":{"type":"object","properties":{"ID":{"type":"string"},"EntryStatus":{"type":"integer"},"Comments":{"type":"string"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1}},"required":["ID"]},"getOrderStatus":{"type":"object","properties":{"id":{"type":"string","description":"Optional specific transaction ID — omit to list all"},"revNum":{"type":"integer","minimum":0,"default":0},"custCode":{"type":"string","description":"List the orders of this customer instead (GetTransactions by CustCode, per branch). Template strings supported."},"dateFrom":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."}}},"getTransactionHistory":{"type":"object","properties":{"CustCode":{"type":"string"},"DateFrom":{"type":"string"},"DateTo":{"type":"string"}},"required":["CustCode","DateFrom","DateTo"]},"getCustomerBalance":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."}},"required":["custCode"]},"getCustomerAging":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"getFinInfoPerDrugType":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"fromDate":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."}},"required":["custCode"]},"getItemPurchases":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"itemCode":{"type":"string","minLength":1,"description":"Galaxy item code (from item search). Template strings supported."},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"compCode":{"type":"string","description":"Branch/company code. Defaults to the customer's branch."}},"required":["custCode","itemCode"]},"getCustomerKartelaLink":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"findItemsByActiveIngredient":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Active ingredient name or AtloID. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["query"]},"getInvoicePdfLinks":{"type":"object","properties":{"custCode":{"type":"string"},"custTin":{"type":"string"},"cussCode":{"type":"string"},"id":{"type":"string"},"dateFrom":{"type":"string"},"dateTo":{"type":"string"}}},"getNextRoute":{"type":"object","properties":{"custCode":{"type":"string","minLength":1}},"required":["custCode"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"POST"},"path":{"type":"string","minLength":1,"description":"Path added after the Galaxy ERP base URL, e.g. /api/crossdomain/advancedcustomviews/<guid>. Supports {{variables}}."},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Key/value properties sent as the query string. Values support {{variables}}."},"body":{"type":"string","description":"Optional raw JSON request body (supports {{variables}}). Example for an advanced custom view: {\"filters\":[{\"CompCode\":\"01\",\"CustCode\":\"{{node_1.custCode}}\"}],\"MasterDetailTree\":false}"},"apiResponse":{"type":"string","description":"Editor-only: JSON schema of the expected response (same as the apiCall node's \"API Response\"). Powers the variable picker so downstream nodes can reference individual response fields; at runtime the real response is flattened into node_N.* regardless."}},"required":["path"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["salesforceGetContact","salesforceCreateLead","salesforceLogCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"salesforceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","createLead","logCall"]},"getContact":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{variables.x}} / {{call.phoneNumber}}"},"objectType":{"type":"string","enum":["Contact","Lead"],"description":"For by=id: which SObject the Id belongs to (default Contact)."}},"required":["by","value"]},"createLead":{"type":"object","properties":{"lastName":{"type":"string","minLength":1,"description":"Lead last name — required by Salesforce. Supports templates."},"company":{"type":"string","minLength":1,"description":"Lead company — required by Salesforce. Supports templates."},"firstName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"description":{"type":"string","description":"Short summary of the request / call reason."}},"required":["lastName","company"]},"logCall":{"type":"object","properties":{"whoId":{"type":"string","minLength":1,"description":"Contact or Lead Id the call is logged against. Supports templates."},"subject":{"type":"string","minLength":1,"description":"Task subject, e.g. \"Inbound call — order status\"."},"description":{"type":"string","description":"Call notes."}},"required":["whoId","subject"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"by":"phone","value":"{{call.phoneNumber}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["guestyFindOwner","guestyFindGuest","guestyIdentifyCaller","guestyGetListings","guestyGetListing","guestyGetReservations","guestyGetReservation","guestyGetHouseRules","guestyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"guestyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["findOwner","findGuest","identifyCaller","getListings","getListing","getReservations","getReservation","getHouseRules","customRequest"]},"findOwner":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email"],"default":"phone","description":"Which field to search the owner by"},"value":{"type":"string","minLength":1,"description":"Search term (template, e.g. {{call.phone_number}})"}},"required":["value"]},"findGuest":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Guest phone to look up via their reservations (template)"}},"required":["value"]},"identifyCaller":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Caller phone (template) — matched against owners AND guests"}},"required":["value"]},"getListings":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated listing ids (template) — e.g. {{node_X.owner.listings}}"},"ownerId":{"type":"string","description":"Resolve the owner's listing ids first, then fetch them (template)"},"q":{"type":"string","description":"Free-text search across title/nickname/address (template)"}}},"getListing":{"type":"object","properties":{"id":{"type":"string","description":"Listing _id (template) — returns the full property"},"nickname":{"type":"string","description":"Listing nickname (template) — used when no id is known"},"fields":{"type":"string","description":"Space-separated field selection; omit for the full listing"}}},"getReservations":{"type":"object","properties":{"listingIds":{"type":"string","description":"Comma-separated listing ids to scope to (template)"},"listingNickname":{"type":"string","description":"Scope to a single listing by its nickname (template)"},"ownerId":{"type":"string","description":"Scope to all of an owner's listings (resolved to ids) (template)"},"guestPhone":{"type":"string","description":"Scope to a guest's reservations by their phone (template)"},"dateFrom":{"type":"string","description":"Window start: ISO date, `today`, or relative like `-7d` (template)"},"dateTo":{"type":"string","description":"Window end: ISO date, `today`, or relative like `+7d` (template)"},"windowDays":{"type":"integer","minimum":0,"description":"When dateFrom/dateTo are omitted, use today∓windowDays as the overlap window"},"status":{"type":"string","description":"Filter by reservation status (template)"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Reservation _id / confirmation id (template)"}},"required":["id"]},"getHouseRules":{"type":"object","properties":{"listingIds":{"type":"string","minLength":1,"description":"Comma-separated listing ids (template) — house rules are keyed by listing/unit-type"}},"required":["listingIds"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"GET"},"path":{"type":"string","minLength":1,"description":"Path after the base URL, e.g. /v1/reservations (template)"},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Query params (templates)"},"body":{"type":"string","description":"Raw JSON body (template) — ignored for GET"}},"required":["path"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"value":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["helpdeskCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"helpdeskConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createTicket"]},"createTicket":{"type":"object","properties":{"subject":{"type":"string","description":"Ticket subject (template, e.g. \"Call from {{call.phone_number}}\")"},"description":{"type":"string","description":"Ticket body (template, e.g. {{call.summary}})"},"requesterPhone":{"type":"string","description":"Requester phone (template, defaults to {{call.phone_number}})"},"requesterEmail":{"type":"string","description":"Requester email (template)"},"requesterName":{"type":"string","description":"Requester display name (template)"},"priority":{"type":"string","enum":["low","medium","high","urgent"],"description":"Ticket priority"}}}},"required":["operation"],"example":{"operation":"createTicket","createTicket":{"subject":"Call from {{call.phone_number}}","description":"{{call.summary}}","requesterPhone":"{{call.phone_number}}","priority":"medium"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["courierTrackVoucher"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"courierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["trackVoucher"]},"trackVoucher":{"type":"object","properties":{"courier":{"type":"string","description":"Courier to query (acs_courier, speedex, geniki_taxydromiki, elta_courier, boxnow, skroutz_lastmile, taxydema). Omit to try every connected courier."},"voucher":{"type":"string","description":"Voucher/tracking number (template, e.g. {{node_5.order.meta.voucher}})"}}}},"required":["operation"],"example":{"operation":"trackVoucher","trackVoucher":{"voucher":"{{node_5.order.meta.voucher}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["vivaCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"vivaConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createPaymentLink"]},"createPaymentLink":{"type":"object","properties":{"amount":{"type":"string","description":"Amount in EUR as a decimal (template, e.g. \"25.50\" or {{node_3.order.total}})"},"description":{"type":"string","description":"Shown to the customer on the checkout page (template)"},"customerName":{"type":"string","description":"Customer full name (template)"},"customerPhone":{"type":"string","description":"Customer phone (template, e.g. {{call.phone_number}})"},"language":{"type":"string","enum":["el","en"],"description":"Checkout page language"}}}},"required":["operation"],"example":{"operation":"createPaymentLink","createPaymentLink":{"amount":"25.50","description":"Πληρωμή παραγγελίας","customerPhone":"{{call.phone_number}}","language":"el"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createTrackedPage"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"trackedPageConfig":{"type":"object","properties":{"html":{"type":"string","description":"Page HTML (template, e.g. {{node_2.html}} from an llmCompletion node). Scripts and forms are stripped; styles are kept."},"title":{"type":"string","description":"Browser tab title (template)"},"expiresInDays":{"type":"integer","minimum":1,"maximum":365,"description":"How long the link stays open (default 30 days)"}},"required":["html"],"example":{"html":"{{node_2.html}}","title":"Η σύνοψη της κλήσης σας","expiresInDays":30}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["shopifyGetCustomer","shopifyGetOrdersByCustomer","shopifyGetOrderById","shopifySearchProducts","shopifyGetProductById","shopifySyncProductsToSkroutz"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"shopifyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","syncProductsToSkroutz"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search — mapped to vendor / product_type / handle."},"vendor":{"type":"string"},"productType":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify product id."}},"required":["productId"]},"syncProductsToSkroutz":{"type":"object","properties":{"maxRecords":{"type":"integer","minimum":0}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["soft1GetCustomer","soft1SearchItems","soft1GetCustomerBalance","soft1GetCustomerAging","soft1GetCustomerHistory","soft1CreateSalesDoc","soft1TransmitEInvoice"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"soft1Config":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","getCustomerHistory","createSalesDoc","transmitEInvoice"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerAging":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerHistory":{"type":"object","properties":{"trdr":{"type":"string"},"tin":{"type":"string"},"code":{"type":"string"},"from":{"type":"string","description":"ISO date YYYY-MM-DD"},"to":{"type":"string","description":"ISO date YYYY-MM-DD"},"limit":{"type":"integer","minimum":1,"maximum":500,"default":50}}},"createSalesDoc":{"type":"object","properties":{"trdr":{"oneOf":[{"type":"string"},{"type":"number"}]},"custCode":{"type":"string"},"series":{"oneOf":[{"type":"string"},{"type":"number"}]},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"mtrl":{"oneOf":[{"type":"string"},{"type":"number"}]},"code":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"transmit":{"type":"boolean"}},"required":["lines"]},"transmitEInvoice":{"type":"object","properties":{"key":{"type":"string","minLength":1},"template":{"type":"string","minLength":1}},"required":["key"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["exelixisSmartGetContact","exelixisSmartListCompanyContacts","exelixisSmartListSupportMembers","exelixisSmartCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"exelixisSmartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","listCompanyContacts","listSupportMembers","createTicket"]},"getContact":{"type":"object","properties":{"phone":{"type":"string","description":"Template — e.g. {{call.phone_number}}"},"afm":{"type":"string","description":"Template — e.g. {{dynamicVariables.afm}}"}}},"listCompanyContacts":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) to list contacts for"}},"required":["companyId"]},"listSupportMembers":{"type":"object","properties":{}},"createTicket":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) — required by the ERP"},"contactId":{"type":"string"},"supportMemberId":{"type":"string"},"title":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"callUrl":{"type":"string","description":"Template — defaults to {{call.call_url}}"}},"required":["companyId","title","summary"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["pylonGetCustomer","pylonSearchItems","pylonGetCustomerBalance","pylonCreateSalesOrder","pylonGetData","pylonPostData"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"pylonConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","createSalesOrder","getData","postData"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"createSalesOrder":{"type":"object","properties":{"customerTin":{"type":"string","description":"Customer TIN — supports {{dynamicVariables.x}}. Optional when rawData supplies the customer."},"seriesCode":{"type":"string"},"customerBranch":{"type":"string"},"paymentMethod":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0}},"required":["itemCode","quantity"]}},"rawData":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Advanced: a JSON object merged verbatim into the Pylon order payload, overriding the structured fields above. Use native Pylon column names, e.g. {\"Lines\":[{\"CenlItemCode\":\"GG11\",\"CenlAMeasurementQty\":2}],\"CsdcRemarks\":\"…\"}. String values support {{dynamicVariables.x}} templates. Bypasses the structured-field validation, so it must match the target Script exactly."}}},"getData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined getjsondata Script code, e.g. itemsVoiceAgent or custInfoVoice"},"extras":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Param name, e.g. @ItemCode or @phone"},"value":{"type":"string","description":"Param value — supports {{dynamicVariables.x}}"}},"required":["name","value"]},"description":"Script parameters; omit or [] for none"},"packageSize":{"type":"integer","minimum":1,"maximum":5000,"description":"Page size (default 200)"},"allPages":{"type":"boolean","description":"Walk every page until exhausted; otherwise just page 1"}},"required":["entitycode"]},"postData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined postdata Script code, e.g. orderVoice or SalesOrders"},"data":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"JSON object serialized into the postdata `data` field. Use the shape the target Script expects. String values support {{dynamicVariables.x}} templates."}},"required":["entitycode","data"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["entersoftGetCustomer","entersoftSearchItems","entersoftGetCustomerBalance","entersoftGetCustomerAging","entersoftRunPublicQuery","entersoftRunEbsService","entersoftCreateSalesDoc"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"entersoftOneConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","runPublicQuery","runEbsService","createSalesDoc"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"code":{"type":"string","minLength":1,"description":"Customer code — supports templates"}},"required":["code"]},"getCustomerAging":{"type":"object","properties":{"code":{"type":"string","minLength":1}},"required":["code"]},"runPublicQuery":{"type":"object","properties":{"publicQueryGid":{"type":"string"},"groupId":{"type":"string"},"filterId":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Param object — values may be templates"}}},"runEbsService":{"type":"object","properties":{"serviceName":{"type":"string","minLength":1},"parameters":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}}},"required":["serviceName"]},"createSalesDoc":{"type":"object","properties":{"customerGid":{"type":"string"},"customerCode":{"type":"string"},"series":{"type":"string"},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemGid":{"type":"string"},"itemCode":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"ebsServiceName":{"type":"string"}},"required":["lines"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["wooGetCustomer","wooGetOrdersByCustomer","wooGetOrderById","wooSearchProducts","wooGetProductById","wooCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"wooCommerceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric WooCommerce customer id"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string"},"sku":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric customer id (0 for guest)"},"lineItems":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"integer","minimum":0},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","lineItems"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["opencartGetCustomer","opencartGetOrdersByCustomer","opencartGetOrderById","opencartSearchProducts","opencartGetProductById","opencartCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"opencartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"manufacturer":{"type":"string","description":"Exact manufacturer filter. Optional."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Existing OpenCart customer id (for logged-in orders)."},"firstname":{"type":"string"},"lastname":{"type":"string"},"email":{"type":"string"},"telephone":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1},"comment":{"type":"string"}},"required":["products"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["magentoGetCustomer","magentoGetOrdersByCustomer","magentoGetOrderById","magentoSearchProducts","magentoGetProductById","magentoListShippingOptions"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"magentoConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","listShippingOptions"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento order increment id (receipt number) or numeric entity id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento product id."}},"required":["productId"]},"listShippingOptions":{"type":"object","properties":{"countryId":{"type":"string","description":"Destination country as ISO-2 code, e.g. \"GR\". Defaults to \"GR\"."},"postcode":{"type":"string","description":"Destination postcode. Supports templates."},"region":{"type":"string","description":"Optional region/state name."},"sku":{"type":"string","description":"Optional product SKU to price against."}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["megasoftGetCustomer","megasoftSearchProducts","megasoftGetProductByCode","megasoftListShippingMethods","megasoftListPaymentMethods","megasoftGetCustomerBalance","megasoftGetCustomerOrders","megasoftGetOrderStatus","megasoftGetCustomerPurchases","megasoftListOffers","megasoftGetItemPrice","megasoftGetProductStock","megasoftCreateOrder","megasoftCancelOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"megasoftConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchProducts","getProductByCode","listShippingMethods","listPaymentMethods","getCustomerBalance","getCustomerOrders","getOrderStatus","getCustomerPurchases","listOffers","getItemPrice","getProductStock","createOrder","cancelOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getProductByCode":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"getCustomerBalance":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."}},"required":["customerCode"]},"getCustomerOrders":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"orderNo":{"type":"string","description":"Optional order number filter. Supports templates."}},"required":["customerCode"]},"getOrderStatus":{"type":"object","properties":{"orderNo":{"type":"string","description":"Optional order number. Supports templates."},"date":{"type":"string","description":"Optional modified-since date (yyyy-MM-dd)."}}},"getCustomerPurchases":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"itemCode":{"type":"string"}},"required":["customerCode"]},"listOffers":{"type":"object","properties":{"offerId":{"type":"string"},"activeOnly":{"type":"boolean","default":true},"dateFrom":{"type":"string"}}},"getItemPrice":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["customerCode","itemCode"]},"getProductStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"createOrder":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."},"qty":{"oneOf":[{"type":"number","minimum":0},{"type":"string","minLength":1}],"description":"Quantity. Number or template string."},"comments":{"type":"string"}},"required":["customerCode","itemCode","qty"]},"cancelOrder":{"type":"object","properties":{"orderNo":{"type":"string","minLength":1,"description":"Megasoft order number. Supports templates."},"seiraPar":{"type":"string","minLength":1,"description":"Order series / parastatiko code. Supports templates."}},"required":["orderNo","seiraPar"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["gonnaOrderSearchCatalog","gonnaOrderCheckDeliveryAddress","gonnaOrderGetCustomer","gonnaOrderGetCustomerOrders","gonnaOrderGetOrderStatus","gonnaOrderCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"gonnaOrderConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["searchCatalog","checkDeliveryAddress","getCustomer","getCustomerOrders","getOrderStatus","createPaymentLink"]},"searchCatalog":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text menu search. Supports {{dynamicVariables.x}}."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"checkDeliveryAddress":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Delivery address. Supports templates."}},"required":["address"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","name"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getCustomerOrders":{"type":"object","properties":{"customerId":{"type":"string","minLength":1,"description":"Customer id. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":10,"default":5}},"required":["customerId"]},"getOrderStatus":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid. Supports templates."}},"required":["orderUuid"]},"createPaymentLink":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid to charge for. Supports templates."},"amount":{"type":"string","description":"Amount override. Leave blank to use the order total."}},"required":["orderUuid"]}},"required":["operation"],"example":{"operation":"checkDeliveryAddress","checkDeliveryAddress":{"address":"{{dynamicVariables.callerAddress}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["webhotelierCheckAvailability","webhotelierSearchBookings","webhotelierGetReservation","webhotelierGetAvailabilityCalendar","webhotelierGetRooms","webhotelierGetRates"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"webhotelierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["checkAvailability","searchBookings","getReservation","getAvailabilityCalendar","getRooms","getRates"]},"checkAvailability":{"type":"object","properties":{"checkin":{"type":"string","minLength":1,"description":"Check-in date YYYY-MM-DD. Supports templates."},"checkout":{"type":"string","minLength":1,"description":"Check-out date YYYY-MM-DD. Supports templates."},"adults":{"type":"string","minLength":1,"description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"rooms":{"type":"string","description":"Number of rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["checkin","checkout","adults"]},"searchBookings":{"type":"object","properties":{"lastName":{"type":"string","description":"Guest last name. Supports templates. Provide this or email."},"email":{"type":"string","description":"Guest email. Supports templates. Provide this or lastName."},"checkinFrom":{"type":"string","description":"Earliest check-in YYYY-MM-DD. Supports templates."},"checkinTo":{"type":"string","description":"Latest check-in YYYY-MM-DD. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getReservation":{"type":"object","properties":{"resId":{"type":"string","minLength":1,"description":"Reservation id. Supports templates."}},"required":["resId"]},"getAvailabilityCalendar":{"type":"object","properties":{"fromd":{"type":"string","minLength":1,"description":"Calendar start / check-in date YYYY-MM-DD. Supports templates."},"tod":{"type":"string","description":"Calendar end / check-out date YYYY-MM-DD (max 3 months from fromd). Supports templates."},"adults":{"type":"string","description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"room":{"type":"string","description":"Room-type code filter. Supports templates."},"rate":{"type":"string","description":"Rate id filter. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["fromd"]},"getRooms":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code for a single room. Empty = list all rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getRates":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code to scope rates. Supports templates."},"rateId":{"type":"string","description":"Rate id for a single rate (requires roomCode). Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}}},"required":["operation"],"example":{"operation":"getReservation","getReservation":{"resId":"{{dynamicVariables.resId}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hosthubIdentifyCaller","hosthubSearchReservations","hosthubGetReservation","hosthubListRentals","hosthubCheckAvailability"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hosthubConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["identifyCaller","searchReservations","getReservation","listRentals","checkAvailability"]},"identifyCaller":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"description":"Caller phone number. Supports templates (e.g. {{call.phone_number}})."}},"required":["phone"]},"searchReservations":{"type":"object","properties":{"name":{"type":"string","description":"Guest name. Supports templates. Provide one of name / phone / confirmationCode."},"phone":{"type":"string","description":"Guest phone. Supports templates."},"confirmationCode":{"type":"string","description":"Channel confirmation code. Supports templates."}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Hosthub reservation (calendar-event) id. Supports templates."}},"required":["id"]},"getRental":{"type":"object","properties":{"rentalId":{"type":"string","description":"Rental id for a single rental. Empty = list all rentals. Supports templates."}}},"checkAvailability":{"type":"object","properties":{"rentalId":{"type":"string","minLength":1,"description":"Rental id to check. Supports templates."},"from":{"type":"string","minLength":1,"description":"Start date YYYY-MM-DD. Supports templates."},"to":{"type":"string","minLength":1,"description":"End date YYYY-MM-DD. Supports templates."}},"required":["rentalId","from","to"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["prestashopGetCustomer","prestashopGetOrdersByCustomer","prestashopGetOrderById","prestashopSearchProducts","prestashopGetProductById","prestashopCreateOrder","prestashopUpdateOrderStatus"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"prestashopConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder","updateOrderStatus"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"reference":{"type":"string","description":"Exact reference (SKU) filter."},"ean13":{"type":"string","description":"Exact EAN-13 barcode filter."},"mpn":{"type":"string","description":"Exact MPN filter."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id."},"addressDeliveryId":{"oneOf":[{"type":"number"},{"type":"string"}]},"addressInvoiceId":{"oneOf":[{"type":"number"},{"type":"string"}]},"cartId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Pre-existing cart id (PrestaShop requires it)."},"currencyId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"langId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"carrierId":{"oneOf":[{"type":"number"},{"type":"string"}]},"payment":{"type":"string","minLength":1,"description":"Human-readable payment label."},"module":{"type":"string","description":"Payment module code, e.g. \"ps_checkpayment\"."},"totalPaid":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProducts":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProductsWithTax":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalShipping":{"oneOf":[{"type":"number"},{"type":"string"}]},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"product_attribute_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0},"product_name":{"type":"string"},"unit_price":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","addressDeliveryId","addressInvoiceId","cartId","carrierId","payment","totalPaid","totalProducts","totalProductsWithTax","products"]},"updateOrderStatus":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id to update."},"orderStateId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Target order_state id (numeric, store-specific)."}},"required":["orderId","orderStateId"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["airtableGetRecord","airtableSearchRecords","airtableCreateRecord","airtableUpdateRecord"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"airtableConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getRecord","searchRecords","createRecord","updateRecord"]},"getRecord":{"type":"object","properties":{"by":{"type":"string","enum":["phone","id"],"description":"Look up by mapped phone field, or by Airtable record id"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchRecords":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"createRecord":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["fields"]},"updateRecord":{"type":"object","properties":{"recordId":{"type":"string","minLength":1,"description":"Airtable record id (rec...) — supports templates"},"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["recordId","fields"]}},"required":["operation"],"example":{"operation":"getRecord","getRecord":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["jiraGetIssue","jiraSearchIssues","jiraCreateIssue","jiraUpdateIssue","jiraAddComment","jiraTransitionIssue"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"jiraConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getIssue","searchIssues","createIssue","updateIssue","addComment","transitionIssue"]},"getIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key, e.g. SUP-1234 — supports {{dynamicVariables.x}}"}},"required":["issueKey"]},"searchIssues":{"type":"object","properties":{"text":{"type":"string","description":"Free-text query — supports templates"},"jql":{"type":"string","description":"Raw JQL — overrides text when present"},"projectKey":{"type":"string","description":"Scope the search to a project key"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"createIssue":{"type":"object","properties":{"summary":{"type":"string","minLength":1,"description":"Issue summary — supports templates"},"description":{"type":"string","description":"Issue description — supports templates"},"projectKey":{"type":"string","description":"Project key — falls back to the connection default"},"issueType":{"type":"string","description":"Issue type name — falls back to the connection default"},"priority":{"type":"string","description":"Priority name (e.g. High)"},"assignee":{"type":"string","description":"Assign to a person by email or name — supports templates"}},"required":["summary"]},"updateIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key to update — supports templates"},"summary":{"type":"string","description":"New summary — supports templates"},"description":{"type":"string","description":"New description — supports templates"},"priority":{"type":"string","description":"New priority name"}},"required":["issueKey"]},"addComment":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"body":{"type":"string","minLength":1,"description":"Comment body — supports templates"}},"required":["issueKey","body"]},"transitionIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"status":{"type":"string","minLength":1,"description":"Target status name, e.g. \"In Progress\" — supports templates"}},"required":["issueKey","status"]}},"required":["operation"],"example":{"operation":"createIssue","createIssue":{"summary":"Callback requested by {{callerPhone}}","description":"{{transcript}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleChatSendMessage","googleChatSendToDefaultSpace","googleChatSendViaWebhook"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleChatConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["sendMessage","sendToDefaultSpace","sendViaWebhook"]},"sendMessage":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque Google Chat space resource (spaces/AAQA...) — set via UI picker"},"spaceDisplayName":{"type":"string","description":"Cached display name for the node summary"},"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string","description":"Optional thread key for in-thread replies"}},"required":["spaceName","body"]},"sendToDefaultSpace":{"type":"object","properties":{"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string"}},"required":["body"]},"sendViaWebhook":{"type":"object","properties":{"webhookId":{"type":"string","minLength":1,"description":"GoogleChatWebhook document id — set via UI picker"},"webhookLabel":{"type":"string","description":"Cached webhook label for the node summary"},"body":{"type":"string","minLength":1},"threadKey":{"type":"string"}},"required":["webhookId","body"]}},"required":["operation"],"example":{"operation":"sendToDefaultSpace","sendToDefaultSpace":{"body":"New lead from {{caller_name}} ({{caller_phone}})"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["searchContact"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"searchContactConfig":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Phone number to look up (template). Most reliable identifier: matched on the stored phone index, so +30/30/national forms all hit the same contact."},"email":{"type":"string","description":"Email address to look up (template). Matched case-insensitively on the main email and every listed email."},"name":{"type":"string","description":"Name to look up (template). Fuzzy: case- and accent-insensitive, Greek/Latin spellings and common inflections. May match several contacts."}},"example":{"phoneNumber":"{{call.phone_number}}","email":"","name":""}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["managedAgent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"managedAgentConfig":{"type":"object","properties":{"prompt":{"type":"string","maxLength":10000,"default":"","description":"System prompt rendered with {{transcript}}, {{call_summary}}, {{contact}}, {{extracted_entities}}"},"builtInTools":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}},"default":[],"description":"Full AgentTool configurations the LLM may call."},"apiTools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_]{1,40}$","description":"Tool name shown to the LLM; must be unique within the node"},"description":{"type":"string","minLength":10,"maxLength":500,"description":"How the LLM decides when to call this tool"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"default":[],"description":"Input schema for the LLM"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"description":"HTTP request configuration (URL, headers, method, body) — reused from function-call api runner","example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["name","description","apiConfig"]},"default":[],"description":"Inline API tools with name + description + HTTP config"},"mcpServers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the MCP server"},"description":{"type":"string","description":"Optional description"},"serverUrl":{"type":"string","format":"uri","description":"MCP server endpoint"},"transport":{"type":"string","enum":["http","sse"],"description":"Transport: http or sse"},"authType":{"type":"string","enum":["none","bearer","oauth"],"description":"Authentication mode"},"authValue":{"type":"string","description":"Token / credential value — encrypted at rest"},"enabledTools":{"type":"array","items":{"type":"string"},"description":"Whitelist of tools exposed to the LLM. Omit to expose every tool the server publishes."}},"required":["name","serverUrl","transport","authType"]},"default":[],"description":"MCP servers whose tools the LLM may call"},"models":{"type":"object","properties":{"primary":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"description":"Model used by the loop by default","example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"escalation":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Optional fallback model rerun on the whole session if primary failed/stuck. Must use the same provider as primary."}},"required":["primary"]},"limits":{"type":"object","properties":{"maxIterations":{"type":"integer","minimum":0,"maximum":50,"default":15,"description":"Hard cap on LLM turns per run. Set to 0 for no limit (cost cap still enforced)."},"maxCostUsd":{"type":"number","minimum":0,"maximum":0.5,"default":0.5,"description":"Hard cap on total cost (USD) per run. Range: 0 to 0.5."},"stuckDetection":{"type":"boolean","default":true,"description":"Bail if the model calls the same tool with the same args twice in a row"}},"default":{}},"routing":{"type":"object","properties":{"onSuccess":{"type":"string","description":"Next workflow node ID when the run completes successfully"},"onPartial":{"type":"string","description":"Next workflow node ID when the run completed but with partial results"},"onFailure":{"type":"string","description":"Next workflow node ID when the run failed"}},"default":{}},"dryRun":{"type":"boolean","default":false},"enableSubagents":{"type":"boolean","default":false},"maxConcurrentSubagents":{"type":"integer","minimum":1,"maximum":10,"default":5},"maxSubagentIterations":{"type":"integer","minimum":1,"maximum":20,"default":8},"knowledgeFileIds":{"type":"array","items":{"type":"string"},"default":[],"description":"Knowledge files the agent can search via search_knowledge. Empty list = no knowledge tool offered."},"knowledgeRerank":{"type":"object","properties":{"enabled":{"type":"boolean","default":true,"description":"Run the rerank pass. When off, top-K is taken directly from the raw retrieval score (faster but noisier context for the main agent)."},"model":{"type":"string","default":"gpt-5.6-luna","description":"Model used for the rerank pass. Should be small/cheap — its job is ranking, not reasoning. Same provider as the node's primary model."},"candidatesK":{"type":"integer","minimum":5,"maximum":200,"default":50,"description":"How many candidates to retrieve from Pinecone before reranking. Higher = better recall, more rerank tokens. 50 is the sweet spot."},"returnK":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"How many chunks to return after reranking. The main agent sees only these."}},"default":{}},"enableScraping":{"type":"boolean","default":false,"description":"When true, agent gets scrape_website(url) tool that fetches+summarises a page via ScraperService."},"workflowToolIds":{"type":"array","items":{"type":"string"},"default":[],"description":"IDs of during-call workflows the agent may call as tools. Only their duringCall triggers run; onCallEnd-triggered or managed-agent-containing workflows are rejected to prevent recursion."}},"example":{"prompt":"You are an order assistant. From the call transcript, identify the requested products, look them up, and create an order. Use the provided tools.","builtInTools":[],"apiTools":[],"mcpServers":[],"models":{"primary":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0}},"limits":{"maxIterations":15,"maxCostUsd":0.5,"stuckDetection":true},"routing":{"onSuccess":"node-success","onFailure":"node-create-ticket"},"dryRun":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"nodeType"}},"html":{"type":"string"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}]}},"required":["id","name","position","inputs","outputs"],"example":{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}},"description":"Action nodes in the flow"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"visibility":{"type":"string","enum":["private","resellerRead","resellerWrite","globalRead"],"description":"Workflow visibility and access control"},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"WorkFlowVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer; absent for workflows that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","visibility"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Handle Incoming Call","description":"Automated call handling flow","type":"flow","executeAt":"immediate","visibility":"private","trigger":{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}},"nodes":[{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"llmCompletionConfig","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"connections":[{"node":"2","input":"default","output":"default","label":"Continue"}],"files":[{"id":"file_123","filename":"welcome.wav","s3Id":"s3-file-123","displayUrl":"https://example.com/files/welcome.wav"}]}}},"knowledgeFiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"The name of the knowledge file"},"description":{"type":"string","description":"Optional description of the knowledge file"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Language of the knowledge file"},"texts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"The subject/title of the text (shown as the knowledge entry)"},"text":{"type":"string","minLength":1,"description":"The text content"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"summary":{"type":"string","description":"One line saying what this text covers, for the agent-facing knowledge index"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["name","text","generateWithAi"]},"description":"Array of text content linked with the knowledge"},"links":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The base URL for the link"},"link":{"type":"array","items":{"type":"object","properties":{"link":{"type":"string","format":"uri","description":"The actual link URL"},"enabled":{"type":"boolean","description":"Whether the link is enabled for processing"},"lastScrapedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contentHash":{"type":"string","description":"Hash of the last scraped content; lets a re-scrape skip URLs whose content is unchanged"},"etag":{"type":"string","description":"Last ETag from the origin; sent as If-None-Match so an unchanged page returns 304"},"lastModified":{"type":"string","description":"Last Last-Modified from the origin; sent as If-Modified-Since for conditional re-fetch"},"lastScrapeAttemptAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastScrapeError":{"type":"string","description":"Why the last attempt produced nothing. Cleared on a successful scrape; set means the page is failing, not merely empty"},"title":{"type":"string","description":"The page's own declared name, from its schema.org markup — used to show the agent what this knowledge base covers"},"summary":{"type":"string","description":"One line saying what this page is about, so the agent can pick the right page before searching rather than after"}},"required":["link","enabled"]},"minItems":1,"description":"Array of link details"},"scrapeInterval":{"type":"string","enum":["off","daily","weekly","monthly"],"description":"How often the link source is automatically re-scraped. \"off\" disables re-scraping; minimum cadence is daily.","default":"off"},"crawlNewLinks":{"type":"boolean","default":false,"description":"On each re-scrape, re-crawl the base URL and ingest any newly discovered links"},"selectAllByDefault":{"type":"boolean","default":false,"description":"Auto-enable links discovered by a re-scrape crawl instead of leaving them disabled"},"excludeUrls":{"type":"array","items":{"type":"string"},"default":[],"description":"URLs to never include, even if discovered by a crawl"},"allowHosts":{"type":"array","items":{"type":"string"},"description":"Extra hosts a re-scrape crawl may add pages from. The base URL's own host and its subdomains are always allowed; every other host is skipped"},"contentFilter":{"type":"string","maxLength":2000,"description":"AI instruction for which pages to keep vs permanently exclude (e.g. only upcoming shows)"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed","default":"not_started"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["url","link","generateWithAi"]},"description":"Array of links linked with the knowledge"},"files":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the file"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"file":{"type":"object","properties":{"buffer":{"type":"object","description":"Any valid JSON value"},"originalname":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"name":{"type":"string"},"encoding":{"type":"string"},"tempFilePath":{"type":"string"},"truncated":{"type":"boolean"},"md5":{"type":"string"}},"description":"File upload schema for multipart/form-data"},"buffer":{"type":"object","description":"Any valid JSON value"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"text":{"type":"string","description":"The extracted text content from the file"},"id":{"type":"string","description":"Optional unique identifier"},"s3Key":{"type":"string","description":"S3 storage key for the file"},"displayUrl":{"type":"string","description":"Public display URL for the file"},"mimeType":{"type":"string","description":"MIME type of the file"},"summary":{"type":"string","description":"One line saying what this file covers, for the agent-facing knowledge index"}},"required":["name","generateWithAi","text","mimeType"]},"description":"Array of files linked with the knowledge with S3 information"},"emails":{"type":"array","items":{"type":"object","properties":{"emailId":{"type":"string","minLength":1,"description":"The email ID"},"text":{"type":"string","minLength":1,"description":"The text content of the email"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["emailId","text"]},"description":"Array of emails linked with the knowledge"},"calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The call ID"},"text":{"type":"string","minLength":1,"description":"The text content of the call (transcript)"}},"required":["id","text"]},"description":"Array of calls linked with the knowledge"},"chats":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The chat ID"},"text":{"type":"string","minLength":1,"description":"The text content of the chat"}},"required":["id","text"]},"description":"Array of chats linked with the knowledge"},"contactIds":{"type":"array","items":{"type":"string"},"description":"Array of contact IDs who have access to this knowledge"},"publicAccess":{"type":"boolean","description":"Whether this knowledge is publicly accessible"},"summaryLevelOfDetail":{"type":"string","enum":["small","medium","large"],"description":"Level of detail for AI-generated summaries"},"knowledgeDataIds":{"type":"array","items":{"type":"string"},"description":"Array of knowledge data IDs linked with this knowledge file"},"knowledgeData":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"sourceId":{"type":"string","description":"Optional unique identifier for the source"},"source":{"type":"string","description":"The source name or identifier"},"sourceUrl":{"type":"string","description":"Originating URL for link-sourced rows"},"sourceType":{"type":"string","enum":["texts","links","files","emails","calls","chats","questions","custom"],"description":"The type of source this knowledge data comes from"},"question":{"type":"string","description":"The question or query this knowledge data answers"},"answer":{"type":"string","description":"The answer or response to the question"},"protected":{"type":"boolean","description":"Whether this knowledge data is protected from modification"},"knowledgeFileId":{"type":"string","description":"Reference to the parent knowledge file"},"contactId":{"type":"string","description":"Optional reference to the associated contact (contact id)"},"isPrimaryVector":{"type":"boolean","description":"True for the canonical Q&A row; false for the auxiliary embedding row."},"timesUsed":{"type":"number","description":"Number of times this knowledge data has been used/accessed"},"alternates":{"type":"array","items":{"type":"string"},"description":"Alternate phrasings of the question (extra retrieval entry points to the same answer)"},"alternatesGenerated":{"type":"boolean","description":"Alternates were AI-generated rather than supplied by the caller"},"unanswered":{"type":"boolean","description":"True when this is a question a caller asked that the agent could not answer. Never retrievable until someone supplies the answer."},"timesAsked":{"type":"number","description":"How many separate calls have asked this unanswered question — what to answer first."}},"required":["id","createdAt","active","createdBy","createdById","companyId","source","sourceType","question","answer","protected","knowledgeFileId"],"description":"Response schema for knowledge data including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","sourceId":"file_12345","source":"company_policy.pdf","sourceType":"files","question":"What are the company policies for employee conduct?","answer":"The company policies for employee conduct include maintaining professional behavior, following dress code guidelines, and treating colleagues with respect.","protected":false,"knowledgeFileId":"507f1f77bcf86cd799439011","timesUsed":0,"vectorId":"vec_12345"}},"description":"Array of knowledge data entries linked with this knowledge file"},"googleDriveFolderId":{"type":"string","description":"Google Drive folder ID"},"googleDriveFolderUpdatedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"summary":{"type":"string","description":"AI-generated summary of the knowledge content"},"keyPoints":{"type":"string","description":"AI-generated key points extracted from the knowledge content"},"hidden":{"type":"boolean","description":"When true, this file is hidden from user-facing list endpoints."},"learningAutoAdd":{"type":"boolean","description":"false = Learning auto-add never approves into this base; absent = allowed."},"autoGenerated":{"type":"boolean","description":"When true, this knowledge file is populated automatically by the system (transferred-call post-analysis)."},"sourceAgentId":{"type":"string","description":"Owning agent id when the file is auto-generated for a single agent."},"isMemoryStore":{"type":"boolean","description":"When true, marks the per-company knowledge file holding contact memories."},"isCompanyKnowledgeStore":{"type":"boolean","description":"When true, marks the per-company file collecting business-wide unanswered questions."},"isCallMemoryStore":{"type":"boolean","description":"When true, marks a hidden per-user call-memory knowledge file for voice-assist."},"sourceUserId":{"type":"string","description":"Owning user id when isCallMemoryStore is true."},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed"},"unansweredCount":{"type":"integer","minimum":0,"description":"How many unanswered caller questions are waiting on this file. Set on the agent own-file and company own-file endpoints."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","language"],"description":"Response schema for knowledge files including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Company Policies and Procedures","description":"Comprehensive guide covering all company policies, procedures, and best practices","summary":"This knowledge base contains comprehensive information about company policies...","keyPoints":"1. Employee conduct policies\n2. Remote work guidelines\n3. Safety procedures","summaryLevelOfDetail":"medium","googleDriveFolderId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveFolderUpdatedAt":"2026-10-20T15:02:35.126Z"}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt","analysisProperties"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["transfer-call"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"transferType":{"type":"string","enum":["warm","cold"]},"voipConnectionIds":{"type":"array","items":{"type":"string"}},"connectDynamically":{"type":"boolean"},"showCallerId":{"type":"boolean"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"transferCallBasedOnPromptInstructions":{"type":"boolean"},"promptForTransferReason":{"type":"string"},"announceTransferReason":{"type":"boolean"},"analyzeTransferredCall":{"type":"boolean"},"agentIdToAnalyzeTransferredCall":{"type":"string"},"secondsToWaitForCallerToAnswer":{"type":"number","minimum":10,"maximum":60},"voipConnections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for the VoIP connection"},"dial":{"type":"number","description":"Dial number or extension assigned to this connection"},"reason":{"type":"string","description":"Internal notes or purpose description for this connection"},"connectionType":{"type":"string","enum":["User","External","Agent"],"description":"Type of destination: 'Agent', 'User', or 'External'"},"agentId":{"type":"string","description":"ID of the AI agent this connection routes to (only for Agent type connections)"},"sipDomain":{"type":"string","description":"SIP domain for this connection."},"phone":{"type":"string","description":"External phone number this connection forwards to (only for External type connections)"},"userId":{"type":"string","description":"ID of the user this connection routes to (only for User type connections)"},"start":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily start time when this connection becomes available"},"end":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily end time when this connection becomes unavailable"},"canAgentTranscribe":{"type":"boolean","description":"Whether the agent can transcribe calls to this connection"},"canAgentRecord":{"type":"boolean","description":"Whether the agent can record calls to this connection"},"canAgentAnalyze":{"type":"boolean","description":"Whether the agent can analyze calls to this connection"},"canAgentSpeakWhenAsked":{"type":"boolean","description":"Whether the agent can speak when asked during calls to this connection"},"allDay":{"type":"boolean","description":"Whether this connection is available 24/7 (ignores start/end times when true)"},"syncWithGoogle":{"type":"boolean","description":"Whether availability is synchronized with Google Calendar"},"syncWithGoogleStatus":{"type":"string","enum":["open","closed"],"description":"Google Calendar sync mode: 'open' for free time availability, 'closed' for busy time unavailability"},"messageToUser":{"type":"string","description":"Custom message or announcement played before transferring calls to this connection"},"aiGeneratedMessage":{"type":"boolean","description":"Whether transfer messages are dynamically generated by AI based on call context"},"transcription_enabled":{"type":"boolean","description":"Whether real-time transcription is enabled for calls on this connection"},"agent":{"type":"object","properties":{"id":{"type":"string","description":"Agent's unique identifier"},"name":{"type":"string","description":"Agent's display name"}},"description":"Full agent details when connectionType is 'Agent' (populated from agents database)"},"user":{"type":"object","properties":{"id":{"type":"string","description":"User's unique identifier"},"name":{"type":"string","description":"User's full name"},"email":{"type":"string","description":"User's email address"},"defaultCompanyId":{"type":"string","description":"User's default company ID"},"picture":{"type":"string","description":"User's profile picture URL"},"emailVerified":{"type":"boolean","description":"Whether the user's email has been verified"},"lastConnectedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"isConnected":{"type":"boolean","description":"Whether the user is currently online/connected"}},"description":"Full user details when connectionType is 'User' (populated from users database)"},"username":{"type":"string","description":"SIP username for direct authentication (advanced configurations only)"},"password":{"type":"string","description":"SIP password for direct authentication (advanced configurations only)"},"ipAddress":{"type":"array","items":{"type":"string"},"description":"Whitelist of allowed IP addresses for security restrictions"},"extensionRegistrationIds":{"type":"array","items":{"type":"string"},"description":"IDs of the extension registrations linked with this connection"},"extensionRegistrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"voipConnectionId":{"type":"string","description":"ID of the VoIP Connection that owns this extension (legacy)"},"phoneExtensionId":{"type":"string","description":"ID of the Phone Extension that owns this extension"},"username":{"type":"string","description":"SIP username/extension that is registered"},"contactUri":{"type":"string","description":"Full SIP Contact URI for routing calls to this extension"},"remoteAddress":{"type":"string","description":"IP address of the registered SIP client"},"clientIp":{"type":"string","description":"Public client IP when known"},"remotePort":{"type":"number","description":"Port number of the registered SIP client"},"transport":{"type":"string","enum":["udp","tcp","tls","websocket"],"description":"Transport protocol: 'udp', 'tcp', 'tls' for SIP; 'websocket' for app clients"},"registeredAt":{"type":"string","format":"date-time","description":"Timestamp when this extension was registered (ISO 8601 format)"},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp when this registration will expire (ISO 8601 format)"},"expires":{"type":"number","description":"Number of seconds until expiration (decreases over time)"},"userAgent":{"type":"string","description":"SIP User-Agent identifying the client software"},"callId":{"type":"string","description":"SIP Call-ID from the REGISTER request"},"bindingSource":{"type":"string","enum":["register","invite"],"description":"'register' = the phone sent a REGISTER and can be rung; 'invite' = stand-in written from an authenticated outbound INVITE, used only for that call's in-dialog requests and never for ringing the phone"},"consecutiveInviteFailures":{"type":"integer","description":"Liveness skip-list counter. Bumped on 5xx/timeout from fork-INVITEs, reset on 200 OK. When ≥3 and `lastInviteFailureAt` is within the last 5 minutes, the registration is skipped by routing."},"lastInviteFailureAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"voipConnection":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"agentId":{"type":"string"},"userId":{"type":"string"},"connectionType":{"type":"string"}},"description":"Legacy VoIP Connection — only populated for pre-migration rows."},"userEndpoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"number":{"type":"string"},"status":{"type":"string"}},"description":"Populated UserEndpoint this registration belongs to."}},"required":["id","createdAt","active","createdBy","createdById","companyId","username","contactUri","remoteAddress","remotePort","transport","registeredAt","expiresAt","expires"],"description":"Extension registration details including contact information and expiration status","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","voipConnectionId":"507f1f77bcf86cd799439011","username":"1001","contactUri":"sip:1001@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300,"userAgent":"Zoiper 5.5.10","callId":"abc123@192.168.1.100","voipConnection":{"id":"507f1f77bcf86cd799439011","name":"Customer Support","agentId":"507f1f77bcf86cd799439012","connectionType":"Agent"}}},"description":"Active SIP device registrations for this connection (virtual populate from ExtensionRegistration collection, filtered to show only non-expired registrations). Each entry represents a physical device (phone, softphone, etc.) currently registered with this extension."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","connectionType","syncWithGoogle","syncWithGoogleStatus"],"description":"Response schema for VoIP connection including complete configuration, company metadata, and linked agent or user details","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support","dial":1,"reason":"General customer support inquiries","connectionType":"Agent","agentId":"507f1f77bcf86cd799439011","phone":"+1234567890","userId":"507f1f77bcf86cd799439012","start":{"hours":9,"minutes":0},"end":{"hours":17,"minutes":0},"canAgentTranscribe":true,"canAgentRecord":true,"canAgentAnalyze":true,"canAgentSpeakWhenAsked":false,"allDay":false,"syncWithGoogle":true,"syncWithGoogleStatus":"open","messageToUser":"Welcome to customer support!","aiGeneratedMessage":false,"agent":{"id":"507f1f77bcf86cd799439011","name":"John Doe","email":"john@example.com"},"user":{"id":"507f1f77bcf86cd799439012","name":"Jane Smith","email":"jane@example.com"},"registrations":[{"id":"507f1f77bcf86cd799439013","username":"customer_support","contactUri":"sip:customer_support@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300}]}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","transferType"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["end-call"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["press-digit"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["email"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","emailConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["sms"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","smsConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["api"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","apiConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["logic-split"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["extract-analysis"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"prompt":{"type":"string"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions"]}],"discriminator":{"propertyName":"nodeType"},"description":"Node-specific data and configuration"},"html":{"type":"string","description":"HTML content for the node display"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}],"description":"Type identifier for the node"}},"required":["id","name","position","inputs","outputs"],"example":{"id":"1","name":"Welcome Message","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"}]},"inputs":{},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}}},"connections":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","description":"Target node identifier for the connection"},"input":{"type":"string","description":"Input port identifier on the target node"},"output":{"type":"string","description":"Output port identifier on the source node"},"label":{"type":"string","description":"Display label for the connection"}},"required":["node"],"description":"Schema for a connection between two flow nodes","example":{"node":"2","input":"default","output":"default","label":"Continue"}}},"integrations":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"source":{"type":"string"},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"read":{"type":"boolean"},"write":{"type":"boolean"}},"required":["name","read","write"]}}},"required":["enabled","source","properties"]}},"knowledgeFiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"The name of the knowledge file"},"description":{"type":"string","description":"Optional description of the knowledge file"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Language of the knowledge file"},"texts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"The subject/title of the text (shown as the knowledge entry)"},"text":{"type":"string","minLength":1,"description":"The text content"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"summary":{"type":"string","description":"One line saying what this text covers, for the agent-facing knowledge index"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["name","text","generateWithAi"]},"description":"Array of text content linked with the knowledge"},"links":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The base URL for the link"},"link":{"type":"array","items":{"type":"object","properties":{"link":{"type":"string","format":"uri","description":"The actual link URL"},"enabled":{"type":"boolean","description":"Whether the link is enabled for processing"},"lastScrapedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contentHash":{"type":"string","description":"Hash of the last scraped content; lets a re-scrape skip URLs whose content is unchanged"},"etag":{"type":"string","description":"Last ETag from the origin; sent as If-None-Match so an unchanged page returns 304"},"lastModified":{"type":"string","description":"Last Last-Modified from the origin; sent as If-Modified-Since for conditional re-fetch"},"lastScrapeAttemptAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastScrapeError":{"type":"string","description":"Why the last attempt produced nothing. Cleared on a successful scrape; set means the page is failing, not merely empty"},"title":{"type":"string","description":"The page's own declared name, from its schema.org markup — used to show the agent what this knowledge base covers"},"summary":{"type":"string","description":"One line saying what this page is about, so the agent can pick the right page before searching rather than after"}},"required":["link","enabled"]},"minItems":1,"description":"Array of link details"},"scrapeInterval":{"type":"string","enum":["off","daily","weekly","monthly"],"description":"How often the link source is automatically re-scraped. \"off\" disables re-scraping; minimum cadence is daily.","default":"off"},"crawlNewLinks":{"type":"boolean","default":false,"description":"On each re-scrape, re-crawl the base URL and ingest any newly discovered links"},"selectAllByDefault":{"type":"boolean","default":false,"description":"Auto-enable links discovered by a re-scrape crawl instead of leaving them disabled"},"excludeUrls":{"type":"array","items":{"type":"string"},"default":[],"description":"URLs to never include, even if discovered by a crawl"},"allowHosts":{"type":"array","items":{"type":"string"},"description":"Extra hosts a re-scrape crawl may add pages from. The base URL's own host and its subdomains are always allowed; every other host is skipped"},"contentFilter":{"type":"string","maxLength":2000,"description":"AI instruction for which pages to keep vs permanently exclude (e.g. only upcoming shows)"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed","default":"not_started"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["url","link","generateWithAi"]},"description":"Array of links linked with the knowledge"},"files":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the file"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"file":{"type":"object","properties":{"buffer":{"type":"object","description":"Any valid JSON value"},"originalname":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"name":{"type":"string"},"encoding":{"type":"string"},"tempFilePath":{"type":"string"},"truncated":{"type":"boolean"},"md5":{"type":"string"}},"description":"File upload schema for multipart/form-data"},"buffer":{"type":"object","description":"Any valid JSON value"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"text":{"type":"string","description":"The extracted text content from the file"},"id":{"type":"string","description":"Optional unique identifier"},"s3Key":{"type":"string","description":"S3 storage key for the file"},"displayUrl":{"type":"string","description":"Public display URL for the file"},"mimeType":{"type":"string","description":"MIME type of the file"},"summary":{"type":"string","description":"One line saying what this file covers, for the agent-facing knowledge index"}},"required":["name","generateWithAi","text","mimeType"]},"description":"Array of files linked with the knowledge with S3 information"},"emails":{"type":"array","items":{"type":"object","properties":{"emailId":{"type":"string","minLength":1,"description":"The email ID"},"text":{"type":"string","minLength":1,"description":"The text content of the email"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["emailId","text"]},"description":"Array of emails linked with the knowledge"},"calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The call ID"},"text":{"type":"string","minLength":1,"description":"The text content of the call (transcript)"}},"required":["id","text"]},"description":"Array of calls linked with the knowledge"},"chats":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The chat ID"},"text":{"type":"string","minLength":1,"description":"The text content of the chat"}},"required":["id","text"]},"description":"Array of chats linked with the knowledge"},"contactIds":{"type":"array","items":{"type":"string"},"description":"Array of contact IDs who have access to this knowledge"},"publicAccess":{"type":"boolean","description":"Whether this knowledge is publicly accessible"},"summaryLevelOfDetail":{"type":"string","enum":["small","medium","large"],"description":"Level of detail for AI-generated summaries"},"knowledgeDataIds":{"type":"array","items":{"type":"string"},"description":"Array of knowledge data IDs linked with this knowledge file"},"knowledgeData":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"sourceId":{"type":"string","description":"Optional unique identifier for the source"},"source":{"type":"string","description":"The source name or identifier"},"sourceUrl":{"type":"string","description":"Originating URL for link-sourced rows"},"sourceType":{"type":"string","enum":["texts","links","files","emails","calls","chats","questions","custom"],"description":"The type of source this knowledge data comes from"},"question":{"type":"string","description":"The question or query this knowledge data answers"},"answer":{"type":"string","description":"The answer or response to the question"},"protected":{"type":"boolean","description":"Whether this knowledge data is protected from modification"},"knowledgeFileId":{"type":"string","description":"Reference to the parent knowledge file"},"contactId":{"type":"string","description":"Optional reference to the associated contact (contact id)"},"isPrimaryVector":{"type":"boolean","description":"True for the canonical Q&A row; false for the auxiliary embedding row."},"timesUsed":{"type":"number","description":"Number of times this knowledge data has been used/accessed"},"alternates":{"type":"array","items":{"type":"string"},"description":"Alternate phrasings of the question (extra retrieval entry points to the same answer)"},"alternatesGenerated":{"type":"boolean","description":"Alternates were AI-generated rather than supplied by the caller"},"unanswered":{"type":"boolean","description":"True when this is a question a caller asked that the agent could not answer. Never retrievable until someone supplies the answer."},"timesAsked":{"type":"number","description":"How many separate calls have asked this unanswered question — what to answer first."}},"required":["id","createdAt","active","createdBy","createdById","companyId","source","sourceType","question","answer","protected","knowledgeFileId"],"description":"Response schema for knowledge data including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","sourceId":"file_12345","source":"company_policy.pdf","sourceType":"files","question":"What are the company policies for employee conduct?","answer":"The company policies for employee conduct include maintaining professional behavior, following dress code guidelines, and treating colleagues with respect.","protected":false,"knowledgeFileId":"507f1f77bcf86cd799439011","timesUsed":0,"vectorId":"vec_12345"}},"description":"Array of knowledge data entries linked with this knowledge file"},"googleDriveFolderId":{"type":"string","description":"Google Drive folder ID"},"googleDriveFolderUpdatedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"summary":{"type":"string","description":"AI-generated summary of the knowledge content"},"keyPoints":{"type":"string","description":"AI-generated key points extracted from the knowledge content"},"hidden":{"type":"boolean","description":"When true, this file is hidden from user-facing list endpoints."},"learningAutoAdd":{"type":"boolean","description":"false = Learning auto-add never approves into this base; absent = allowed."},"autoGenerated":{"type":"boolean","description":"When true, this knowledge file is populated automatically by the system (transferred-call post-analysis)."},"sourceAgentId":{"type":"string","description":"Owning agent id when the file is auto-generated for a single agent."},"isMemoryStore":{"type":"boolean","description":"When true, marks the per-company knowledge file holding contact memories."},"isCompanyKnowledgeStore":{"type":"boolean","description":"When true, marks the per-company file collecting business-wide unanswered questions."},"isCallMemoryStore":{"type":"boolean","description":"When true, marks a hidden per-user call-memory knowledge file for voice-assist."},"sourceUserId":{"type":"string","description":"Owning user id when isCallMemoryStore is true."},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed"},"unansweredCount":{"type":"integer","minimum":0,"description":"How many unanswered caller questions are waiting on this file. Set on the agent own-file and company own-file endpoints."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","language"],"description":"Response schema for knowledge files including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Company Policies and Procedures","description":"Comprehensive guide covering all company policies, procedures, and best practices","summary":"This knowledge base contains comprehensive information about company policies...","keyPoints":"1. Employee conduct policies\n2. Remote work guidelines\n3. Safety procedures","summaryLevelOfDetail":"medium","googleDriveFolderId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveFolderUpdatedAt":"2026-10-20T15:02:35.126Z"}}},"workflows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"triggers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCallStart","onCallConnect","onCallEnd","onCallTransfer","onMissedCall","onDTMFInput","onKeywordDetected","duringCall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"functionName":{"type":"string","pattern":"^[a-z0-9_]+$"},"keywords":{"type":"array","items":{"type":"string"}},"condition":{"type":"string"},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"generateMessageBeforeRunningWorkflow":{"type":"boolean"},"messageAiGenerated":{"type":"boolean"},"messagePrompt":{"type":"string"},"playWaitMusic":{"type":"boolean","description":"When true (default), play keyboard wait music while this duringCall workflow tool runs"},"useProtectedValues":{"type":"boolean","description":"onCallEnd only. When true, the non-AI steps of this workflow (API call, integrations, booking, email, SMS, sheets, conditions) get the REAL values the caller said ({{protected.afm}}, {{afm_1}}, …) when the agent protects sensitive data; AI steps (llmCompletion, aiResponse, managedAgent, googleSearch) always get placeholders. Every use is audited. Only members who may reveal sensitive data can turn it on."}},"example":{"keywords":["hello","world"],"condition":"call_started","parameters":[{"name":"call_id","value":"123"}],"playWaitMusic":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onEmailReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"emailFilters":{"type":"object","properties":{"from":{"type":"array","items":{"type":"string"}},"subject":{"type":"array","items":{"type":"string"}},"labels":{"type":"array","items":{"type":"string"}}}}},"example":{"emailFilters":{"from":["test@test.com"],"subject":["test"],"labels":["test"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onAPICall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"payloadSchema":{"type":"object","properties":{"type":{"type":"string","enum":["object"]},"properties":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","enum":["object","array","string","number","boolean","date","enum"]},"required":{"type":"boolean","default":false},"properties":{"type":"object","additionalProperties":{"type":"object","description":"Circular reference detected"}},"items":{"type":"object","description":"Circular reference detected"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"},"minimum":{"type":"number"},"maximum":{"type":"number"},"enum":{"type":"array","items":{"type":"string"}}},"required":["type"]}},"required":{"type":"array","items":{"type":"string"}}},"required":["type","properties"],"description":"Expected payload structure"}},"example":{"payloadSchema":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^TX-[0-9]{8}$"},"amount":{"type":"number","minimum":0},"currency":{"type":"string","enum":["USD","EUR","GBP"]}},"required":["transactionId","amount","currency"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onContactCreated","onCompanyCreated","onDealCreated","onTicketCreated","onPropertyChange"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","property"]},"property":{"type":"string","enum":["hs_lead_status","lifecyclestage","hubspot_owner_id","companyname","domain","dealstage","amount","closedate","closed_won_reason","closed_lost_reason","pipeline","hs_pipeline_stage","hs_due_date"]}},"example":{"resource":"contact","property":"hs_lead_status"}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onWooCommerce"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"getCustomerOrders":{"type":"boolean"},"getProductByName":{"type":"boolean"},"getProductByCode":{"type":"boolean"},"productCodeType":{"type":"string","enum":["id","sku","global_unique_id"]},"createOrder":{"type":"boolean"},"getOrderById":{"type":"boolean"},"notifyEmailsOnOrderCreation":{"type":"array","items":{"type":"string"}}},"example":{"getCustomerOrders":true,"getProductByName":true,"getProductByCode":true,"productCodeType":"id","createOrder":true,"getOrderById":true,"notifyEmailsOnOrderCreation":["test@test.com"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onYubotoPbxChannelHangup","onYubotoPbxChannelAnswer","onYubotoPbxChannelCreate"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"agentId":{"type":"string"},"allowedExtensions":{"type":"array","items":{"type":"string"}}},"example":{"username":"test","password":"test","agentId":"test","allowedExtensions":["123","456"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCampaignLeadStatusChanged"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign to watch. Omit to fire for every campaign of the company."},"statuses":{"type":"array","items":{"type":"string","enum":["successful","failed","reachedMaxRetries","askedToCallBackLater","askedToNeverCallAgain","cancelled"]},"description":"Lead statuses that fire the workflow. Omit or empty = every outcome status."},"stages":{"type":"array","items":{"type":"string"},"description":"Only fire when the lead is in one of these campaign stage names. Omit or empty = any stage."}},"example":{"campaignId":"66f1c0ffee0000000000abcd","statuses":["failed","reachedMaxRetries"],"stages":[]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onShopifyEvent"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["orders/create","orders/paid","orders/fulfilled","orders/partially_fulfilled","orders/cancelled","refunds/create","fulfillments/create","fulfillments/update"]},"minItems":1,"description":"Shopify events that start the workflow."},"financialStatuses":{"type":"array","items":{"type":"string","enum":["pending","authorized","partially_paid","paid","partially_refunded","refunded","voided"]},"description":"Only when the order payment status is one of these. Empty = any."},"fulfillmentStatuses":{"type":"array","items":{"type":"string","enum":["unfulfilled","partial","fulfilled","restocked"]},"description":"Only when the order fulfillment status is one of these. Empty = any."},"shipmentStatuses":{"type":"array","items":{"type":"string","enum":["label_printed","label_purchased","confirmed","in_transit","out_for_delivery","attempted_delivery","ready_for_pickup","delivered","failure"]},"description":"Shipment topics only: only when the carrier status is one of these. Empty = any."},"paymentGateways":{"type":"array","items":{"type":"string"},"description":"Only when a payment gateway name contains one of these (case-insensitive), e.g. \"Cash on Delivery\". Empty = any."},"tags":{"type":"array","items":{"type":"string"},"description":"Only when the order has at least one of these tags (case-insensitive). Empty = any."},"minTotal":{"type":"number","minimum":0,"description":"Only when the order total is at least this amount."},"maxTotal":{"type":"number","minimum":0,"description":"Only when the order total is at most this amount."}},"required":["topics"],"example":{"topics":["orders/create"],"financialStatuses":["pending"],"paymentGateways":["Cash on Delivery"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onLeadReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"string","enum":["tiktok","meta","google_ads","linkedin","webhook","form"]},"description":"Only leads from these sources start the workflow. Empty = any source, including ones added later."},"formIds":{"type":"array","items":{"type":"string","minLength":1},"description":"Only these forms: our lead form ids (from lead_forms_list_forms). A platform form id or a form name also matches, for older triggers. Empty = any."},"requirePhone":{"type":"boolean","description":"Skip a lead with no phone number."},"includeTestSubmissions":{"type":"boolean","description":"Also fire for test submissions. Off by default."}},"example":{"sources":["google_ads","form"],"requirePhone":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"triggerType"}}},"required":["id","name","position","outputs"],"example":{"id":1,"name":"Call Start Trigger","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"},{"node":"3","output":"default"}]},"className":"trigger-node","data":{"triggerType":"onCallStart","triggerConfig":{"enabled":true,"triggerType":"onCallEnd","description":"Trigger when a new call starts"},"transitions":[2,3]}}},"description":"Trigger node that starts the flow"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"nodeType":{"type":"string","enum":["emailConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["nodeType","nodeTitle","transitions","emailConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendSms"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["nodeType","nodeTitle","transitions","smsConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["apiCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["nodeType","nodeTitle","transitions","apiConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["codeExecution"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"codeConfig":{"type":"object","properties":{"code":{"type":"string"},"language":{"type":"string","enum":["javascript","python","java","cpp","php","ruby"]},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties for the code"}},"required":["code","language"],"example":{"code":"console.log(\"Hello, world!\");","language":"javascript","properties":[{"name":"name","type":"string"}]}}},"required":["nodeType","nodeTitle","transitions","codeConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleDocConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}}},"required":["nodeType","nodeTitle","transitions","googleDocConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createEvent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"eventConfig":{"type":"object","properties":{"calendarId":{"type":"string","description":"Google calendar id. Empty = the company's primary calendar."},"summary":{"type":"string","description":"Event title."},"startDateTime":{"type":"string","description":"Start, ISO 8601 (\"2026-08-12T15:00:00\") or \"YYYY-MM-DD HH:mm\"."},"endDateTime":{"type":"string","description":"End. Empty = start + durationMinutes."},"durationMinutes":{"type":"number","minimum":1,"maximum":1440,"description":"Used only when endDateTime is empty. Defaults to 30."},"description":{"type":"string"},"location":{"type":"string"},"attendees":{"type":"string","description":"Comma-separated emails."},"timeZone":{"type":"string","description":"IANA zone. Empty = the company timezone."},"isOnline":{"type":"boolean","description":"When true, Google adds a Meet link to the event."}},"required":["durationMinutes"],"example":{"summary":"Callback for {{contact_name}}","startDateTime":"{{callback_datetime}}","durationMinutes":30,"description":"Requested during call {{call_id}}","attendees":"sales@example.com","isOnline":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendPhoneCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}}},"required":["nodeType","nodeTitle","transitions","phoneCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["llmCompletion"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}}},"required":["nodeType","nodeTitle","transitions","llmCompletionConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheet"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]}},"required":["nodeType","nodeTitle","transitions","googleSheetConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}}},"required":["nodeType","nodeTitle","transitions","googleSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendViber"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}}},"required":["nodeType","nodeTitle","transitions","viberConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["switch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"switchConfig":{"type":"object","properties":{"cases":{"type":"array","items":{"type":"object","properties":{"block":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"transition":{"type":"string"},"transitionIndex":{"type":"number"}},"required":["block"]}}},"required":["cases"],"example":{"cases":[{"transition":"Schedule Appointment","transitionIndex":1,"block":{"operator":"and","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"schedule_appointment","fieldType":"string"}]}},{"transition":"Cancel Appointment","transitionIndex":0,"block":{"operator":"or","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"cancel_appointment","fieldType":"string"}]}}]}}},"required":["nodeType","nodeTitle","transitions","switchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["if"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"ifConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","ifConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["filter"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"filterConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","filterConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["loop"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"loopConfig":{"type":"object","properties":{"array":{"type":"string"}},"required":["array"],"example":{"array":"user_response"}}},"required":["nodeType","nodeTitle","transitions","loopConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["tableNode"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"tableConfig":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","maxLength":128},"type":{"type":"string","enum":["string","number","boolean"]}},"required":["key","label"]},"maxItems":50},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"maxItems":500},"filters":{"type":"array","items":{"type":"object","properties":{"column":{"type":"string","minLength":1},"op":{"type":"string","enum":["equals","notEquals","contains","gt","lt","gte","lte"]},"value":{"type":"string"}},"required":["column","op","value"]}},"mode":{"type":"string","enum":["producer","lookup"]},"keyColumn":{"type":"string"},"keyValue":{"type":"string"}},"required":["columns","rows"],"example":{"columns":[{"key":"name","label":"Name","type":"string"},{"key":"phone","label":"Phone","type":"string"}],"rows":[{"name":"Alice","phone":"+30 210 1234567"},{"name":"Bob","phone":"+30 210 7654321"}],"mode":"producer"}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hubspotContact","hubspotCompany","hubspotDeal","hubspotTicket","hubspotTask","hubspotNote","hubspotMeeting","hubspotEmail","hubspotCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hubspotConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"operation":{"type":"string","enum":["get","create","createOrUpdate","getOrCreate","delete","update","search","list","exists"]},"value":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"associations":{"type":"array","items":{"type":"object","properties":{"associationType":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["associationType","valueType","value"],"example":{"associationType":"contact","valueType":"id","value":"123"}}},"owner":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"contactData":{"type":"object","properties":{"properties":{"type":"object","properties":{"email":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"}},"required":[]}},"example":{"email":"test@test.com","firstname":"John","lastname":"Doe","phone":"+1234567890","company":"Test Corp","website":"https://test.com","lifecyclestage":"marketingqualifiedlead","jobtitle":"Manager","hs_additional_emails":["test2@test.com"]}},"companyData":{"type":"object","properties":{"properties":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"industry":{"type":"string"},"description":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"}},"required":[]}},"example":{"name":"Test Corp","domain":"test.com","industry":"Technology","description":"Test Description","city":"Test City","country":"Test Country","phone":"1234567890","address":"Test Address","owner":{"valueType":"email","value":"test@test.com"}}},"dealData":{"type":"object","properties":{"properties":{"type":"object","properties":{"dealname":{"type":"string"},"pipeline":{"type":"string"},"stage":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string"},"closeDate":{"type":"string"},"dealType":{"type":"string","enum":["new","existing"]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["pipeline","stage"]}},"example":{"name":"Test Deal","description":"Test Description","amount":"1000","stage":"Test Stage"}},"ticketData":{"type":"object","properties":{"properties":{"type":"object","properties":{"pipeline":{"type":"string"},"stage":{"type":"string"},"priority":{"type":"string","enum":["HIGH","MEDIUM","LOW"]},"subject":{"type":"string"},"content":{"type":"string"}},"required":["pipeline","stage","subject"]}},"example":{"pipeline":"Test Pipeline","stage":"Test Stage","priority":"HIGH","subject":"Test Subject","content":"Test Content"}},"taskData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string"},"taskType":{"type":"string"},"priority":{"type":"string"},"dueDate":{"type":"string"},"repeatType":{"type":"object","properties":{"enabled":{"type":"boolean"},"type":{"type":"string","enum":["hour","day","week","month","year"]},"value":{"type":"string"}},"example":{"enabled":true,"type":"day","value":"1"}},"reminderTime":{"oneOf":[{"type":"number"},{"type":"string"}]},"notes":{"type":"string"}},"required":["title","dueDate"]}},"example":{"associations":[{"associationType":"contact","valueType":"email","value":"contact@example.com"}],"properties":{"title":"Task Title","taskType":"TODO","priority":"MEDIUM","associations":[],"timestamp":"2021-01-01","dueDate":"2021-01-01","notes":"Task Notes","ownerEmail":"owner@example.com","status":"NOT_STARTED","reminderTime":1000}}},"noteData":{"type":"object","properties":{"properties":{"type":"object","properties":{"body":{"type":"string"}},"required":[]}}},"meetingData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title of the meeting"},"body":{"type":"string","description":"Meeting description"}}}},"required":["properties"],"example":{"properties":{"title":"Initial Project Discussion","body":"Meeting to discuss project requirements and timeline"}}},"emailData":{"type":"object","properties":{"properties":{"type":"object","properties":{"subject":{"type":"string","description":"Subject of the email"},"body":{"type":"string","description":"Email body content"}},"required":[]}},"example":{"properties":{"subject":"Project Update","body":"Here are the latest updates on the project progress."}}},"callData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title/subject of the call"},"body":{"type":"string","description":"Call description and notes"},"direction":{"type":"string","enum":["INBOUND","OUTBOUND"],"description":"Call direction"},"caller":{"type":"string","description":"Caller phone number"},"callee":{"type":"string","description":"Callee phone number"},"duration":{"type":"string","description":"Call duration in milliseconds"},"disposition":{"type":"string","enum":["9d9162e7-6cf3-4944-bf63-4dff82258764","f240bbac-87c9-4f6e-bf70-924b57d47db7","a4c4c377-d246-4b32-a13b-75a56a4cd0ff","b2cf5968-551e-4856-9783-52b3da59a7d0","73a0d17f-1163-4015-bdd5-ec830791da20","17b47fee-58de-441e-a44c-c6300d46f273"],"description":"Call disposition"},"recordingUrl":{"type":"string","description":"Call recording URL"}},"required":[]}},"example":{"properties":{"title":"Test Call","body":"Test Body"}}}},"required":["resource","operation"],"example":{"resource":"call","operation":"create","owner":{"valueType":"email","value":"test@test.com"},"properties":{"callData":{"properties":{"callTitle":"Test Call","callBody":"Test Body"}}}}}},"required":["nodeType","nodeTitle","transitions","hubspotConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheetSettings"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetSettingsConfig":{"type":"object","properties":{"googleSheetId":{"type":"string","minLength":1,"description":"The unique identifier of the Google Sheet"},"sheetName":{"type":"string","minLength":1,"description":"The name of the specific sheet within the Google Sheet"},"operation":{"type":"string","enum":["getRow","getRows","updateRow","appendRow","deleteRow","getData"],"description":"The operation to perform on the Google Sheet (getRow, getRows, updateRow, appendRow, deleteRow)"},"filter":{"type":"object","properties":{"filterType":{"type":"string","enum":["index","columnName"]},"column":{"type":"string"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"fieldType":{"type":"string","enum":["string","phone","email","number","boolean","date","time","enum"]},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["filterType","column","operator","fieldType"],"example":{"filterType":"index","column":"1","operator":"eq","fieldType":"string","fieldValue":"Chris"},"description":"Filter to apply for selecting rows, such as by index or column name"},"values":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"object","description":"Any valid JSON value"}},"required":["key","value"]},"description":"Key-value pairs for the row data"}},"required":["googleSheetId","sheetName","operation"],"example":{"googleSheetId":"123","sheetName":"Sheet1","operation":"getRow","filter":{"filterType":"index","column":"1","operator":"eq","fieldType":"number","fieldValue":"152"},"values":[{"key":"Email","value":"john.doe@example.com"},{"key":"Name","value":"John Doe"}]}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["aiResponse"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}}},"required":["nodeType","nodeTitle","transitions","aiResponseConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["transferCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["nodeType","nodeTitle","transitions","transferCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["afmSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"afmSearchConfig":{"type":"object","properties":{"afm":{"type":"string","description":"AFM of company"}},"required":["afm"],"example":{"afm":"8022188180"}}},"required":["nodeType","nodeTitle","transitions","afmSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["galaxyGetCustomer","galaxySearchItems","galaxyCheckStock","galaxyGetPrice","galaxyCalculateOrder","galaxyPlaceOrder","galaxyUpdateOrder","galaxyGetOrderStatus","galaxyGetTransactionHistory","galaxyGetCustomerBalance","galaxyGetCustomerAging","galaxyGetFinInfoPerDrugType","galaxyGetItemPurchases","galaxyGetCustomerKartelaLink","galaxyFindItemsByActiveIngredient","galaxyGetInvoicePdfLinks","galaxyGetNextRoute","galaxyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"galaxyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","checkStock","getPrice","calcLines","calculateOrder","placeOrder","updateOrder","getOrderStatus","getTransactionHistory","getCustomerBalance","getCustomerAging","getFinInfoPerDrugType","getItemPurchases","getCustomerKartelaLink","findItemsByActiveIngredient","getInvoicePdfLinks","getNextRoute","customRequest"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","custCode"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query (supports {{variables.x}})"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"checkStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"wrhsCode":{"type":"string","description":"Overrides the company default warehouse"}},"required":["itemCode"]},"getPrice":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"}},"required":["EntryType","Date","Quantity"]},"calcLines":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"},"WrhsCode":{"type":"string"},"AlterCode":{"type":"string"},"Barcode":{"type":"string"}},"required":["EntryType","Date","Quantity","WrhsCode"]},"placeOrder":{"type":"object","properties":{"entry":{"type":"object","properties":{"CompID":{"type":"string"},"CompCode":{"type":"string"},"CmpsID":{"type":"string"},"CmpsCode":{"type":"string"},"WrhsID":{"type":"string"},"WrhsCode":{"type":"string"},"CoetID":{"type":"string"},"CoetCode":{"type":"string"},"DnumID":{"type":"string"},"TransDate":{"type":"string"},"TradeDate":{"type":"string"},"CustID":{"type":"string"},"CustCode":{"type":"string"},"CussID":{"type":"string"},"CussCode":{"type":"string"},"PytmID":{"type":"string"},"PytmCode":{"type":"string"},"MeroID":{"type":"string"},"CollMeroID":{"type":"string"},"RuteID":{"type":"string"},"UserID":{"type":"string"},"SourceType":{"type":"integer"},"RefTradeCode":{"type":"string"},"VoucherCode":{"type":"string"},"Comments":{"type":"string"},"ExecutionDate":{"type":"string"},"Street":{"type":"string"},"StreetNumber":{"type":"string"},"PostalCode":{"type":"string"},"Phone":{"type":"string"},"RegnDescription":{"type":"string"},"PrefDescription":{"type":"string"},"CntrDescription":{"type":"string"},"AddressDescr":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"EntryStatus":{"type":"integer"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1},"ID":{"type":"string"},"FastNumber":{"type":"string"},"TotalValue":{"type":"number"},"NetValue":{"type":"number"},"VatValue":{"type":"number"},"Lines":{"type":"array","items":{"type":"object","properties":{"ItcpID":{"type":"string"},"ItemCode":{"type":"string"},"RequestAQty":{"oneOf":[{"type":"number"},{"type":"string"}]},"WrhsID":{"type":"string"},"Price":{"type":"number"},"Disc1Pcnt":{"type":"number"},"Disc1Val":{"type":"number"},"Disc2Pcnt":{"type":"number"},"Disc2Val":{"type":"number"},"Disc3Pcnt":{"type":"number"},"Disc3Val":{"type":"number"},"Comments":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"DiscountBehaviour":{"type":"integer","minimum":0,"maximum":2},"ZeroingDiscounts":{"type":"integer","minimum":0,"maximum":3,"description":"v103: suppress discounts"},"ApplyDscnID":{"type":"string"},"ApplyDrulID":{"type":"string"},"CicoID":{"type":"string","description":"v103: item-collection (bundle) ID"},"AQty":{"type":"number"},"DisposalAQty":{"type":"number"},"PickingQty":{"type":"number"},"NetValue":{"type":"number"},"GrossValue":{"type":"number"}},"required":["ItcpID","ItemCode","RequestAQty","WrhsID","Price","Disc1Pcnt","Disc1Val","Disc2Pcnt","Disc2Val","Disc3Pcnt","Disc3Val","Comments","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","DiscountBehaviour","ZeroingDiscounts","ApplyDscnID","ApplyDrulID","CicoID","AQty","DisposalAQty","PickingQty","NetValue","GrossValue"]},"nullable":true},"Taxes":{"type":"array","items":{"type":"object","properties":{"FiacID":{"type":"string"},"FiacCode":{"type":"string"},"TrnValue":{"oneOf":[{"type":"number"},{"type":"string"}]},"ExchVatValue":{"type":"number"}},"required":["FiacID","FiacCode","ExchVatValue"]},"nullable":true}},"required":["CompID","CompCode","CmpsID","CmpsCode","WrhsID","WrhsCode","CoetID","CoetCode","DnumID","TransDate","TradeDate","CustID","CustCode","CussID","CussCode","PytmID","PytmCode","MeroID","CollMeroID","RuteID","UserID","SourceType","RefTradeCode","VoucherCode","Comments","ExecutionDate","Street","StreetNumber","PostalCode","Phone","RegnDescription","PrefDescription","CntrDescription","AddressDescr","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","EntryStatus","LockTransaction","ID","FastNumber","TotalValue","NetValue","VatValue","Lines","Taxes"]},"previewFirst":{"type":"boolean","default":false}},"required":["entry"]},"updateOrder":{"type":"object","properties":{"ID":{"type":"string"},"EntryStatus":{"type":"integer"},"Comments":{"type":"string"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1}},"required":["ID"]},"getOrderStatus":{"type":"object","properties":{"id":{"type":"string","description":"Optional specific transaction ID — omit to list all"},"revNum":{"type":"integer","minimum":0,"default":0},"custCode":{"type":"string","description":"List the orders of this customer instead (GetTransactions by CustCode, per branch). Template strings supported."},"dateFrom":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."}}},"getTransactionHistory":{"type":"object","properties":{"CustCode":{"type":"string"},"DateFrom":{"type":"string"},"DateTo":{"type":"string"}},"required":["CustCode","DateFrom","DateTo"]},"getCustomerBalance":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."}},"required":["custCode"]},"getCustomerAging":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"getFinInfoPerDrugType":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"fromDate":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."}},"required":["custCode"]},"getItemPurchases":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"itemCode":{"type":"string","minLength":1,"description":"Galaxy item code (from item search). Template strings supported."},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"compCode":{"type":"string","description":"Branch/company code. Defaults to the customer's branch."}},"required":["custCode","itemCode"]},"getCustomerKartelaLink":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"findItemsByActiveIngredient":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Active ingredient name or AtloID. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["query"]},"getInvoicePdfLinks":{"type":"object","properties":{"custCode":{"type":"string"},"custTin":{"type":"string"},"cussCode":{"type":"string"},"id":{"type":"string"},"dateFrom":{"type":"string"},"dateTo":{"type":"string"}}},"getNextRoute":{"type":"object","properties":{"custCode":{"type":"string","minLength":1}},"required":["custCode"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"POST"},"path":{"type":"string","minLength":1,"description":"Path added after the Galaxy ERP base URL, e.g. /api/crossdomain/advancedcustomviews/<guid>. Supports {{variables}}."},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Key/value properties sent as the query string. Values support {{variables}}."},"body":{"type":"string","description":"Optional raw JSON request body (supports {{variables}}). Example for an advanced custom view: {\"filters\":[{\"CompCode\":\"01\",\"CustCode\":\"{{node_1.custCode}}\"}],\"MasterDetailTree\":false}"},"apiResponse":{"type":"string","description":"Editor-only: JSON schema of the expected response (same as the apiCall node's \"API Response\"). Powers the variable picker so downstream nodes can reference individual response fields; at runtime the real response is flattened into node_N.* regardless."}},"required":["path"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["salesforceGetContact","salesforceCreateLead","salesforceLogCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"salesforceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","createLead","logCall"]},"getContact":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{variables.x}} / {{call.phoneNumber}}"},"objectType":{"type":"string","enum":["Contact","Lead"],"description":"For by=id: which SObject the Id belongs to (default Contact)."}},"required":["by","value"]},"createLead":{"type":"object","properties":{"lastName":{"type":"string","minLength":1,"description":"Lead last name — required by Salesforce. Supports templates."},"company":{"type":"string","minLength":1,"description":"Lead company — required by Salesforce. Supports templates."},"firstName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"description":{"type":"string","description":"Short summary of the request / call reason."}},"required":["lastName","company"]},"logCall":{"type":"object","properties":{"whoId":{"type":"string","minLength":1,"description":"Contact or Lead Id the call is logged against. Supports templates."},"subject":{"type":"string","minLength":1,"description":"Task subject, e.g. \"Inbound call — order status\"."},"description":{"type":"string","description":"Call notes."}},"required":["whoId","subject"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"by":"phone","value":"{{call.phoneNumber}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["guestyFindOwner","guestyFindGuest","guestyIdentifyCaller","guestyGetListings","guestyGetListing","guestyGetReservations","guestyGetReservation","guestyGetHouseRules","guestyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"guestyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["findOwner","findGuest","identifyCaller","getListings","getListing","getReservations","getReservation","getHouseRules","customRequest"]},"findOwner":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email"],"default":"phone","description":"Which field to search the owner by"},"value":{"type":"string","minLength":1,"description":"Search term (template, e.g. {{call.phone_number}})"}},"required":["value"]},"findGuest":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Guest phone to look up via their reservations (template)"}},"required":["value"]},"identifyCaller":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Caller phone (template) — matched against owners AND guests"}},"required":["value"]},"getListings":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated listing ids (template) — e.g. {{node_X.owner.listings}}"},"ownerId":{"type":"string","description":"Resolve the owner's listing ids first, then fetch them (template)"},"q":{"type":"string","description":"Free-text search across title/nickname/address (template)"}}},"getListing":{"type":"object","properties":{"id":{"type":"string","description":"Listing _id (template) — returns the full property"},"nickname":{"type":"string","description":"Listing nickname (template) — used when no id is known"},"fields":{"type":"string","description":"Space-separated field selection; omit for the full listing"}}},"getReservations":{"type":"object","properties":{"listingIds":{"type":"string","description":"Comma-separated listing ids to scope to (template)"},"listingNickname":{"type":"string","description":"Scope to a single listing by its nickname (template)"},"ownerId":{"type":"string","description":"Scope to all of an owner's listings (resolved to ids) (template)"},"guestPhone":{"type":"string","description":"Scope to a guest's reservations by their phone (template)"},"dateFrom":{"type":"string","description":"Window start: ISO date, `today`, or relative like `-7d` (template)"},"dateTo":{"type":"string","description":"Window end: ISO date, `today`, or relative like `+7d` (template)"},"windowDays":{"type":"integer","minimum":0,"description":"When dateFrom/dateTo are omitted, use today∓windowDays as the overlap window"},"status":{"type":"string","description":"Filter by reservation status (template)"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Reservation _id / confirmation id (template)"}},"required":["id"]},"getHouseRules":{"type":"object","properties":{"listingIds":{"type":"string","minLength":1,"description":"Comma-separated listing ids (template) — house rules are keyed by listing/unit-type"}},"required":["listingIds"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"GET"},"path":{"type":"string","minLength":1,"description":"Path after the base URL, e.g. /v1/reservations (template)"},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Query params (templates)"},"body":{"type":"string","description":"Raw JSON body (template) — ignored for GET"}},"required":["path"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"value":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["helpdeskCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"helpdeskConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createTicket"]},"createTicket":{"type":"object","properties":{"subject":{"type":"string","description":"Ticket subject (template, e.g. \"Call from {{call.phone_number}}\")"},"description":{"type":"string","description":"Ticket body (template, e.g. {{call.summary}})"},"requesterPhone":{"type":"string","description":"Requester phone (template, defaults to {{call.phone_number}})"},"requesterEmail":{"type":"string","description":"Requester email (template)"},"requesterName":{"type":"string","description":"Requester display name (template)"},"priority":{"type":"string","enum":["low","medium","high","urgent"],"description":"Ticket priority"}}}},"required":["operation"],"example":{"operation":"createTicket","createTicket":{"subject":"Call from {{call.phone_number}}","description":"{{call.summary}}","requesterPhone":"{{call.phone_number}}","priority":"medium"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["courierTrackVoucher"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"courierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["trackVoucher"]},"trackVoucher":{"type":"object","properties":{"courier":{"type":"string","description":"Courier to query (acs_courier, speedex, geniki_taxydromiki, elta_courier, boxnow, skroutz_lastmile, taxydema). Omit to try every connected courier."},"voucher":{"type":"string","description":"Voucher/tracking number (template, e.g. {{node_5.order.meta.voucher}})"}}}},"required":["operation"],"example":{"operation":"trackVoucher","trackVoucher":{"voucher":"{{node_5.order.meta.voucher}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["vivaCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"vivaConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createPaymentLink"]},"createPaymentLink":{"type":"object","properties":{"amount":{"type":"string","description":"Amount in EUR as a decimal (template, e.g. \"25.50\" or {{node_3.order.total}})"},"description":{"type":"string","description":"Shown to the customer on the checkout page (template)"},"customerName":{"type":"string","description":"Customer full name (template)"},"customerPhone":{"type":"string","description":"Customer phone (template, e.g. {{call.phone_number}})"},"language":{"type":"string","enum":["el","en"],"description":"Checkout page language"}}}},"required":["operation"],"example":{"operation":"createPaymentLink","createPaymentLink":{"amount":"25.50","description":"Πληρωμή παραγγελίας","customerPhone":"{{call.phone_number}}","language":"el"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createTrackedPage"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"trackedPageConfig":{"type":"object","properties":{"html":{"type":"string","description":"Page HTML (template, e.g. {{node_2.html}} from an llmCompletion node). Scripts and forms are stripped; styles are kept."},"title":{"type":"string","description":"Browser tab title (template)"},"expiresInDays":{"type":"integer","minimum":1,"maximum":365,"description":"How long the link stays open (default 30 days)"}},"required":["html"],"example":{"html":"{{node_2.html}}","title":"Η σύνοψη της κλήσης σας","expiresInDays":30}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["shopifyGetCustomer","shopifyGetOrdersByCustomer","shopifyGetOrderById","shopifySearchProducts","shopifyGetProductById","shopifySyncProductsToSkroutz"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"shopifyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","syncProductsToSkroutz"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search — mapped to vendor / product_type / handle."},"vendor":{"type":"string"},"productType":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify product id."}},"required":["productId"]},"syncProductsToSkroutz":{"type":"object","properties":{"maxRecords":{"type":"integer","minimum":0}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["soft1GetCustomer","soft1SearchItems","soft1GetCustomerBalance","soft1GetCustomerAging","soft1GetCustomerHistory","soft1CreateSalesDoc","soft1TransmitEInvoice"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"soft1Config":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","getCustomerHistory","createSalesDoc","transmitEInvoice"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerAging":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerHistory":{"type":"object","properties":{"trdr":{"type":"string"},"tin":{"type":"string"},"code":{"type":"string"},"from":{"type":"string","description":"ISO date YYYY-MM-DD"},"to":{"type":"string","description":"ISO date YYYY-MM-DD"},"limit":{"type":"integer","minimum":1,"maximum":500,"default":50}}},"createSalesDoc":{"type":"object","properties":{"trdr":{"oneOf":[{"type":"string"},{"type":"number"}]},"custCode":{"type":"string"},"series":{"oneOf":[{"type":"string"},{"type":"number"}]},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"mtrl":{"oneOf":[{"type":"string"},{"type":"number"}]},"code":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"transmit":{"type":"boolean"}},"required":["lines"]},"transmitEInvoice":{"type":"object","properties":{"key":{"type":"string","minLength":1},"template":{"type":"string","minLength":1}},"required":["key"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["exelixisSmartGetContact","exelixisSmartListCompanyContacts","exelixisSmartListSupportMembers","exelixisSmartCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"exelixisSmartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","listCompanyContacts","listSupportMembers","createTicket"]},"getContact":{"type":"object","properties":{"phone":{"type":"string","description":"Template — e.g. {{call.phone_number}}"},"afm":{"type":"string","description":"Template — e.g. {{dynamicVariables.afm}}"}}},"listCompanyContacts":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) to list contacts for"}},"required":["companyId"]},"listSupportMembers":{"type":"object","properties":{}},"createTicket":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) — required by the ERP"},"contactId":{"type":"string"},"supportMemberId":{"type":"string"},"title":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"callUrl":{"type":"string","description":"Template — defaults to {{call.call_url}}"}},"required":["companyId","title","summary"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["pylonGetCustomer","pylonSearchItems","pylonGetCustomerBalance","pylonCreateSalesOrder","pylonGetData","pylonPostData"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"pylonConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","createSalesOrder","getData","postData"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"createSalesOrder":{"type":"object","properties":{"customerTin":{"type":"string","description":"Customer TIN — supports {{dynamicVariables.x}}. Optional when rawData supplies the customer."},"seriesCode":{"type":"string"},"customerBranch":{"type":"string"},"paymentMethod":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0}},"required":["itemCode","quantity"]}},"rawData":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Advanced: a JSON object merged verbatim into the Pylon order payload, overriding the structured fields above. Use native Pylon column names, e.g. {\"Lines\":[{\"CenlItemCode\":\"GG11\",\"CenlAMeasurementQty\":2}],\"CsdcRemarks\":\"…\"}. String values support {{dynamicVariables.x}} templates. Bypasses the structured-field validation, so it must match the target Script exactly."}}},"getData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined getjsondata Script code, e.g. itemsVoiceAgent or custInfoVoice"},"extras":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Param name, e.g. @ItemCode or @phone"},"value":{"type":"string","description":"Param value — supports {{dynamicVariables.x}}"}},"required":["name","value"]},"description":"Script parameters; omit or [] for none"},"packageSize":{"type":"integer","minimum":1,"maximum":5000,"description":"Page size (default 200)"},"allPages":{"type":"boolean","description":"Walk every page until exhausted; otherwise just page 1"}},"required":["entitycode"]},"postData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined postdata Script code, e.g. orderVoice or SalesOrders"},"data":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"JSON object serialized into the postdata `data` field. Use the shape the target Script expects. String values support {{dynamicVariables.x}} templates."}},"required":["entitycode","data"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["entersoftGetCustomer","entersoftSearchItems","entersoftGetCustomerBalance","entersoftGetCustomerAging","entersoftRunPublicQuery","entersoftRunEbsService","entersoftCreateSalesDoc"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"entersoftOneConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","runPublicQuery","runEbsService","createSalesDoc"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"code":{"type":"string","minLength":1,"description":"Customer code — supports templates"}},"required":["code"]},"getCustomerAging":{"type":"object","properties":{"code":{"type":"string","minLength":1}},"required":["code"]},"runPublicQuery":{"type":"object","properties":{"publicQueryGid":{"type":"string"},"groupId":{"type":"string"},"filterId":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Param object — values may be templates"}}},"runEbsService":{"type":"object","properties":{"serviceName":{"type":"string","minLength":1},"parameters":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}}},"required":["serviceName"]},"createSalesDoc":{"type":"object","properties":{"customerGid":{"type":"string"},"customerCode":{"type":"string"},"series":{"type":"string"},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemGid":{"type":"string"},"itemCode":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"ebsServiceName":{"type":"string"}},"required":["lines"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["wooGetCustomer","wooGetOrdersByCustomer","wooGetOrderById","wooSearchProducts","wooGetProductById","wooCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"wooCommerceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric WooCommerce customer id"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string"},"sku":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric customer id (0 for guest)"},"lineItems":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"integer","minimum":0},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","lineItems"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["opencartGetCustomer","opencartGetOrdersByCustomer","opencartGetOrderById","opencartSearchProducts","opencartGetProductById","opencartCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"opencartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"manufacturer":{"type":"string","description":"Exact manufacturer filter. Optional."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Existing OpenCart customer id (for logged-in orders)."},"firstname":{"type":"string"},"lastname":{"type":"string"},"email":{"type":"string"},"telephone":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1},"comment":{"type":"string"}},"required":["products"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["magentoGetCustomer","magentoGetOrdersByCustomer","magentoGetOrderById","magentoSearchProducts","magentoGetProductById","magentoListShippingOptions"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"magentoConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","listShippingOptions"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento order increment id (receipt number) or numeric entity id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento product id."}},"required":["productId"]},"listShippingOptions":{"type":"object","properties":{"countryId":{"type":"string","description":"Destination country as ISO-2 code, e.g. \"GR\". Defaults to \"GR\"."},"postcode":{"type":"string","description":"Destination postcode. Supports templates."},"region":{"type":"string","description":"Optional region/state name."},"sku":{"type":"string","description":"Optional product SKU to price against."}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["megasoftGetCustomer","megasoftSearchProducts","megasoftGetProductByCode","megasoftListShippingMethods","megasoftListPaymentMethods","megasoftGetCustomerBalance","megasoftGetCustomerOrders","megasoftGetOrderStatus","megasoftGetCustomerPurchases","megasoftListOffers","megasoftGetItemPrice","megasoftGetProductStock","megasoftCreateOrder","megasoftCancelOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"megasoftConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchProducts","getProductByCode","listShippingMethods","listPaymentMethods","getCustomerBalance","getCustomerOrders","getOrderStatus","getCustomerPurchases","listOffers","getItemPrice","getProductStock","createOrder","cancelOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getProductByCode":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"getCustomerBalance":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."}},"required":["customerCode"]},"getCustomerOrders":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"orderNo":{"type":"string","description":"Optional order number filter. Supports templates."}},"required":["customerCode"]},"getOrderStatus":{"type":"object","properties":{"orderNo":{"type":"string","description":"Optional order number. Supports templates."},"date":{"type":"string","description":"Optional modified-since date (yyyy-MM-dd)."}}},"getCustomerPurchases":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"itemCode":{"type":"string"}},"required":["customerCode"]},"listOffers":{"type":"object","properties":{"offerId":{"type":"string"},"activeOnly":{"type":"boolean","default":true},"dateFrom":{"type":"string"}}},"getItemPrice":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["customerCode","itemCode"]},"getProductStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"createOrder":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."},"qty":{"oneOf":[{"type":"number","minimum":0},{"type":"string","minLength":1}],"description":"Quantity. Number or template string."},"comments":{"type":"string"}},"required":["customerCode","itemCode","qty"]},"cancelOrder":{"type":"object","properties":{"orderNo":{"type":"string","minLength":1,"description":"Megasoft order number. Supports templates."},"seiraPar":{"type":"string","minLength":1,"description":"Order series / parastatiko code. Supports templates."}},"required":["orderNo","seiraPar"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["gonnaOrderSearchCatalog","gonnaOrderCheckDeliveryAddress","gonnaOrderGetCustomer","gonnaOrderGetCustomerOrders","gonnaOrderGetOrderStatus","gonnaOrderCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"gonnaOrderConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["searchCatalog","checkDeliveryAddress","getCustomer","getCustomerOrders","getOrderStatus","createPaymentLink"]},"searchCatalog":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text menu search. Supports {{dynamicVariables.x}}."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"checkDeliveryAddress":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Delivery address. Supports templates."}},"required":["address"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","name"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getCustomerOrders":{"type":"object","properties":{"customerId":{"type":"string","minLength":1,"description":"Customer id. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":10,"default":5}},"required":["customerId"]},"getOrderStatus":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid. Supports templates."}},"required":["orderUuid"]},"createPaymentLink":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid to charge for. Supports templates."},"amount":{"type":"string","description":"Amount override. Leave blank to use the order total."}},"required":["orderUuid"]}},"required":["operation"],"example":{"operation":"checkDeliveryAddress","checkDeliveryAddress":{"address":"{{dynamicVariables.callerAddress}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["webhotelierCheckAvailability","webhotelierSearchBookings","webhotelierGetReservation","webhotelierGetAvailabilityCalendar","webhotelierGetRooms","webhotelierGetRates"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"webhotelierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["checkAvailability","searchBookings","getReservation","getAvailabilityCalendar","getRooms","getRates"]},"checkAvailability":{"type":"object","properties":{"checkin":{"type":"string","minLength":1,"description":"Check-in date YYYY-MM-DD. Supports templates."},"checkout":{"type":"string","minLength":1,"description":"Check-out date YYYY-MM-DD. Supports templates."},"adults":{"type":"string","minLength":1,"description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"rooms":{"type":"string","description":"Number of rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["checkin","checkout","adults"]},"searchBookings":{"type":"object","properties":{"lastName":{"type":"string","description":"Guest last name. Supports templates. Provide this or email."},"email":{"type":"string","description":"Guest email. Supports templates. Provide this or lastName."},"checkinFrom":{"type":"string","description":"Earliest check-in YYYY-MM-DD. Supports templates."},"checkinTo":{"type":"string","description":"Latest check-in YYYY-MM-DD. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getReservation":{"type":"object","properties":{"resId":{"type":"string","minLength":1,"description":"Reservation id. Supports templates."}},"required":["resId"]},"getAvailabilityCalendar":{"type":"object","properties":{"fromd":{"type":"string","minLength":1,"description":"Calendar start / check-in date YYYY-MM-DD. Supports templates."},"tod":{"type":"string","description":"Calendar end / check-out date YYYY-MM-DD (max 3 months from fromd). Supports templates."},"adults":{"type":"string","description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"room":{"type":"string","description":"Room-type code filter. Supports templates."},"rate":{"type":"string","description":"Rate id filter. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["fromd"]},"getRooms":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code for a single room. Empty = list all rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getRates":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code to scope rates. Supports templates."},"rateId":{"type":"string","description":"Rate id for a single rate (requires roomCode). Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}}},"required":["operation"],"example":{"operation":"getReservation","getReservation":{"resId":"{{dynamicVariables.resId}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hosthubIdentifyCaller","hosthubSearchReservations","hosthubGetReservation","hosthubListRentals","hosthubCheckAvailability"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hosthubConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["identifyCaller","searchReservations","getReservation","listRentals","checkAvailability"]},"identifyCaller":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"description":"Caller phone number. Supports templates (e.g. {{call.phone_number}})."}},"required":["phone"]},"searchReservations":{"type":"object","properties":{"name":{"type":"string","description":"Guest name. Supports templates. Provide one of name / phone / confirmationCode."},"phone":{"type":"string","description":"Guest phone. Supports templates."},"confirmationCode":{"type":"string","description":"Channel confirmation code. Supports templates."}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Hosthub reservation (calendar-event) id. Supports templates."}},"required":["id"]},"getRental":{"type":"object","properties":{"rentalId":{"type":"string","description":"Rental id for a single rental. Empty = list all rentals. Supports templates."}}},"checkAvailability":{"type":"object","properties":{"rentalId":{"type":"string","minLength":1,"description":"Rental id to check. Supports templates."},"from":{"type":"string","minLength":1,"description":"Start date YYYY-MM-DD. Supports templates."},"to":{"type":"string","minLength":1,"description":"End date YYYY-MM-DD. Supports templates."}},"required":["rentalId","from","to"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["prestashopGetCustomer","prestashopGetOrdersByCustomer","prestashopGetOrderById","prestashopSearchProducts","prestashopGetProductById","prestashopCreateOrder","prestashopUpdateOrderStatus"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"prestashopConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder","updateOrderStatus"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"reference":{"type":"string","description":"Exact reference (SKU) filter."},"ean13":{"type":"string","description":"Exact EAN-13 barcode filter."},"mpn":{"type":"string","description":"Exact MPN filter."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id."},"addressDeliveryId":{"oneOf":[{"type":"number"},{"type":"string"}]},"addressInvoiceId":{"oneOf":[{"type":"number"},{"type":"string"}]},"cartId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Pre-existing cart id (PrestaShop requires it)."},"currencyId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"langId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"carrierId":{"oneOf":[{"type":"number"},{"type":"string"}]},"payment":{"type":"string","minLength":1,"description":"Human-readable payment label."},"module":{"type":"string","description":"Payment module code, e.g. \"ps_checkpayment\"."},"totalPaid":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProducts":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProductsWithTax":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalShipping":{"oneOf":[{"type":"number"},{"type":"string"}]},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"product_attribute_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0},"product_name":{"type":"string"},"unit_price":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","addressDeliveryId","addressInvoiceId","cartId","carrierId","payment","totalPaid","totalProducts","totalProductsWithTax","products"]},"updateOrderStatus":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id to update."},"orderStateId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Target order_state id (numeric, store-specific)."}},"required":["orderId","orderStateId"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["airtableGetRecord","airtableSearchRecords","airtableCreateRecord","airtableUpdateRecord"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"airtableConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getRecord","searchRecords","createRecord","updateRecord"]},"getRecord":{"type":"object","properties":{"by":{"type":"string","enum":["phone","id"],"description":"Look up by mapped phone field, or by Airtable record id"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchRecords":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"createRecord":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["fields"]},"updateRecord":{"type":"object","properties":{"recordId":{"type":"string","minLength":1,"description":"Airtable record id (rec...) — supports templates"},"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["recordId","fields"]}},"required":["operation"],"example":{"operation":"getRecord","getRecord":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["jiraGetIssue","jiraSearchIssues","jiraCreateIssue","jiraUpdateIssue","jiraAddComment","jiraTransitionIssue"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"jiraConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getIssue","searchIssues","createIssue","updateIssue","addComment","transitionIssue"]},"getIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key, e.g. SUP-1234 — supports {{dynamicVariables.x}}"}},"required":["issueKey"]},"searchIssues":{"type":"object","properties":{"text":{"type":"string","description":"Free-text query — supports templates"},"jql":{"type":"string","description":"Raw JQL — overrides text when present"},"projectKey":{"type":"string","description":"Scope the search to a project key"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"createIssue":{"type":"object","properties":{"summary":{"type":"string","minLength":1,"description":"Issue summary — supports templates"},"description":{"type":"string","description":"Issue description — supports templates"},"projectKey":{"type":"string","description":"Project key — falls back to the connection default"},"issueType":{"type":"string","description":"Issue type name — falls back to the connection default"},"priority":{"type":"string","description":"Priority name (e.g. High)"},"assignee":{"type":"string","description":"Assign to a person by email or name — supports templates"}},"required":["summary"]},"updateIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key to update — supports templates"},"summary":{"type":"string","description":"New summary — supports templates"},"description":{"type":"string","description":"New description — supports templates"},"priority":{"type":"string","description":"New priority name"}},"required":["issueKey"]},"addComment":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"body":{"type":"string","minLength":1,"description":"Comment body — supports templates"}},"required":["issueKey","body"]},"transitionIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"status":{"type":"string","minLength":1,"description":"Target status name, e.g. \"In Progress\" — supports templates"}},"required":["issueKey","status"]}},"required":["operation"],"example":{"operation":"createIssue","createIssue":{"summary":"Callback requested by {{callerPhone}}","description":"{{transcript}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleChatSendMessage","googleChatSendToDefaultSpace","googleChatSendViaWebhook"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleChatConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["sendMessage","sendToDefaultSpace","sendViaWebhook"]},"sendMessage":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque Google Chat space resource (spaces/AAQA...) — set via UI picker"},"spaceDisplayName":{"type":"string","description":"Cached display name for the node summary"},"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string","description":"Optional thread key for in-thread replies"}},"required":["spaceName","body"]},"sendToDefaultSpace":{"type":"object","properties":{"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string"}},"required":["body"]},"sendViaWebhook":{"type":"object","properties":{"webhookId":{"type":"string","minLength":1,"description":"GoogleChatWebhook document id — set via UI picker"},"webhookLabel":{"type":"string","description":"Cached webhook label for the node summary"},"body":{"type":"string","minLength":1},"threadKey":{"type":"string"}},"required":["webhookId","body"]}},"required":["operation"],"example":{"operation":"sendToDefaultSpace","sendToDefaultSpace":{"body":"New lead from {{caller_name}} ({{caller_phone}})"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["searchContact"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"searchContactConfig":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Phone number to look up (template). Most reliable identifier: matched on the stored phone index, so +30/30/national forms all hit the same contact."},"email":{"type":"string","description":"Email address to look up (template). Matched case-insensitively on the main email and every listed email."},"name":{"type":"string","description":"Name to look up (template). Fuzzy: case- and accent-insensitive, Greek/Latin spellings and common inflections. May match several contacts."}},"example":{"phoneNumber":"{{call.phone_number}}","email":"","name":""}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["managedAgent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"managedAgentConfig":{"type":"object","properties":{"prompt":{"type":"string","maxLength":10000,"default":"","description":"System prompt rendered with {{transcript}}, {{call_summary}}, {{contact}}, {{extracted_entities}}"},"builtInTools":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}},"default":[],"description":"Full AgentTool configurations the LLM may call."},"apiTools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_]{1,40}$","description":"Tool name shown to the LLM; must be unique within the node"},"description":{"type":"string","minLength":10,"maxLength":500,"description":"How the LLM decides when to call this tool"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"default":[],"description":"Input schema for the LLM"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"description":"HTTP request configuration (URL, headers, method, body) — reused from function-call api runner","example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["name","description","apiConfig"]},"default":[],"description":"Inline API tools with name + description + HTTP config"},"mcpServers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the MCP server"},"description":{"type":"string","description":"Optional description"},"serverUrl":{"type":"string","format":"uri","description":"MCP server endpoint"},"transport":{"type":"string","enum":["http","sse"],"description":"Transport: http or sse"},"authType":{"type":"string","enum":["none","bearer","oauth"],"description":"Authentication mode"},"authValue":{"type":"string","description":"Token / credential value — encrypted at rest"},"enabledTools":{"type":"array","items":{"type":"string"},"description":"Whitelist of tools exposed to the LLM. Omit to expose every tool the server publishes."}},"required":["name","serverUrl","transport","authType"]},"default":[],"description":"MCP servers whose tools the LLM may call"},"models":{"type":"object","properties":{"primary":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"description":"Model used by the loop by default","example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"escalation":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Optional fallback model rerun on the whole session if primary failed/stuck. Must use the same provider as primary."}},"required":["primary"]},"limits":{"type":"object","properties":{"maxIterations":{"type":"integer","minimum":0,"maximum":50,"default":15,"description":"Hard cap on LLM turns per run. Set to 0 for no limit (cost cap still enforced)."},"maxCostUsd":{"type":"number","minimum":0,"maximum":0.5,"default":0.5,"description":"Hard cap on total cost (USD) per run. Range: 0 to 0.5."},"stuckDetection":{"type":"boolean","default":true,"description":"Bail if the model calls the same tool with the same args twice in a row"}},"default":{}},"routing":{"type":"object","properties":{"onSuccess":{"type":"string","description":"Next workflow node ID when the run completes successfully"},"onPartial":{"type":"string","description":"Next workflow node ID when the run completed but with partial results"},"onFailure":{"type":"string","description":"Next workflow node ID when the run failed"}},"default":{}},"dryRun":{"type":"boolean","default":false},"enableSubagents":{"type":"boolean","default":false},"maxConcurrentSubagents":{"type":"integer","minimum":1,"maximum":10,"default":5},"maxSubagentIterations":{"type":"integer","minimum":1,"maximum":20,"default":8},"knowledgeFileIds":{"type":"array","items":{"type":"string"},"default":[],"description":"Knowledge files the agent can search via search_knowledge. Empty list = no knowledge tool offered."},"knowledgeRerank":{"type":"object","properties":{"enabled":{"type":"boolean","default":true,"description":"Run the rerank pass. When off, top-K is taken directly from the raw retrieval score (faster but noisier context for the main agent)."},"model":{"type":"string","default":"gpt-5.6-luna","description":"Model used for the rerank pass. Should be small/cheap — its job is ranking, not reasoning. Same provider as the node's primary model."},"candidatesK":{"type":"integer","minimum":5,"maximum":200,"default":50,"description":"How many candidates to retrieve from Pinecone before reranking. Higher = better recall, more rerank tokens. 50 is the sweet spot."},"returnK":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"How many chunks to return after reranking. The main agent sees only these."}},"default":{}},"enableScraping":{"type":"boolean","default":false,"description":"When true, agent gets scrape_website(url) tool that fetches+summarises a page via ScraperService."},"workflowToolIds":{"type":"array","items":{"type":"string"},"default":[],"description":"IDs of during-call workflows the agent may call as tools. Only their duringCall triggers run; onCallEnd-triggered or managed-agent-containing workflows are rejected to prevent recursion."}},"example":{"prompt":"You are an order assistant. From the call transcript, identify the requested products, look them up, and create an order. Use the provided tools.","builtInTools":[],"apiTools":[],"mcpServers":[],"models":{"primary":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0}},"limits":{"maxIterations":15,"maxCostUsd":0.5,"stuckDetection":true},"routing":{"onSuccess":"node-success","onFailure":"node-create-ticket"},"dryRun":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"nodeType"}},"html":{"type":"string"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}]}},"required":["id","name","position","inputs","outputs"],"example":{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}},"description":"Action nodes in the flow"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"visibility":{"type":"string","enum":["private","resellerRead","resellerWrite","globalRead"],"description":"Workflow visibility and access control"},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"WorkFlowVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer; absent for workflows that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","visibility"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Handle Incoming Call","description":"Automated call handling flow","type":"flow","executeAt":"immediate","visibility":"private","trigger":{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}},"nodes":[{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"llmCompletionConfig","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"connections":[{"node":"2","input":"default","output":"default","label":"Continue"}],"files":[{"id":"file_123","filename":"welcome.wav","s3Id":"s3-file-123","displayUrl":"https://example.com/files/welcome.wav"}]}}},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}},"dataRetentionDays":{"type":"number"},"dataRetentionPolicy":{"type":"string","enum":["none","only-phone-number","transcript","all"]},"archiveRecordingForRetrieval":{"type":"boolean"},"requirePassingTestsToPublish":{"type":"boolean"},"coreProvidersOnly":{"type":"boolean"},"skipParametersNotUsedInPrompt":{"type":"boolean","description":"When true, parameters/variables not explicitly referenced in the prompt will not be appended as additional context"},"customerInstructions":{"type":"string"},"testCasesForCustomerInstructions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id of the test case"},"scenario":{"type":"string","description":"The scenario for the test case"},"idealOutcome":{"type":"string","description":"The ideal outcome for the test case"},"actualOutcomes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id of the actual outcome"},"agentEntity":{"type":"string","enum":["systemPrompt","forwardingInstructions","endCallSettings","skipTurn"]},"existingText":{"type":"string","description":"The existing text in the system prompt that will be replaced or modified"},"newText":{"type":"string","description":"The new text to add to the system prompt"},"actionType":{"type":"string","enum":["add","remove","replace"],"description":"The type of the instruction: add, remove, replace"},"reason":{"type":"string","description":"The reason for the instruction"},"applied":{"type":"boolean","description":"Whether the instruction has been applied"},"appliedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"callId":{"type":"string","description":"The ID of the call if the source is call"},"score":{"type":"number","minimum":1,"maximum":10,"description":"1 to 10 by how close was to ideal outcome"},"outcome":{"type":"string","description":"The outcome of the test case"}},"required":["agentEntity","score","outcome"],"description":"The actual outcome of the test case"},"description":"The actual outcomes of the test case"}},"required":["scenario","idealOutcome","actualOutcomes"],"description":"The test cases for the customer instructions"}},"aiDisclosure":{"type":"object","properties":{"enabled":{"type":"boolean","description":"When true, the platform ensures the first spoken greeting names AI / a digital assistant. Default is off. Leaving this off may leave the deployer non-compliant with Article 50(1) and 50(5) EU AI Act."},"disabledAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"disabledById":{"type":"string","description":"User id who turned the overlay off"},"disabledBy":{"type":"string","description":"User name who turned the overlay off"}}},"sensitiveData":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"types":{"type":"array","items":{"type":"string","enum":["amka","afm","personal_number","id_card","passport","gemi","cy_tic","iban","card","cvv","pin","email","phone"]}},"vaultRetentionDays":{"type":"integer","minimum":1,"maximum":365}}},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"AgentVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer. Set to v1 on create/copy; absent only on legacy agents that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name"],"example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support Agent","agentType":"prompt-based","systemPrompt":"You are a helpful customer support assistant. Always be polite and provide accurate information.","dynamicVariables":[{"name":"company_name","value":"{{company_name}}"}],"language":"en-US","secondaryLanguages":[{"language":"es-ES","type":"other_agent","agentId":"agent-123e4567-e89b-12d3-a456-426614174000","enabled":true,"defaultContries":["Greece","United States"]},{"language":"fr-FR","type":"other_voice","voiceConfig":{"voiceProvider":"elevenlabs","voiceId":"21m00Tcm4TlvDq8ikWAM"},"enabled":true,"defaultContries":["Greece","United States"]}],"knowledgeFileIds":["kb-123","kb-456"],"workflowsIds":["workflow-123","workflow-456"],"tools":[{"enabled":true,"name":"send_sms","prompt":"Send an SMS to the user","type":"system"}],"allowedToCopy":"sameCompany","passwordTries":3,"externalDial":1234567890,"internalDial":"4002","knowledgeFiles":[{"id":"kb-123","name":"Product Manual","description":"Complete product documentation"}],"workflows":[{"id":"workflow-123","name":"Send Email Notification","description":"Automated email notification workflow","triggers":[{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}}],"nodes":[],"files":[],"parameters":[{"name":"company_name","value":"{{company_name}}","type":"string","required":true,"aiGenerated":true}],"dataRetentionDays":30,"dataRetentionPolicy":"all"}]}}}}},"400":{"description":"Bad request - Invalid agent data","content":{"application/json":{}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"404":{"description":"Agent not found","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"The name of the agent","example":"Customer Support Agent"},"agentType":{"type":"string","enum":["prompt-based","analysis-agent","ai-assistant","node-based"],"example":"prompt-based","description":"The type of agent architecture that determines its capabilities and behavior. `prompt-based`: Standard conversational agent that can answer calls, transfer calls, handle emails, book appointments, and execute workflows. Best for general-purpose use cases. `analysis-agent`: Specialized agent for call analysis only. Used to analyze calls after they have been transferred to humans. Monitors and extracts insights from ongoing calls. See: https://docs.voicelogica.ai/transfer-calls/introduction `ai-assistant`: Personal AI assistant/voicemail. Designed ONLY for individual use as your own AI voicemail or personal assistant. Handles calls when you are unavailable. `node-based`: Advanced agent with visual flow builder. Supports complex branching logic, conditional routing, and multi-step reasoning. Best for sophisticated conversational workflows."},"systemPrompt":{"type":"string","description":"The system prompt that defines the agent's behavior","example":"You are a helpful customer support assistant. Always be polite and provide accurate information."},"dynamicVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the dynamic variable"},"value":{"type":"string","description":"The value of the dynamic variable"}},"required":["name","value"]},"description":"Dynamic variables for the agent"},"navigateToNodeTool":{"type":"boolean","description":"Whether the agent can navigate to a specific node tool based on instructions","example":false},"syncWithContacts":{"type":"boolean","description":"Whether the agent is synced with Contacts","example":false},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Locale code","example":"en-US"},"secondaryLanguages":{"type":"array","items":{"type":"object","properties":{"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"The language of the secondary language"},"type":{"type":"string","enum":["other_agent","other_voice"],"description":"The type of the secondary language"},"agentId":{"type":"string","description":"The ID of the agent that the secondary language is for"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"enabled":{"type":"boolean","description":"Whether the secondary language is enabled"},"defaultContries":{"type":"array","items":{"type":"string","enum":["Afghanistan","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Bouvet Island","Brazil","British Indian Ocean Territory","Brunei Darussalam","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","China","Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo","Congo, The Democratic Republic of the","Cook Islands","Costa Rica","Cote D'Ivoire","Croatia","Cuba","Cyprus","Czech Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Falkland Islands (Malvinas)","Faroe Islands","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Heard Island and Mcdonald Islands","Holy See (Vatican City State)","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran, Islamic Republic Of","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kuwait","Kyrgyzstan","Lao People\"S Democratic Republic","Lao People's Democratic Republic","Latvia","Lebanon","Lesotho","Liberia","Libyan Arab Jamahiriya","Liechtenstein","Lithuania","Luxembourg","Macao","Macedonia, The Former Yugoslav Republic of","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia, Federated States of","Moldova, Republic of","Monaco","Mongolia","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands","Netherlands Antilles","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territory, Occupied","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn","Poland","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saint Helena","Saint Kitts and Nevis","Saint Lucia","Saint Pierre and Miquelon","Saint Vincent and the Grenadines","Samoa","San Marino","Sao Tome and Principe","Saudi Arabia","Senegal","Serbia and Montenegro","Seychelles","Sierra Leone","Singapore","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia and the South Sandwich Islands","Spain","Sri Lanka","Sudan","Suriname","Svalbard and Jan Mayen","Swaziland","Sweden","Switzerland","Syrian Arab Republic","Taiwan, Province of China","Tajikistan","Tanzania, United Republic of","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey","Turkmenistan","Turks and Caicos Islands","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States Minor Outlying Islands","United States","Uruguay","Uzbekistan","Vanuatu","Venezuela","Virgin Islands, British","Virgin Islands, U.S.","Wallis and Futuna","Western Sahara","Yemen","Zambia","Zimbabwe","Unknown or Invalid Region","Russia"],"description":"Country name"},"description":"The default countries for the secondary language"}},"required":["language","type"]},"description":"Additional languages the agent can understand","example":[{"language":"es-ES","type":"other_agent","agentId":"agent-123e4567-e89b-12d3-a456-426614174000","voiceConfig":{"voiceProvider":"elevenlabs","voiceId":"21m00Tcm4TlvDq8ikWAM"},"enabled":true}]},"knowledgeFileIds":{"type":"array","items":{"type":"string"},"description":"Array of knowledge file IDs that the agent can reference","example":["kb-123","kb-456"]},"tools":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["skip_turn"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"timeoutSeconds":{"type":"number","minimum":0,"maximum":10,"default":3,"description":"How many seconds to wait for the caller to continue speaking before the AI resumes. 0 means pure yield — the AI stays silent until the caller speaks."},"maxSkips":{"type":"integer","minimum":0,"maximum":20,"default":2,"description":"Maximum number of consecutive turns the AI may skip before it must respond. 0 means no limit."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["send_sms"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"senderId":{"type":"string","default":"","description":"The ID of the sender to use for SMS"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["send_email"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"mailboxId":{"type":"string","default":"","description":"The id of the mailbox (configured under /mailboxes) the agent should send from"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["eshop_integration"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"url":{"type":"string","format":"uri","description":"The URL of the tool"},"interval":{"type":"number","minimum":10,"maximum":10080,"description":"The interval in minutes to sync the tool"},"vectorField":{"type":"string","description":"The field of the ID to use for the tool"},"aiEnabled":{"type":"boolean","default":false,"description":"Whether the tool is AI enabled"},"keyOfId":{"type":"string","enum":["mpn","ean","sku","skroutzId","groupCode","none"],"default":"mpn","description":"The key of the ID to use for the tool (mpn, ean, sku, skroutzId, groupCode, none)"},"deltaCapable":{"type":"boolean","default":false,"description":"Feed supports modifiedSince delta filtering"},"lastSyncAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastFullSyncAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"feedEtag":{"type":"string","description":"Server-managed: last feed ETag"},"feedLastModified":{"type":"string","description":"Server-managed: last feed Last-Modified header"},"timesFailed":{"type":"number","default":0,"description":"Consecutive failed sync attempts"}},"required":["enabled","name","prompt","type","interval"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["hubspot"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"readContactProperties":{"type":"array","items":{"type":"string"},"description":"The contact properties to read from HubSpot"},"updateContactProperties":{"type":"array","items":{"type":"string"},"description":"The contact properties to update in HubSpot"},"createCallActivity":{"type":"boolean","description":"Whether to create a call activity in HubSpot"},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_email","get_contact_by_id","lookup_contact_by_name","link_caller_to_contact"]},"description":"Which HubSpot mid-call lookup operations the AI may invoke"},"autoIdentifyCaller":{"type":"boolean","description":"When true, the runner pre-calls lookup_contact_by_phone on call connect so the AI greets the caller by name"}},"required":["enabled","name","prompt","type","readContactProperties","updateContactProperties","createCallActivity"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["zoho"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","create_lead","add_note"]},"default":[],"description":"Which Zoho CRM mid-call operations the AI may invoke"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["salesforce"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","link_caller_to_contact","get_contact_by_id","create_lead","log_call"]},"default":[],"description":"Which Salesforce CRM mid-call operations the AI may invoke"},"autoIdentifyCaller":{"type":"boolean","description":"When true, the runner pre-identifies the caller from the local Salesforce contact cache on call connect so the AI greets them by name"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["navigate_ivr"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["schedule_callback"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"maxCallbacks":{"type":"integer","minimum":1,"maximum":3,"description":"Maximum pending callback requests per caller (1-3, default 3 — never unlimited; repeated callbacks read as spam). Counts the caller's actual re-requests, not failed call attempts. Once reached, no further callback is logged and an alert email goes to the agent notification recipients instead."},"dynamicWelcomeMessage":{"type":"boolean","description":"Open the scheduled follow-up call with an AI-generated welcome that references the callback context instead of the static greeting. The generation runs at call answer, so callback calls are billed a minimum of 10 seconds."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["detect_live_sentiment"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["detect_live_frustration"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["schedule_appointment"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["handle_silence"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"nudgeIntervalSeconds":{"type":"number","minimum":0,"maximum":60,"description":"Seconds of silence before the AI nudges the caller. Minimum 15 — lower values are raised to 15 automatically; 0 disables nudging."},"timesToNudge":{"type":"number","minimum":1,"maximum":3,"description":"The number of times to nudge the user"},"actions":{"type":"array","items":{"type":"string","enum":["forward","hangup"]},"description":"The actions to take when the user is silent"}},"required":["enabled","name","prompt","type","nudgeIntervalSeconds","timesToNudge","actions"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["lock_on_speaker"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"allowMultipleSpeakers":{"type":"boolean","default":false,"description":"When true, the LLM gets switchMainSpeaker. Lock, block, and 3s takeover are unchanged either way — non-main speech is dropped, not sent to the model as labeled context."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["galaxy_drugstore"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","check_item_availability","get_item_price","calculate_order","place_order","get_order_status","get_customer_history","get_customer_balance","get_customer_aging","get_customer_kartela_link","find_items_by_active_ingredient","get_invoice_pdf_links","get_next_route","get_customer_top_items","get_top_selling_items","get_customer_fin_info_per_drug_type"]},"default":[],"description":"Which Galaxy operations the AI is allowed to perform mid-call"},"defaultWrhsCode":{"type":"string","description":"Overrides the company default warehouse code for check_item_availability"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the customer context ready"},"prefetchOrdersOnCallStart":{"type":"boolean","description":"When true (and customer identified), pre-fetch recent transaction history from Galaxy on call start. Adds ~500-1500ms to call setup because Galaxy has no local order cache."},"maxOrderValue":{"type":"number","minimum":0,"nullable":true,"description":"Safety cap — place_order is rejected above this amount. `null` means no cap."},"maxOrderLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — place_order is rejected above this number of lines. `null` means no cap."},"customAttributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"The attribute key. Meaning varies per provider (see tool config description)."},"description":{"type":"string","minLength":1,"description":"What the AI should put in this field — shown to the LLM as the parameter description."},"required":{"type":"boolean","description":"When true, the AI must fill the field. The write op is rejected if missing."}},"required":["key","description"]},"description":"Galaxy-specific custom header columns. Each `key` must be a literal FastSalesEntry column name (StringField1-7, FloatField1-7, DateField1-4, BooleanField1-4, LookupField1-7). The handler merges the AI-filled value into the matching header slot on PostFast."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["galaxy_erp"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_item_by_id","create_sales_doc","get_sales_doc_by_id"]},"default":[],"description":"Which Galaxy ERP operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the customer context ready"},"prefetchOrdersOnCallStart":{"type":"boolean","description":"When true (and customer identified), pre-fetch recent commercial entries from Galaxy ERP on call start. Adds ~500-1500ms because entries aren't cached locally."},"maxSalesDocValue":{"type":"number","minimum":0,"nullable":true,"description":"Safety cap — create_sales_doc rejected above this total. `null` means no cap."},"maxSalesDocLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_sales_doc rejected above this line count. `null` means no cap."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["soft1_erp"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_balance","get_customer_aging","get_customer_history","get_customer_orders","get_customer_top_items","get_top_selling_items","create_order","create_invoice","create_delivery_note","create_receipt","update_order","update_invoice","update_delivery_note","update_receipt","add_order_line","remove_order_line","adjust_order_quantity","set_order_transfer","log_call","create_meeting","create_task","search_activities","list_projects","create_project","list_project_actions","create_customer","add_customer_phone","remove_customer_phone","get_order_by_key","create_sales_doc","update_sales_doc","transmit_einvoice"]},"default":[],"description":"Which Soft1 operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the customer context ready"},"prefetchOrdersOnCallStart":{"type":"boolean","description":"When true (and customer identified), pre-fetch recent transaction history from Soft1 on call start. Adds ~500-1500ms because orders aren't cached locally."},"prefetchOrdersDays":{"type":"integer","minimum":0,"maximum":365,"default":30,"description":"Call-start prefetch window in days (how far back to load the customer's orders). Range 0–365. Higher = more orders pulled = slower call-start and a heavier prompt. Defaults to 30."},"prefetchOrdersMaxOrders":{"type":"integer","minimum":0,"maximum":20,"default":10,"description":"Call-start prefetch cap — max recent orders to load. Range 0–20. Higher = more context but more latency and tokens. Defaults to 10."},"maxSalesDocValue":{"type":"number","minimum":0,"nullable":true,"description":"Safety cap — create_sales_doc is rejected above this total amount. `null` means no cap."},"maxSalesDocLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_sales_doc is rejected above this number of lines. `null` means no cap."},"salesDocShippingEnabled":{"type":"boolean","description":"When true, the create/update sales-doc tool schema exposes a nested `shipping` object the AI can populate with delivery date, address, carrier, truck, warehouse, etc. — populates Soft1 MTRDOC. Disable for in-store agents that never ship goods, to keep the tool description lean."},"salesDocManageOlderThan24h":{"type":"boolean","description":"When true, the manage-tools (update_*, add_order_line, remove_order_line, adjust_order_quantity, set_order_transfer) accept docs of any age. When false (default), the agent can only modify docs created in the last 24 hours — older changes require operator action. Useful for guarded deployments where the agent should not amend historical orders."},"customAttributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"The attribute key. Meaning varies per provider (see tool config description)."},"description":{"type":"string","minLength":1,"description":"What the AI should put in this field — shown to the LLM as the parameter description."},"required":{"type":"boolean","description":"When true, the AI must fill the field. The write op is rejected if missing."}},"required":["key","description"]},"description":"Soft1-specific custom fields. Each `key` must be an actual SALDOC column name (e.g. \"UDSTRING01\", \"REMARKS\", \"CCCSALDOC.UDSTRING02\") — the handler merges the AI-filled values straight into the SALDOC header row on setData."},"logCallNotesTemplate":{"type":"string","description":"HTML template rendered into SOACTION notes when log_call fires. When set, fully replaces the AI-generated notes argument. Supports {{phone_number}}, {{caller_name}}, {{agent_name}}, {{call_duration}}, {{call_date}}, {{view_url}}, {{summary}}, {{transcript}}, and any agent post-call analysis property name."},"logCallOnlyWhenField":{"type":"string","description":"Post-call analysis property name. When set, a call is logged to Soft1 only if that property is true/yes (e.g. a boolean \"has_substance\"). Empty = log every call."},"logCallMergeDaily":{"type":"boolean","description":"When true, all logged calls of the same Soft1 customer on the same day go into one SOACTION record (each call appended to its notes) instead of one record per call."},"logCallActor":{"type":"string","description":"Default Soft1 ACTOR (user) every logged call is assigned to, e.g. the secretariat. Supports {{variables}}. Empty = unassigned."},"logCallActorRules":{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","minLength":1,"description":"Post-call analysis property to test, e.g. \"requested_person\"."},"values":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"description":"Values that select this rule — the canonical name plus spoken variants. Case/accent-insensitive; a value also matches when it appears as whole words inside the analysis text."},"actor":{"type":"string","minLength":1,"description":"Soft1 ACTOR (user) the call is assigned to when this rule matches. Supports {{variables}}."},"label":{"type":"string","description":"Operator note, e.g. the person's name. Shown in logs only."}},"required":["property","values","actor"]},"description":"Assign the logged call to another Soft1 user based on a post-call analysis value (e.g. requested_person). First match wins; no match = logCallActor."},"logCallHeaderFields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"SOACTION column name, e.g. \"UDSTRING01\" or \"CCCSOACTION.UDFTYPE\"."},"value":{"type":"string","description":"Template for the value, e.g. \"{{request_type}}\". Supports {{phone_number}}, {{caller_name}}, {{agent_name}}, {{call_date}} and any post-call analysis property."},"valueMap":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional map from the rendered text to the stored value (case/accent-insensitive key match), e.g. {\"Πωλήσεις\":\"1\",\"Υποστήριξη\":\"2\"}. Unmapped text is stored as is."}},"required":["key","value"]},"description":"Extra SOACTION columns filled on every logged call (e.g. request type, service), rendered from post-call analysis values."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["pylon_erp"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_purchase_history","get_customer_branches","get_customer_balance","add_order_line","remove_order_line","create_order"]},"default":[],"description":"Which Pylon operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the customer context ready"},"maxSalesDocValue":{"type":"number","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this total amount. `null` means no cap."},"maxSalesDocLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this number of lines. `null` means no cap."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["sap_erp"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_products","get_customer_orders","get_order","get_customer_balance","create_order"]},"default":[],"description":"Which SAP ERP operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the customer context ready"},"prefetchOrdersOnCallStart":{"type":"boolean","description":"When true (and the caller was identified), their recent sales orders are loaded into sapOrders at call start"},"maxSalesDocValue":{"type":"number","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this estimated total. `null` means no cap."},"maxSalesDocLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this number of lines. `null` means no cap."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["splynx"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_login","lookup_customer_by_name","link_caller_to_customer","get_customer_balance","get_services","get_invoices","get_online_status","create_ticket","set_customer_status"]},"default":[],"description":"Which Splynx operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the subscriber context (status, balance) ready"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["entersoft_one"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_balance","get_customer_aging","run_public_query","run_ebs_service","create_sales_doc"]},"default":[],"description":"Which Entersoft ONE operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the customer context ready"},"prefetchOrdersOnCallStart":{"type":"boolean","description":"When true (and customer identified), pre-fetch recent transaction history from Entersoft on call start. Adds ~500-1500ms because orders aren't cached locally."},"maxSalesDocValue":{"type":"number","minimum":0,"nullable":true,"description":"Safety cap — create_sales_doc rejected above this total. `null` means no cap."},"maxSalesDocLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_sales_doc rejected above this line count. `null` means no cap."},"customAttributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"The attribute key. Meaning varies per provider (see tool config description)."},"description":{"type":"string","minLength":1,"description":"What the AI should put in this field — shown to the LLM as the parameter description."},"required":{"type":"boolean","description":"When true, the AI must fill the field. The write op is rejected if missing."}},"required":["key","description"]},"description":"Entersoft-specific custom EbsService parameters. Each `key` must be a parameter name the merchant's configured EbsService accepts (e.g. \"DeliveryLocation\", \"BuzzerCode\"). The handler merges the AI-filled value into the flat Parameters dict passed to the service."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["shopify"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order","create_draft_order","sync_products_to_skroutz"]},"default":[],"description":"Which Shopify operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the customer context ready"},"prefetchOrdersOnCallStart":{"type":"boolean","description":"When true (and customer identified), pre-fetch recent orders from Shopify on call start. Adds ~500-1500ms because orders aren't cached locally."},"prefetchShippingZonesOnCallStart":{"type":"boolean","description":"When true, pre-fetch the shop's shipping zones + rates on call start and inject them into the system prompt. Recommended when create_order is enabled — Shopify does NOT auto-compute shipping on API orders, so the AI must know the rates up-front to pass correct shipping_lines."},"maxOrderValue":{"type":"number","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this total amount. `null` means no cap."},"maxOrderLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this number of line_items. `null` means no cap."},"customAttributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"The attribute key. Meaning varies per provider (see tool config description)."},"description":{"type":"string","minLength":1,"description":"What the AI should put in this field — shown to the LLM as the parameter description."},"required":{"type":"boolean","description":"When true, the AI must fill the field. The write op is rejected if missing."}},"required":["key","description"]},"description":"Custom note_attributes the AI must collect and attach to create_order. Shopify maps these to Order.note_attributes."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["woocommerce"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order"]},"default":[],"description":"Which WooCommerce operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the customer context ready"},"prefetchOrdersOnCallStart":{"type":"boolean","description":"When true (and customer identified), pre-fetch recent orders from WooCommerce on call start. Adds ~500-1500ms because orders aren't cached locally."},"prefetchShippingZonesOnCallStart":{"type":"boolean","description":"When true, pre-fetch the store's shipping zones + methods on call start and inject them into the system prompt. Recommended when create_order is enabled — WC does NOT auto-compute shipping on REST orders, so the AI must know the methods up-front."},"maxOrderValue":{"type":"number","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this total amount. `null` means no cap."},"maxOrderLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this number of lines. `null` means no cap."},"customAttributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"The attribute key. Meaning varies per provider (see tool config description)."},"description":{"type":"string","minLength":1,"description":"What the AI should put in this field — shown to the LLM as the parameter description."},"required":{"type":"boolean","description":"When true, the AI must fill the field. The write op is rejected if missing."}},"required":["key","description"]},"description":"Custom meta_data keys the AI must collect and attach to create_order. WC maps these to Order.meta_data."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["opencart"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","create_order"]},"default":[],"description":"Which OpenCart operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the customer context ready"},"prefetchOrdersOnCallStart":{"type":"boolean","description":"When true (and customer identified), pre-fetch recent orders from OpenCart on call start. Adds ~500-1500ms because orders aren't cached locally."},"maxOrderValue":{"type":"number","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this total amount. `null` means no cap."},"maxOrderLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this number of lines. `null` means no cap."},"customAttributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"The attribute key. Meaning varies per provider (see tool config description)."},"description":{"type":"string","minLength":1,"description":"What the AI should put in this field — shown to the LLM as the parameter description."},"required":{"type":"boolean","description":"When true, the AI must fill the field. The write op is rejected if missing."}},"required":["key","description"]},"description":"OpenCart-specific custom fields. DreamVention OCMOD has no universal meta-bucket, so these are APPENDED to the order comment as \"Key: Value | Key2: Value2\" — visible to the merchant on the order page. Best-effort; not structured."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["custom_api"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer","check_availability","create_order","get_order","list_customer_orders"]},"default":[],"description":"Which Custom API operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer by phone on call connect so the AI has the customer context ready"},"prefetchOrdersOnCallStart":{"type":"boolean","description":"When true (and customer identified), pre-fetch recent orders from the Custom API on call start. Adds ~500-1500ms because orders aren't cached locally."},"maxOrderValue":{"type":"number","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this total amount. `null` means no cap."},"maxOrderLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this number of line items. `null` means no cap."},"customAttributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"The attribute key. Meaning varies per provider (see tool config description)."},"description":{"type":"string","minLength":1,"description":"What the AI should put in this field — shown to the LLM as the parameter description."},"required":{"type":"boolean","description":"When true, the AI must fill the field. The write op is rejected if missing."}},"required":["key","description"]},"description":"Custom fields the AI must collect. The generic Custom API has no structured meta bucket, so these are passed through best-effort (e.g. as order comment context)."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["exelixis_smart"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["get_contact","list_company_contacts","list_support_members","get_order","list_customer_orders","create_ticket","search_items","create_order","send_statement","get_balance"]},"default":[],"description":"Which Exelixis Smart ERP operations the AI is allowed to perform mid-call"},"maxOrderLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this number of lines. `null` means no cap. There is no maxOrderValue: Smart only reports the order total after the order exists."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["magento"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order"]},"default":[],"description":"Which Magento operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the customer context ready"},"prefetchOrdersOnCallStart":{"type":"boolean","description":"When true (and customer identified), pre-fetch recent orders from Magento on call start. Adds ~500-1500ms because orders aren't cached locally."},"maxOrderLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this number of lines. `null` means no cap."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["megasoft"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_name","link_caller_to_customer","lookup_customer_by_afm","verify_customer","get_customer_by_code","get_customer_balance","search_products","get_product_by_code","list_shipping_methods","list_payment_methods","get_customer_orders","get_order_status","get_customer_purchases","list_offers","get_item_price","get_product_stock","get_alt_items","cancel_order","create_order"]},"default":[],"description":"Which Megasoft operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the customer context ready"},"maxOrderLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this number of lines. `null` means no cap."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["gonnaorder"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["search_catalog","get_offer","check_delivery_address","lookup_customer_by_phone","lookup_customer_by_name","link_caller_to_customer","get_customer_orders","list_time_slots","create_order","validate_location","get_order_status","create_payment_link","check_payment_status","create_reservation"]},"default":[],"description":"Which GonnaOrder operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the customer context ready"},"prefetchOrdersOnCallStart":{"type":"boolean","description":"When true (and the caller is identified), pre-fetch their recent orders on call start so \"the usual\" works without a mid-call round-trip."},"maxOrderLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this number of lines. `null` means no cap."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["webhotelier"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["check_availability","search_bookings","get_reservation","get_property_info","create_booking","cancel_booking","get_rooms","get_rates","get_extras","get_availability_calendar","get_best_rate","search_offers","resend_confirmation","check_multi_property_availability","search_properties"]},"default":[],"description":"Which WebHotelier operations the AI is allowed to perform mid-call"},"propertyCode":{"type":"string","description":"WebHotelier property code this agent works with. Overrides the connection default; leave empty to use it."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["hosthub"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["identify_caller","search_reservations","get_reservation","list_rentals","get_rental","check_availability"]},"default":[],"description":"Which Hosthub operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, identify the caller by phone on call connect (from the local reservation cache) so the AI greets them aware of their reservation. Fast — reads the phone-indexed cache, no live Hosthub call."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["prestashop"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_order_states","create_order","update_order_status"]},"default":[],"description":"Which PrestaShop operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_customer_by_phone on call connect so the AI has the customer context ready"},"prefetchOrdersOnCallStart":{"type":"boolean","description":"When true (and customer identified), pre-fetch recent orders from PrestaShop on call start. Adds ~500-1500ms because orders aren't cached locally."},"maxOrderValue":{"type":"number","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this total amount. `null` means no cap."},"maxOrderLines":{"type":"integer","minimum":0,"nullable":true,"description":"Safety cap — create_order is rejected above this number of lines. `null` means no cap."},"customAttributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"The attribute key. Meaning varies per provider (see tool config description)."},"description":{"type":"string","minLength":1,"description":"What the AI should put in this field — shown to the LLM as the parameter description."},"required":{"type":"boolean","description":"When true, the AI must fill the field. The write op is rejected if missing."}},"required":["key","description"]},"description":"PrestaShop-specific custom fields. PrestaShop has no first-class order meta bag via the Webservice, so these are best-effort appended to the order reference/notes."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["airtable"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_record_by_phone","search_records","get_record_by_id","create_record","update_record"]},"default":[],"description":"Which Airtable operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, the runner pre-calls lookup_record_by_phone on call connect so the AI has the caller context ready"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["jira"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_issue","search_issues","create_issue","update_issue","add_comment","get_comments","transition_issue","assign_issue","list_projects","list_create_fields"]},"default":[],"description":"Which Jira operations the AI is allowed to perform mid-call"},"defaultProjectKey":{"type":"string","description":"Project key new issues are created in for this agent (e.g. SUP). Overrides the connection-level default; the AI can still target another project via list_projects. Empty = use the connection default / ask."},"defaultIssueTypeName":{"type":"string","description":"Issue type used when creating issues for this agent (e.g. Task, Incident). Overrides the connection-level default."},"callerKeyType":{"type":"string","enum":["phone","vat","email","custom","none"],"default":"phone","description":"How the caller is identified on tickets they create: phone (auto from caller-ID), vat / email / custom (the AI asks the caller), or none. Drives ticket tagging + the \"show my tickets\" filter, and tells the AI what to ask for."},"callerKeyLabel":{"type":"string","description":"When callerKeyType is \"custom\", the human label for the identifier the AI asks for (e.g. \"Customer Number\", \"Order ID\"). Also used as the tag slug."},"prefetchTicketsOnCallStart":{"type":"boolean","description":"When true (and caller identified by phone), pre-fetch the caller's recent tickets on call connect and inject them into the prompt, so the AI greets them aware of open tickets. Adds ~0.5–1.5s to call setup (Jira has no local cache)."},"callerPhoneFields":{"type":"array","items":{"type":"string"},"description":"Jira fields (name or id, e.g. \"Τηλεφωνο 1\", customfield_10076) that hold the customer phone on tickets created outside Voice Logica (web forms, staff). The caller's tickets are also found by these, and new tickets get the caller phone in the first one."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["guesty"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["identify_caller","get_reservations","get_reservation","get_listings","get_listing_details","get_house_rules","get_conversations","check_availability","get_quote","get_owner_revenue","create_task","list_tasks","send_message"]},"default":[],"description":"Which Guesty operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true, identify the caller (owner/guest) by phone on call connect so the AI greets them aware of their reservations. Adds ~0.5–1.5s to call setup (Guesty has no local cache)."},"guestyPrefetch":{"type":"object","properties":{"reservations":{"type":"boolean","description":"Prefetch the caller's reservations (guest: own bookings; owner: active+upcoming across their listings)."},"listings":{"type":"boolean","description":"Prefetch the owner's listings (owners only)."},"houseRules":{"type":"boolean","description":"Prefetch house rules of the guest's reserved listing (guests with a current/upcoming reservation)."},"conversations":{"type":"boolean","description":"Prefetch the caller's recent Guesty conversations."}},"description":"What to pre-load on call connect once the caller is identified. Each item is a live Guesty call — keep it lean."},"guestyLimits":{"type":"object","properties":{"maxReservationRangeDays":{"type":"integer","minimum":0,"nullable":true,"description":"Cap (days) on an owner-by-listing reservation date range — the strongest guard. Default and system maximum 7."},"maxReservations":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on reservations returned by any single call. Default 10, system maximum 20."},"maxConversations":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on conversations returned / prefetched. Default 5."},"maxListings":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on listings returned. Default 20."},"prefetchReservationBackDays":{"type":"integer","minimum":0,"nullable":true,"description":"Prefetch window: days before today for a caller's reservations. Default 3."},"prefetchReservationForwardDays":{"type":"integer","minimum":0,"nullable":true,"description":"Prefetch window: days after today. Default 4."}},"description":"Guardrail caps that protect the LLM context window — server-clamped maximums for date ranges and result counts."},"guestyQuoteSource":{"type":"string","description":"Value sent as `source` when creating a Guesty quote (get_quote). Identifies where the pricing request came from; Guesty rejects values it does not recognise, so leave blank unless Guesty confirmed a custom one. Defaults to \"manual\"."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["clickup"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["create_task","update_task","update_task_status","move_task","assign_task","list_members","add_attachment","add_comment","search_tasks","get_task","find_list","get_contact_by_number","list_contacts"]},"default":[],"description":"Which ClickUp operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","description":"When true (and a contacts list is configured), the runner pre-calls get_contact_by_number on call connect so the AI greets the caller by name"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["trello"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["list_boards","list_lists","list_cards","get_card","search_cards","list_members","create_card","update_card","move_card","list_comments","add_comment","assign_member","remove_member","add_attachment"]},"default":[],"description":"Which Trello operations the AI is allowed to perform mid-call"},"allowedBoards":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Trello board id"},"name":{"type":"string","minLength":1,"description":"Board display name shown in the UI and to the AI"}},"required":["id","name"]},"description":"Boards this agent may use. Empty = every board the connected Trello account can see. When set, list_boards and every card/list op are restricted to this set."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["dropbox"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["get_account","list_files","get_metadata","get_download_link","search_files","list_shared_links","upload_file","create_folder","create_shared_link","create_file_request","move_file","copy_file","delete_file"]},"default":[],"description":"Which Dropbox operations the AI is allowed to perform mid-call"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["googleChat"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["send_message","send_to_default_space","send_via_webhook"]},"default":[],"description":"Which Google Chat operations the AI may invoke mid-call"},"allowedSpaces":{"type":"array","items":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque space resource name (spaces/AAQA...)"},"displayName":{"type":"string","minLength":1,"description":"Friendly label shown to the LLM and rendered in the UI"}},"required":["spaceName","displayName"]},"description":"Optional space hints surfaced in the tool description as \"known spaces\". Not a restriction: the AI may name any space visible to the connected Google account, resolved live by display name at send time."},"allowedWebhookLabels":{"type":"array","items":{"type":"string","minLength":1},"description":"Names (labels) of configured incoming webhooks the agent may use. Required when send_via_webhook is enabled."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["helpdesk"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","link_caller_to_contact","get_recent_tickets","create_ticket","add_ticket_reply"]},"default":[],"description":"Which helpdesk (Freshdesk/Zendesk) operations the AI is allowed to perform mid-call"},"autoIdentifyCaller":{"type":"boolean","default":true,"description":"When true (and lookup_contact_by_phone is enabled), the runner pre-identifies the caller from the local helpdesk contact cache on call connect so the AI greets them by name"},"prefetchTicketsOnCallStart":{"type":"boolean","description":"When true (and caller identified), pre-fetch the caller's recent tickets on call connect and inject them into the prompt. Adds ~0.5–1.5s to call setup (tickets are fetched live from the provider)."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["courier"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["track_voucher","reschedule_delivery"]},"default":[],"description":"Which courier tracking operations the AI is allowed to perform mid-call"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["outlook"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"enabledOperations":{"type":"array","items":{"type":"string","enum":["check_availability","list_events","create_event","update_event","lookup_contact"]},"default":[],"description":"Which Outlook calendar operations the AI is allowed to perform mid-call"},"defaultCalendarId":{"type":"string","description":"Calendar id used when the AI omits one. Empty = the connected Microsoft account's default calendar."},"timeZone":{"type":"string","description":"IANA time zone availability is computed and events are booked in (e.g. Europe/Athens). Empty = Europe/Athens."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["detect_voice_mail"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"leaveMessage":{"type":"boolean","default":false,"description":"When true, the AI will leave a voicemail message instead of hanging up"},"maxDurationSeconds":{"type":"number","minimum":5,"maximum":120,"default":30,"description":"Maximum seconds the AI will stay on the line to leave a voicemail before hanging up"},"words":{"type":"array","items":{"type":"string"},"default":[],"description":"Custom phrases that indicate a voicemail greeting"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["capture_data_via_sms"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Field key, e.g. \"full_name\" or \"accident_location\""},"description":{"type":"string","description":"What to ask for — shown as the field label/help text on the web form"},"type":{"type":"string","enum":["text","number","location","files"],"description":"Input type; \"location\" asks for GPS + map pin; \"files\" lets the caller upload photos/PDFs (S3 + OCR/AI analysis)"},"required":{"type":"boolean","default":true}},"required":["name","description","type"]},"default":[],"description":"The data fields the web form collects from the caller"},"ttlMinutes":{"type":"integer","minimum":5,"maximum":1440,"default":30,"description":"How long the caller can open and edit the form after the SMS is sent"},"notifyEmails":{"type":"array","items":{"type":"string"},"default":[],"description":"Optional email addresses that receive the submitted values (also on later edits within the TTL)"},"smsMessage":{"type":"string","description":"Optional SMS text template; {{url}} is replaced with the form link and {{minutes}} with the edit window. Empty = default text."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["add_participant"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"allowExternalNumbers":{"type":"boolean","default":false,"description":"When true, the AI may dial numbers outside the company PBX/extension list"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["make_call_private"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["pause_recording"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"announceRecordingPause":{"type":"string","enum":["off","pause","resume","both"],"description":"Tell everyone on the call when recording is paused and/or resumed, in the call language: off (default), pause, resume, both"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["request_data_erasure"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["send_info_page"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["compare_caller_to_branches"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"branches":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Optional stable id for this branch"},"name":{"type":"string","minLength":1,"description":"Spoken branch name, e.g. \"Syntagma store\""},"address":{"type":"string","description":"Full address text used for geocoding when lat/lng are missing"},"latitude":{"type":"number","description":"Latitude in decimal degrees"},"longitude":{"type":"number","description":"Longitude in decimal degrees"},"googlePlaceId":{"type":"string","description":"Optional Google Place ID; used to resolve coordinates when lat/lng are missing"}},"required":["name"]},"default":[],"description":"Company branches / locations the AI may compare against the caller"},"includeCompanyLocation":{"type":"boolean","default":true,"description":"When true, also include the company primary address/place as a branch"},"regionBias":{"type":"string","description":"Optional city/region appended to caller address lookups (e.g. \"Athens, Greece\") to improve autocomplete"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["find_location_info"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"locationDetails":{"type":"array","items":{"type":"string","enum":["phone","website","openingHours","rating","priceLevel","category","summary","mapsLink"]},"default":["phone","website","openingHours","mapsLink"],"description":"Which extra place details to fetch; name, address, latitude/longitude and Place ID are always returned"},"maxResults":{"type":"integer","minimum":1,"maximum":5,"default":3,"description":"How many matching places to return when the caller name is ambiguous"},"regionBias":{"type":"string","description":"Optional city/region/country appended to the search (e.g. \"Greece\") when the caller did not name the area"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["evaluate_conversation"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"channels":{"type":"array","items":{"type":"string","enum":["calls","widget"]},"minItems":1,"default":["calls","widget"],"description":"Where to collect ratings: calls = post-call SMS (UDP), widget = in-widget stars at end"},"collectComment":{"type":"boolean","default":true,"description":"Whether the rating form includes an optional free-text comment"},"allowResubmit":{"type":"boolean","default":false,"description":"When true, the customer can open the link again and change their rating until the link expires"},"sendMode":{"type":"string","enum":["always","evaluate"],"default":"always","description":"always = SMS every eligible call; evaluate = AI decides from evaluationPrompt (post-call analysis)"},"evaluationPrompt":{"type":"string","maxLength":4000,"description":"When sendMode=evaluate: rules for whether to send the rating SMS (e.g. skip spam / wrong number / no real conversation)"},"ttlMinutes":{"type":"integer","default":10080,"description":"SMS evaluation link validity in minutes (enum: 30 min … 30 days); default 7 days"},"senderId":{"type":"string","description":"SMS sender ID for post-call evaluation texts; empty = VoiceLogica"},"smsMessage":{"type":"string","maxLength":160,"description":"Optional SMS prefix (max 160 total with URL); {{company}} supported. URL is always appended. Empty = locale default from caller phone / company country."}},"required":["enabled","name","prompt","type","ttlMinutes"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["extract_document"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["scrape_website"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["caller_verification"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"channel":{"type":"string","enum":["email","sms","both"],"default":"both","description":"Where to send the OTP: email, sms, or both"},"maxAttempts":{"type":"integer","minimum":1,"maximum":10,"default":3,"description":"Wrong-code attempts before verification is locked for this call"},"codeTtlSeconds":{"type":"integer","minimum":60,"maximum":900,"default":300,"description":"OTP validity window in seconds"},"method":{"type":"string","enum":["otp","known_field"],"default":"otp","description":"otp: code by SMS/email. known_field: the caller says the number we called them on, then answers a field on that contact (e.g. ΑΦΜ)"},"matchField":{"type":"string","enum":["vatNumber"],"default":"vatNumber","description":"known_field: contact field the caller must know"},"matchLastDigits":{"type":"integer","minimum":0,"maximum":12,"default":4,"description":"known_field: how many trailing digits the caller must say; 0 = the full value"},"saveCallerNumber":{"type":"boolean","default":true,"description":"known_field: after a match, save the number the caller is calling from on the verified contact"},"recentlyCalledDays":{"type":"integer","minimum":0,"maximum":365,"default":0,"description":"known_field: only find contacts we called in the last N days; 0 = any contact"}},"required":["enabled","name","prompt","type"]},{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the tool is enabled"},"name":{"type":"string","enum":["fleet_management"]},"prompt":{"type":"string","nullable":true,"description":"The prompt of the tool"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"When true, play keyboard wait music while this during-call tool runs (integrations / slow I/O). Instant tools stay false."},"stopsAtStart":{"type":"boolean","default":false,"description":"When true, the published stop list is loaded into the prompt at the start of the call. When false, the agent calls getStops only after the caller names a place."}},"required":["enabled","name","prompt","type"]}],"discriminator":{"propertyName":"name"}},"description":"Tools for the agent"},"mcpServers":{"type":"array","items":{"type":"object","properties":{"connectionId":{"type":"string","minLength":1,"description":"Company MCP connection this agent uses"},"name":{"type":"string","minLength":1,"description":"Display name"},"slug":{"type":"string","minLength":1,"description":"Prefix for LLM tool names (mcp_{slug}__{tool})"},"enabled":{"type":"boolean","default":false},"enabledTools":{"type":"array","items":{"type":"string"},"default":[],"description":"Remote tool names the agent may call"},"selectedToolDefs":{"type":"array","items":{"type":"object","properties":{"remoteName":{"type":"string","minLength":1,"description":"Tool name as published by the MCP server"},"description":{"type":"string","default":""},"inputSchema":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"default":{}}},"required":["remoteName"]},"default":[],"description":"Schemas for enabled tools so live calls stay sync"}},"required":["connectionId","name","slug"]},"description":"Remote MCP servers this agent may call as tools"},"playWaitMusicOnDuringCallTools":{"type":"boolean","description":"When true (default), play keyboard wait music while mid-call tools run (SMS, email, CRM/ERP lookups, during-call workflows). Instant tools like end_call are never included.","example":true},"workflowsIds":{"type":"array","items":{"type":"string"},"description":"Array of workflow action IDs that the agent can execute","example":["workflow-123","workflow-456"]},"allowedToCopy":{"type":"string","enum":["sameCompany","public","publicWithPassword","private"],"description":"Defines who can copy this agent","example":"sameCompany"},"agentEmailSettings":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"systemPrompt":{"type":"string"},"functionCallIds":{"type":"array","items":{"type":"string"}},"mailboxIds":{"type":"array","items":{"type":"string"},"description":"Mailboxes exclusively assigned to this agent for inbound mail conversations"},"ccOptions":{"type":"array","items":{"type":"string"}},"evaluationSettings":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"methodsEnabled":{"type":"object","properties":{"createDraft":{"type":"boolean"},"reply":{"type":"boolean"},"training":{"type":"boolean"}}},"processEmailPrompt":{"type":"string"},"trainingEvaluationPrompt":{"type":"string"},"completeWhenNoReplyNeeded":{"type":"boolean","description":"When true, newsletters/receipts/no-reply are marked closed (completed). Default true."}},"example":{"methodsEnabled":{"createDraft":true,"reply":true,"training":false},"processEmailPrompt":"Keep replies short and professional.","trainingEvaluationPrompt":"Evaluate this email for training purposes.","completeWhenNoReplyNeeded":true}},"displayBusinessDetails":{"type":"object","properties":{"name":{"type":"boolean"},"address":{"type":"boolean"},"website":{"type":"boolean"},"email":{"type":"boolean"},"phone":{"type":"boolean"},"operatingHours":{"type":"boolean"},"isOpenNow":{"type":"boolean"},"utcOffset":{"type":"boolean"},"wheelchairAccessibleEntrance":{"type":"boolean"}},"example":{"name":true,"address":true,"website":true,"email":true,"phone":true,"operatingHours":true,"isOpenNow":true,"utcOffset":true,"wheelchairAccessibleEntrance":false}},"authorizationConfig":{"type":"object","properties":{"smsEnabled":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"emailEnabled":{"type":"boolean"},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"example":{"smsEnabled":true,"emailEnabled":true}},"contactData":{"type":"object","properties":{"enabled":{"type":"boolean"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["enabled"],"example":{"enabled":true}}},"example":{"model":{"completionProvider":"openai","model":"gpt-4o-mini","temperature":0.5,"maxCompletionTokens":500},"systemPrompt":"You are a helpful email assistant. Always be professional and courteous.","functionCallIds":["fc-123","fc-456"],"mailboxIds":["507f1f77bcf86cd799439011"],"ccOptions":["manager@company.com"],"powerUps":["appointment-booking"],"displayBusinessDetails":{"name":true,"address":true,"website":true,"email":true,"phone":true,"operatingHours":true,"isOpenNow":true,"utcOffset":true,"wheelchairAccessibleEntrance":false}},"description":"Email-specific settings for the agent"},"agentPhoneSettings":{"type":"object","properties":{"interimGeneration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to generate interim generation while user is speaking"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to trigger interim generation"},"prompt":{"type":"string","description":"The prompt to use when generating interim generation"},"minimumWordsForFullResponse":{"type":"number","description":"The minimum number of words for a full response"}},"description":"Configuration for interim generation"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"AI model configuration for the agent"},"sendSms":{"type":"boolean","description":"Whether to send SMS"},"blockInterruptionWhileAiIsGenerating":{"type":"boolean","description":"Whether to block interruption while AI is generating"},"senderId":{"type":"string","description":"The ID of the sender to use for SMS"},"allowHumanToInterruptAiOnFirstMessage":{"type":"boolean","description":"Whether to allow human to interrupt AI on the first message"},"ssml":{"type":"boolean","description":"Whether to use SSML (Speech Synthesis Markup Language) for voice synthesis"},"skipTurnEnabled":{"type":"boolean","description":"Whether to skip turn during the call"},"skipTurnPrompt":{"type":"string","description":"The prompt to use when skipping turn during the call"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"timesToNudgeBeforeHungup":{"type":"number","minimum":0,"maximum":3,"description":"Number of times to nudge the user before hanging up the call (1-3)"},"nudgeIntervalSeconds":{"type":"number","minimum":0,"maximum":60,"description":"Interval in seconds between nudges when user is silent (0-60 seconds)"},"nudgePrompt":{"type":"string","description":"The prompt to use when nudging the user"},"actionsAfterNudge":{"type":"array","items":{"type":"string","enum":["hangup","forward"]},"maxItems":2,"description":"Actions after nudge when silence threshold is reached (hangup, forward, or both)"},"systemPrompt":{"type":"string","description":"The system prompt that defines the agent's behavior and personality"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"phoneFirstMessageAiGenerated":{"type":"boolean","description":"Whether the first message should be AI-generated or use a predefined message"},"updateAdaptationPhrasesOnSystemPromptChange":{"type":"boolean","description":"Whether to update adaptation phrases when system prompt changes"},"phoneFirstMessage":{"type":"string","description":"The first message to say when the call connects"},"phoneFirstMessageOffHours":{"type":"string","description":"Welcome message when the business is closed; if empty, the normal first message is used"},"endCallAfterOffHoursWelcomeMessage":{"type":"boolean","description":"When the business is closed and the off-hours welcome message plays, hang up as soon as it finishes instead of continuing the conversation"},"transcriptionConfig":{"type":"object","properties":{"transcriptionProvider":{"type":"string","enum":["microsoft","google","fireworks","speechmatics","openai","assemblyai","deepgram","google_v1","google_v2","elevenlabs","voicelogica","soniox"],"description":"The transcription service provider to use for speech-to-text"},"silenceDurationMs":{"type":"number","minimum":500,"description":"Duration of silence in milliseconds before considering the user finished speaking"},"adaptationPhraseSetIds":{"type":"array","items":{"type":"string"},"description":"IDs of adaptation phrase sets to improve transcription accuracy"},"transcriptionVoiceMailPhrases":{"type":"array","items":{"type":"string"},"description":"Phrases that indicate the call has reached a voicemail system"},"waitForFullTranscription":{"type":"boolean","description":"Whether to wait for complete transcription before processing"},"enhanced":{"type":"boolean","description":"Whether to use enhanced transcription models for better accuracy"},"audioEnhancement":{"type":"boolean","description":"Whether to run ai-coustics speech enhancement (noise/background-speech suppression) on caller audio before transcription"},"audioEnhancementLevel":{"type":"number","minimum":0,"maximum":1,"description":"How aggressively the ai-coustics model suppresses noise (0.0-1.0). Uses the model default when omitted"},"endpointSensitivity":{"type":"number","minimum":-1,"maximum":1,"nullable":true,"description":"Soniox only: how aggressively endpoints are detected (-1.0 to 1.0). Higher = faster end-of-turn but more risk of cutting the caller off mid-sentence. Platform default 0.3"},"maxEndpointDelayMs":{"type":"number","minimum":500,"maximum":3000,"nullable":true,"description":"Soniox only: hard cap on how long Soniox may wait for an endpoint after speech ends (500-3000ms). Platform default 1500"},"endpointLatencyAdjustmentLevel":{"type":"integer","minimum":0,"maximum":3,"nullable":true,"description":"Soniox only: endpoint latency reduction level 0-3 (3 = most aggressive). Platform default 3"},"speculativeFinalize":{"type":"boolean","nullable":true,"description":"Soniox only: at the speculative quiet moment, request finalize() to flush pending tokens into the candidate before the endpoint. Platform default from admin settings"},"singleUtterance":{"type":"boolean","description":"Whether to process speech as single utterances"},"openAiModel":{"type":"string","enum":["whisper-1","gpt-transcribe","gpt-4o-transcribe","gpt-4o-mini-transcribe","gpt-4o-transcribe-diarize"],"description":"OpenAI model to use for transcription"},"prompt":{"type":"string","description":"Custom prompt used for transcription processing"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to focus on during transcription"},"initializationMethod":{"type":"string","enum":["on_call_start","on_human_join"],"description":"Method to initialize the transcription service"}},"required":["transcriptionProvider"],"description":"Configuration for speech-to-text transcription settings","example":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"waitForFullTranscription":false,"openAiModel":"whisper-1"}},"standbyConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable standby (sleep/wake) for this agent"},"wakePhrases":{"type":"array","items":{"type":"string","minLength":2,"maxLength":50},"maxItems":5,"description":"Phrases that wake the agent. On human-to-human calls the agent stays asleep until one is heard; on normal AI calls a wake phrase brings it back after it was told to sleep. Both parties hear the response."},"sleepPhrases":{"type":"array","items":{"type":"string","minLength":2,"maxLength":50},"maxItems":5,"default":[],"description":"Phrases that put the agent into standby — it stops responding entirely until woken (distinct from skip-turn). Mainly used on normal AI calls."}},"required":["enabled","wakePhrases"],"description":"Standby (sleep/wake) configuration","example":{"enabled":true,"wakePhrases":["logica"],"sleepPhrases":["go to sleep"]}},"voipConnectionIds":{"type":"array","items":{"type":"string"},"description":"@deprecated Legacy VoIP connection IDs. Use transferSettings.availableTransferDestinations + SipTrunk / UserEndpoint / UserGroup. Kept for backward-compat reads until the migration script lands."},"connectDynamically":{"type":"boolean","description":"Whether to connect the user to the appropriate AI or Human Agent dynamically based on the system prompt"},"firstMessageSenderOnOutgoingCall":{"type":"string","enum":["agent","user"],"description":"Who should send the first message on outgoing calls"},"endCallConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable automatic call ending. When enabled, the agent can end calls based on configured reasons"},"messageToClient":{"type":"string","description":"The message the agent will say to the client before ending the call. This is used when aiGenerated is false"},"aiGenerated":{"type":"boolean","description":"When true, the agent will generate a contextual goodbye message. When false, it uses the fixed messageToClient"},"maximumTimeEnabled":{"type":"boolean","description":"Enable automatic call termination after reaching the maximum time limit"},"maximumTimeCallInSeconds":{"type":"number","minimum":1,"description":"Maximum allowed call duration in seconds. Calls will automatically end when this limit is reached (e.g., 300 for 5 minutes)"},"endCallReasons":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","description":"The specific condition or reason when the agent should end the call (e.g., \"customer doesnt want anything else\", \"issue resolved\", \"transferred to human\")"},"aiGenerated":{"type":"boolean","description":"When true, the AI generates a contextual goodbye message. When false, uses a fixed message"},"prompt":{"type":"string","description":"Template or instruction for the AI to generate the goodbye message. Used when aiGenerated is true to guide the tone and content"},"maxInterruptions":{"type":"integer","minimum":0,"maximum":5,"description":"How many times the caller may interrupt the goodbye and keep the call alive before the hangup becomes final. 0 hangs up at once even if the caller speaks. Defaults to 1"}},"required":["reason","aiGenerated"],"example":{"reason":"completed","aiGenerated":true,"prompt":"Thank you for calling. Have a great day!"}},"description":"Detailed end call configurations with specific reasons and custom prompts. Each reason defines when the agent should end the call and what to say"}},"description":"Configuration for automatic call ending behavior","example":{"enabled":true,"aiGenerated":true,"maximumTimeEnabled":true,"maximumTimeCallInSeconds":300,"endCallReasons":[{"reason":"when customer doesnt want anything else","messageToClient":"Thank you for calling. If you need anything else, please call back.","aiGenerated":true}]}},"afterCallFunctionCallIds":{"type":"array","items":{"type":"string"},"description":"IDs of function calls to execute after the call ends"},"postCallAnalysisConfig":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"AI model to use for post-call analysis"},"minimumDuration":{"type":"number","description":"Minimum duration in seconds to generate post-call analysis & summary"},"summaryEnabled":{"type":"boolean","description":"Whether to generate summary"},"summaryPrompt":{"type":"string","maxLength":5000,"description":"Custom prompt for generating call summary"},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties to extract and analyze from the call"},"allowedAutoTaskKinds":{"type":"array","items":{"type":"string","enum":["todo","call","meeting","reminder","callback"]},"description":"Task kinds the AI may auto-create at the end of the call. Human↔AI calls only allow \"callback\"; human↔human (transferred) calls allow the others. Empty = the AI creates no tasks post-call."},"analysisPrompt":{"type":"string","description":"Custom prompt for call analysis"},"emails":{"type":"array","items":{"type":"string","format":"email"},"description":"Email addresses to send post-call analysis to"},"phoneNumbers":{"type":"array","items":{"type":"string"},"description":"Phone numbers to send post-call analysis to"},"webhookHeaders":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The key of the webhook header"},"value":{"type":"string","description":"The value of the webhook header"}},"required":["key","value"]},"description":"Webhook headers to send with the post-call analysis data"},"webhookUrl":{"type":"string","format":"uri","description":"Webhook URL to send post-call analysis data to"},"webhookUseProtectedValues":{"type":"boolean","description":"When the agent protects sensitive data: send the REAL values (ΑΦΜ, ΑΜΚΑ, IBAN, …) to this webhook instead of the placeholders. Off by default; every send is audited. Only members who may reveal sensitive data can turn it on."},"analysisSmsConfig":{"type":"object","properties":{"sendSmsCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"smsPromptEvaluation":{"type":"string","description":"Prompt to evaluate if sms should be sent"},"smsMessage":{"type":"string","description":"Custom sms message to send"},"minimumDuration":{"type":"number","description":"Minimum duration in minutes to send sms"},"sendSmsFromCallerId":{"type":"boolean","description":"Whether to send the SMS using the caller ID (company phone number) that made the call as the sender"}},"required":["sendSmsCondition"],"description":"Configuration for sms content"},"telegramChats":{"type":"array","items":{"type":"string"},"description":"Telegram chat ids that receive the post-call alert. Ids come from the reachable-chat registry (GET /telegram/chats) — a bot may only message a chat that contacted it first, so arbitrary ids cannot be typed in."},"analysisTelegramConfig":{"type":"object","properties":{"sendTelegramCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"telegramPromptEvaluation":{"type":"string","description":"Prompt to evaluate if a Telegram message should be sent (and, with evaluate_condition_and_recipients, which chats)"},"telegramMessage":{"type":"string","description":"Custom Telegram message to send"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds before a Telegram alert is sent"}},"required":["sendTelegramCondition"],"description":"Configuration for the Telegram alert"},"viberChannelIds":{"type":"array","items":{"type":"string"},"description":"Connected Viber Channels (ids from the Viber Channels list) that receive the post-call alert"},"analysisViberChannelConfig":{"type":"object","properties":{"sendViberChannelCondition":{"type":"string","enum":["always","evaluate_condition","never"]},"viberChannelPromptEvaluation":{"type":"string","description":"Prompt to evaluate whether the Viber Channel alert should be posted"},"viberChannelMessage":{"type":"string","description":"Custom Viber Channel message (defaults to the call summary). Takes {{placeholders}}: any analysis property ({{client_name}}), {{summary}}, {{analysis_fields}} (every analysis property as \"Label: value\"), {{phone_number}}"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds before a Viber Channel alert is posted"}},"required":["sendViberChannelCondition"],"description":"Configuration for the Viber Channel alert"},"analysisEmailConfig":{"type":"object","properties":{"dailyDigest":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Send one summary email a day instead of one per call. With a condition prompt, calls that pass it are still emailed at once (urgent); the rest go in the summary."},"alsoEachCall":{"type":"boolean","description":"Also send the normal email after each call, on top of the daily summary. Default false."},"sendTime":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Local time (company timezone) to send the summary, HH:mm. Default 20:00. It covers the 24 hours before."},"lastSentAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["enabled"],"description":"Daily summary email instead of one email per call"},"includeInEmail":{"type":"object","properties":{"callUrl":{"type":"boolean","description":"Whether to include call URL in email"},"summary":{"type":"boolean","description":"Whether to include call summary in email"},"analysisProperties":{"type":"boolean","description":"Whether to include analyzed properties in email"},"dynamicVariables":{"type":"boolean","description":"Whether to include collected / dynamic variables (e.g. widget form fields) in email"},"recording":{"type":"boolean","description":"Whether to include call recording in email"},"transcription":{"type":"boolean","description":"Whether to include call transcription in email"}},"description":"Configuration for email content"},"sendEmailCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"emailPromptEvaluation":{"type":"string","description":"Prompt to evaluate if email should be sent"},"emailSubject":{"type":"string","description":"Custom email subject to send"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds to send email (voice / websocket calls)"},"minimumVisitorMessages":{"type":"integer","minimum":0,"description":"Minimum visitor (Contact/User) messages required to send email for chat / message sessions"}},"required":["sendEmailCondition"],"description":"Configuration for email content"},"excludePhoneNumbers":{"type":"array","items":{"type":"string"},"description":"Caller phone numbers excluded from post-call processing. This suppresses the whole post-call pipeline for that number, not just the notification: no summary is generated, and because caller memory is built from stored summaries, an excluded number also loses memory of its previous calls. Use it for internal test lines, never for a customer you still want remembered."},"evaluationConfig":{"type":"object","properties":{"issuesEnabled":{"type":"boolean","description":"Run the QA/issue lens (defaults on)"},"opportunitiesEnabled":{"type":"boolean","description":"Run the opportunity-mining lens (defaults off; sellable)"},"audioAnalysisEnabled":{"type":"boolean","description":"Re-transcribe the recording for WER and flag awkward pauses (defaults on)"},"errorAlertsEnabled":{"type":"boolean","description":"Email Voice Logica (alerts@) when a call has session errors — never the customer (defaults on)"},"customFocus":{"type":"string","maxLength":2000,"nullable":true,"description":"Free-text \"what matters most\" steering for the judge"},"customCriteria":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"maxItems":5,"description":"Named checks the judge evaluates"},"judgeModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Plan-gated client choice of evaluation model; falls back to the admin A/B pool"},"remediation":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow the evaluator to act post-call (alert business + VL admin for risky/unfixable misses)"},"autoSendToCustomer":{"type":"boolean","description":"Permit auto-sending the drafted follow-up to the caller for SAFE misses (hybrid auto-action)"},"mode":{"type":"string","enum":["alert","managed_agent"],"description":"\"alert\" = detect+notify (+ safe auto-message); \"managed_agent\" = a guard-railed agent re-runs the missed tools using the live toolset, then alerts for what it could not do"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Per-agent override for the remediation agent's primary model (plan-gated)"},"escalationModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Per-agent override for the smarter model the remediation agent escalates to (plan-gated)"}},"description":"Post-call remediation policy — hybrid: safe auto-actions + human alerts for risky"}},"description":"Admin-only post-call evaluation configuration"}},"description":"Configuration for post-call analysis and reporting","example":{"analysisPrompt":"Analyze this call for customer satisfaction and key points discussed.","summaryPrompt":"Provide a concise summary of this call.","emails":["analyst@company.com"],"analysisSmsConfig":{"sendSmsCondition":"always","smsPromptEvaluation":"","smsMessage":"{{phone_number}} {{viewUrl}}","minimumDuration":10,"sendSmsFromCallerId":false},"analysisEmailConfig":{"sendEmailCondition":"always","emailPromptEvaluation":"","emailSubject":"Voice Logica AI- Call analysis: {{caller}} {{date}}","includeInEmail":{"callUrl":true,"summary":true,"analysisProperties":true,"dynamicVariables":true,"recording":true,"transcription":true},"minimumDuration":10,"minimumVisitorMessages":1}}},"sendDmtf":{"type":"boolean","description":"Whether to send DTMF tones during the call (will be active for 40 seconds)"},"dtmfTimeout":{"type":"number","minimum":1,"maximum":60,"description":"Timeout for DTMF input in seconds (1-60 seconds)"},"dtmfKeyToTrigger":{"type":"string","enum":["dtmf-timeout","#","*"],"description":"Keys to trigger the workflow"},"secondsRingingUntilAnswer":{"type":"number","minimum":1,"maximum":60,"description":"Number of seconds to ring before considering the call unanswered (1-60 seconds)"},"volumeThreshold":{"type":"number","minimum":0,"maximum":1,"description":"Audio volume threshold for detecting speech (0.0 to 1.0)"},"saveRecording":{"type":"boolean","description":"Whether to save call recordings"},"saveRecordingGoogleDrive":{"type":"boolean","description":"Whether to save call recordings to Google Drive"},"topNknowledgeQuestionsInPrompt":{"type":"number","minimum":1,"maximum":20,"description":"DEPRECATED — not read by the prompt path; use nKnowledgeFilesQuery"},"nKnowledgeFilesQuery":{"type":"number","minimum":1,"maximum":10,"description":"Number of knowledge files to query for context (max 10)"},"selectiveKnowledgeLookup":{"type":"boolean","description":"When enabled, the AI uses a tool to selectively query specific knowledge files instead of searching all files on every message"},"generateKnowledgeFromTransferredCalls":{"type":"boolean","description":"When enabled, transferred calls are analysed post-transfer and any valuable Q&A insights are added to a private per-agent knowledge file, which is then loaded automatically on future calls."},"recordUnansweredQuestions":{"type":"boolean","description":"When enabled, every finished call is analysed for questions the agent could not answer. Each is stored on the agent’s private knowledge file with no answer and a count of how many calls have asked it, so the gaps can be answered in order of demand. These entries are never retrievable until someone writes the answer."},"unansweredQuestionTargets":{"type":"array","items":{"type":"string","enum":["agent","company"]},"description":"Where captured unanswered questions are stored. 'agent' keeps them on this agent's own file; 'company' puts them on a shared file every agent in the company reads. Select both to have each question routed to one or the other. Defaults to ['agent']."},"unansweredRoutingPrompt":{"type":"string","maxLength":1000,"description":"Only used when BOTH targets are selected: your own rule for which questions belong to the company file and which to this agent. Leave empty to use the default — business-wide facts go to the company, anything tied to what this agent handles stays with the agent."},"maxTimeMemory":{"type":"number","description":"Maximum time in seconds to keep conversation context in memory"},"maxInteractionsMemory":{"type":"number","minimum":0,"maximum":20,"description":"Maximum number of interactions to keep in conversation memory (max 20)"},"droppedCallResumeSeconds":{"type":"number","minimum":0,"maximum":86400,"description":"How long a returning caller or chat visitor (same number / same email) gets the LAST session's messages and AI dialogue on the new call. Memory must be on. The previous session's summary is not injected — the full last conversation is already there. Defaults to 600 (10 minutes). Max 86400 (1 day). Set 0 to always start fresh."},"droppedCallResumeMaxTurns":{"type":"number","minimum":1,"maximum":40,"description":"Optional cap on how many trailing spoken turns of the dropped call to carry over. Leave unset — the default — to carry the ENTIRE conversation, which is what keeps resolved data such as product codes and the identified customer available so the caller is never asked for them twice. Only set this if chained resumes (a caller dropping repeatedly on a bad line) grow the context too far."},"transferType":{"type":"string","enum":["warm","cold"],"description":"Type of call transfer: warm (with context) or cold (without context)"},"transferHoldSoundFileId":{"type":"string","description":"The custom sound to play when the call is transferred"},"transferHoldSound":{"type":"string","enum":["none","coffee_shop","call_center","office","soft_piano","lounge","waiting_room","custom"],"description":"The sounds to play when the call is transferred"},"transferSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Master switch for the agent's transfer capability. When false the AI is not given any transfer tool (forward_call / connect_dynamically) and the available-destinations prompt block is suppressed — but every other field on this object is preserved so the admin can re-enable it without losing config. Treated as true when undefined, for backward compatibility with agents created before this flag existed."},"transferMode":{"type":"string","enum":["blind","warm","attended"],"description":"Transfer mode: blind (immediate REFER), warm (consult + media merge), attended (SIP hold + consult + REFER/Replaces)."},"blindTransfer":{"type":"boolean","description":"Deprecated — use transferMode. Kept for legacy read compat only."},"announceTransferReason":{"type":"boolean","description":"Whether to announce the transfer reason to the person we are transferring the call to."},"transferCallBasedOnPromptInstructions":{"type":"boolean","description":"Whether to dynamically generate the transfer based on the prompt instructions."},"promptForTransferReason":{"type":"string","description":"The prompt to use when dynamically generating the transfer reason."},"analyzeTransferredCall":{"type":"boolean","description":"Whether to analyze the transferred call."},"blockTransferWhenCompanyIsClosed":{"type":"boolean","description":"Whether to block the transfer when the company is closed."},"agentIdToAnalyzeTransferredCall":{"type":"string","description":"The agent ID to analyze the transferred call."},"showCallerId":{"type":"boolean","description":"Whether to show the original caller ID to the person we are transferring the call to Or the current phone number."},"secondsToWaitForCallerToAnswer":{"type":"number","minimum":0,"maximum":60,"description":"The number of seconds to wait for the caller to answer the call."},"availableTransferDestinations":{"type":"array","items":{"type":"object","properties":{"destinationType":{"type":"string","enum":["UserEndpoint","UserGroup","External","Agent"],"description":"Kind of destination — UserEndpoint, UserGroup, External, or Agent."},"destinationId":{"type":"string","minLength":1,"maxLength":100,"description":"Target id (UserEndpoint id, UserGroup id, Agent id) or for External the phone number to dial."},"mode":{"type":"string","enum":["inherit","refer","attended"],"description":"Per-destination dispatch override: `refer` (blind, send SIP REFER), `attended` (place outbound INVITE, bridge on pickup), or `inherit` (use the agent-level blindTransfer flag). Omitted is treated as `inherit`. Internal AGENT destinations ignore this field — they always go through the agent-handoff path once it ships."},"reasonToConnect":{"type":"string","maxLength":500,"description":"When to connect the caller to this destination (e.g. \"when they ask for Dimitris\"). Injected into the live-call transfer catalog."}},"required":["destinationType","destinationId"],"description":"Whitelisted transfer destination available to this agent."},"maxItems":200,"description":"Explicit whitelist of destinations this agent may transfer to. Ignored when allowAllAvailableDestinations is true."},"allowAllAvailableDestinations":{"type":"boolean","description":"When true the agent may transfer a phone call to any enabled UserEndpoint or UserGroup (ringing that user's devices when they have SIP / app / mobile). Chat handoff uses company users. When false, only entries in availableTransferDestinations are offered."},"transferToExternalNumbers":{"type":"boolean","description":"When true the agent may transfer to external phone numbers."},"transferTimeLimitEnabled":{"type":"boolean","description":"Enable automatic transfer after the call reaches the configured time limit."},"transferTimeLimitInSeconds":{"type":"number","minimum":1,"description":"Call duration in seconds after which the agent automatically transfers the call (e.g. 120 for 2 minutes)."},"transferTimeLimitPrompt":{"type":"string","description":"Routing instructions for the automatic time-limit transfer: the destination (phone number, extension or agent ID) and what to tell the caller. Used with connect_dynamically when the time limit is reached."},"maxTransferAttemptsPerCall":{"type":"integer","minimum":1,"maximum":20,"nullable":true,"description":"Opt-in cap on transfer attempts in one call. Once reached, further transfers are refused and the agent takes a message. Unset = unlimited."}},"description":"Configuration for transfer settings","example":{"enabled":true,"announceTransferReason":false,"analyzeTransferredCall":false,"agentIdToAnalyzeTransferredCall":"","transferCallBasedOnPromptInstructions":false,"promptForTransferReason":"Forward to 100 for accounting. For sales, forward to 101. For support, forward to 102.","transferMode":"warm","showCallerId":false,"secondsToWaitForCallerToAnswer":40,"allowAllAvailableDestinations":false,"availableTransferDestinations":[],"transferToExternalNumbers":true}},"enableCallBackAtRequestedTime":{"type":"boolean","description":"Whether to enable callback functionality when users request to be called back at a later date/time"},"callBackIfCallDropsPrompt":{"type":"string","description":"Custom prompt to use when initiating a callback if the call drops"},"skroutzSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether Skroutz is enabled"},"topNSkroutzProductsInPrompt":{"type":"number","description":"Number of Skroutz products to include in the prompt"},"nSkroutzProductsQuery":{"type":"number","description":"Number of Skroutz products to query"},"minProductCodeLength":{"type":"integer","minimum":1,"maximum":20,"description":"Minimum normalized digit length for an utterance to be treated as a product code in the autonomous Skroutz lookup. Defaults to 4 when unset."},"webhookUrl":{"type":"string","format":"uri","description":"Webhook URL to send Skroutz products to"},"webhookHeaders":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The key of the webhook header"},"value":{"type":"string","description":"The value of the webhook header"}},"required":["key","value"]},"description":"Webhook headers to send with the Skroutz products data"}},"required":["enabled","topNSkroutzProductsInPrompt","nSkroutzProductsQuery"],"description":"Configuration for Skroutz settings","example":{"enabled":true,"topNSkroutzProductsInPrompt":3,"nSkroutzProductsQuery":5,"webhookUrl":"https://webhook.site/123e4567-e89b-12d3-a456-426614174000","webhookHeaders":[{"key":"Content-Type","value":"application/json"}]}},"voiceMailPhoneNumber":{"type":"string","description":"Phone numbers to attach voice mail to"}},"description":"Request schema for agent phone settings configuration","example":{"model":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0.5,"maxCompletionTokens":500},"systemPrompt":"You are a helpful customer support assistant.","voiceConfig":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","speed":1,"backgroundSound":"none","stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2},"phoneFirstMessageAiGenerated":true,"transcriptionConfig":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false},"voipConnectionIds":["voip-123"],"connectDynamically":false,"firstMessageSenderOnOutgoingCall":"agent","saveRecording":true,"transferType":"warm"}},"appointmentSettings":{"type":"object","properties":{"enabled":{"type":"boolean","nullable":true,"description":"Whether the appointment settings are enabled"},"isOnline":{"type":"boolean","nullable":true,"description":"Whether the appointment settings are online"},"services":{"type":"array","items":{"type":"object","properties":{"serviceKey":{"type":"string","description":"Stable internal identity for this service; calendars reference it so renames are safe"},"name":{"type":"string","description":"The name of the service"},"description":{"type":"string","description":"The description of the service"},"duration":{"type":"number","description":"The duration of the service in minutes"},"allowedMeetingTypes":{"type":"array","items":{"type":"string","enum":["online","phone","client-location","office-location"]},"description":"How this service can be delivered. `online`: video (e.g. Google Meet). `phone`: voice call only. `client-location`: at an address the caller provides (use location lookup tool). `office-location`: at the provider’s office; set `officeAddress` on the service (or on the matching working-hours row). Omit or `[]` when not set. Used when a working-hours row is `not-set` to decide Meet / location / office."},"officeAddress":{"type":"string","description":"Provider’s office address when `office-location` is in allowedMeetingTypes. Shown to the user for office bookings; working-hours rows may override with their own officeAddress."},"colorId":{"oneOf":[{"type":"string","enum":["1","2","3","4","5","6","7","8","9","10","11"]},{"type":"string","enum":[""]}],"description":"Google Calendar event color ID as a string, \"1\"–\"11\". Omit or \"\" for the default calendar color."}},"required":["name","description","duration","allowedMeetingTypes","colorId"]},"description":"The services of the appointment settings"},"concurrentBookings":{"type":"number","description":"The number of concurrent bookings"},"useGlobalConcurrentBookings":{"type":"string","enum":["not-set","true"],"description":"Use the global concurrentBookings for all calendars (true) or per-calendar concurrentBookings (not-set)"},"allDayBookings":{"type":"boolean","description":"Whether the appointment settings are enabled for all day bookings"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"The parameters of the appointment settings"},"canSameClientBookMultipleAppointmentsInFuture":{"type":"string","enum":["not-set","true","false"],"description":"Whether the same client can book multiple appointments in the future"},"canClientCancelAppointmentWithAi":{"type":"string","enum":["not-set","true","false"],"description":"Whether the client can cancel the appointment with AI"},"futureDaysAllowToBook":{"type":"string","enum":["not-set","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","21","30","45","60","90","120","180","365"],"description":"The number of days in advance that the appointment can be booked"},"sendConfirmation":{"type":"boolean","description":"Whether the confirmation is sent"},"confirmationPrompt":{"type":"string","description":"The confirmation prompt for the appointment"},"confirmationSmsSenderId":{"type":"string","description":"Sender shown on the confirmation SMS (a verified Yuboto sender ID). Empty falls back to the send_sms tool sender, then to VoiceLogica."},"appointmentDescriptionContents":{"type":"array","items":{"type":"string","enum":["questions","services","notes","location","call_url","summary","recording_url"]},"description":"Blocks included in the calendar event description: questions, services, notes, location, call_url, summary, recording_url. Omit for the default set (questions, notes, location, summary)"},"calendars":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the calendar"},"calendarKey":{"type":"string","description":"Stable internal identity for this calendar; allows several calendars to share one Google calendarId"},"calendarId":{"type":"string","description":"The provider calendar ID this calendar reads/writes (Google or Azure/Outlook; may be shared across calendars)"},"provider":{"type":"string","enum":["google","azure"],"description":"Calendar backend for this calendar: 'google' or 'azure' (Microsoft 365). Omit to use the company default."},"description":{"type":"string","description":"The description of the calendar"},"serviceKeys":{"type":"array","items":{"type":"string"},"description":"The serviceKeys of the services of the calendar"},"serviceNames":{"type":"array","items":{"type":"string"},"description":"Legacy name-based service reference; kept for calendars saved before serviceKeys existed"},"futureDaysAllowToBook":{"type":"number","minimum":1,"maximum":365,"description":"The number of days in advance that the appointment can be booked"},"concurrentBookings":{"type":"number","description":"Per-calendar concurrent bookings; omit or 0 to inherit the agent-level default"},"countAllCalendarEventsForConcurrency":{"type":"boolean","description":"Advanced: count every Voice Logica booking on the same Google calendar toward concurrency, whichever logical calendar made it (ignore service names). Use it when several logical calendars share one Google calendar. Default is service-name concurrency."},"restrictions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["max_per_hour","max_per_day","max_per_week","min_gap_minutes","min_notice_hours","min_notice_business_days","min_notice_calendar_days"],"description":"max_per_hour | max_per_day | max_per_week | min_gap_minutes (minimum free gap between appointments) | min_notice_hours (earliest bookable slot is this many hours from now) | min_notice_business_days (this many full company operating days of notice after today; today never counts; every calendar uses that same date, falling back to the union of calendar working days when the company has no hours) | min_notice_calendar_days (same, counting every day including closed ones)"},"limit":{"type":"number","minimum":1,"description":"Cap for max_* types, gap in minutes for min_gap_minutes, lead-time hours for min_notice_hours, or number of days for the min_notice_*_days types (days of notice after today, so 2 on a Wednesday makes Friday the earliest bookable day)"},"serviceNames":{"type":"array","items":{"type":"string"},"description":"When set, restriction applies only to these service names; omit for all services on the calendar"},"enabled":{"type":"boolean","description":"When false, restriction is ignored. Default true."}},"required":["type","limit"]},"description":"Optional booking restrictions: max per hour/day/week, minimum gap between appointments, or minimum notice (hours or operating days) before the start"},"appointmentTitle":{"type":"string","description":"The title of the appointment"},"appointmentNotes":{"type":"string","description":"The notes of the appointment"},"canClientCancelAppointmentWithAi":{"type":"boolean","description":"Whether the client can cancel the appointment with AI"},"canSameClientBookMultipleAppointmentsInFuture":{"type":"boolean","description":"Whether the same client can book multiple appointments in the future"},"workingHours":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Day of the week"},"meetingType":{"type":"string","enum":["online","phone","client-location","office-location","not-set"],"default":"not-set","description":"Modality for this time window: online (Meet), phone, client-location, or office-location. `not-set` = inherit Meet / location / office behaviour from each booked service’s allowedMeetingTypes."},"officeAddress":{"type":"string","description":"Physical office for this window when it includes office-location; overrides service.officeAddress if both are set."},"startTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"Start time for bookings in this window (local calendar day)"},"endTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"End time for bookings in this window (local calendar day)"}},"required":["day","startTime","endTime"]},"description":"Per-calendar bookable windows. Same `day` may appear multiple times for split schedules (e.g. Fri morning office, Fri afternoon client site)."}},"required":["name","calendarId","description","serviceNames","futureDaysAllowToBook"]},"description":"Array of calendar IDs that the appointment settings are enabled for"},"useGlobalWorkingHours":{"type":"string","enum":["not-set","true"],"description":"Use global working hours for all calendars (true) or per-calendar working hours (not-set)"},"workingHours":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Day of the week"},"meetingType":{"type":"string","enum":["online","phone","client-location","office-location","not-set"],"default":"not-set","description":"Modality for this time window: online (Meet), phone, client-location, or office-location. `not-set` = inherit Meet / location / office behaviour from each booked service’s allowedMeetingTypes."},"officeAddress":{"type":"string","description":"Physical office for this window when it includes office-location; overrides service.officeAddress if both are set."},"startTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"Start time for bookings in this window (local calendar day)"},"endTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"End time for bookings in this window (local calendar day)"}},"required":["day","startTime","endTime"]},"description":"Global bookable windows when useGlobalWorkingHours is true. Same weekday may repeat with different times and meetingType (e.g. Fri morning office, Fri afternoon client site)."},"reminderSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the reminder is enabled"},"daysBefore":{"type":"number","description":"The number of days before the appointment to send the reminder"},"time":{"type":"string","description":"The time of the day to send the reminder"},"type":{"type":"string","enum":["email","sms","phone"],"description":"The type of reminder"},"numberOfRetries":{"type":"number","description":"The number of retries for the reminder"},"sendFallbackSms":{"type":"boolean","description":"Whether the fallback SMS is sent"},"fallbackSms":{"type":"string","description":"The fallback SMS message for the appointment"}},"required":["enabled","daysBefore","time","type","numberOfRetries","sendFallbackSms","fallbackSms"],"description":"The reminder settings for the appointment"},"waitingListEnabled":{"type":"boolean","description":"Whether the waiting list is enabled"},"waitingListSettings":{"type":"object","properties":{"candidateDays":{"type":"number","minimum":1,"maximum":365,"description":"How far ahead to look for people to call about a freed slot. Defaults to 30 days; without it the search follows futureDaysAllowToBook, which can be a full year."},"callFromHour":{"type":"string","description":"Earliest local time to place a waiting-list call, HH:MM. Default 09:00."},"callToHour":{"type":"string","description":"Latest local time to place a waiting-list call, HH:MM. Default 20:00."}},"description":"Bounds on who the waiting list calls, and when"}},"required":["sendConfirmation"],"nullable":true,"description":"Appointment booking settings for the agent"},"widgetSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the embeddable widget is enabled for this agent"},"allowedDomains":{"type":"array","items":{"type":"string"},"description":"Hostnames allowed to embed this widget. Empty = allow all."},"allowWwwVariant":{"type":"boolean","description":"Also allow www. variant of each allowed domain"},"actionsRequireVerification":{"type":"boolean","description":"Unverified visitors get a questions-only agent: tools that send messages or touch external systems load only after email/mobile/Google verification"},"collectFields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$","description":"Dynamic variable key used in prompts as {{key}}"},"label":{"type":"string","minLength":1,"maxLength":120,"description":"Label shown to the visitor"},"placeholder":{"type":"string","maxLength":200},"type":{"type":"string","enum":["text","email","tel","number","location","files"],"description":"Input type"},"required":{"type":"boolean"}},"required":["key","label"]},"maxItems":20,"description":"Dynamic fields to ask visitors before starting (name, client_id, …). Email is widgetSettings.email."},"email":{"type":"object","properties":{"required":{"type":"boolean"},"validation":{"type":"boolean"}},"description":"Require a visitor email; optional 6-digit email validation"},"phone":{"type":"object","properties":{"required":{"type":"boolean"},"validation":{"type":"boolean"}},"description":"Require a visitor mobile; optional SMS code (Greece/Cyprus only)"},"feedback":{"type":"object","properties":{"mode":{"type":"string","enum":["none","end"]},"collectComment":{"type":"boolean"}},"description":"Legacy, always 'none'. The end-of-chat rating (Good/Bad + optional comment) is set on the evaluate_conversation tool, not here: update_agent_settings with section 'tools' and changes { name: 'evaluate_conversation', enabled: true, channels: ['widget'], collectComment: true }."},"interface":{"type":"object","properties":{"startsCollapsed":{"type":"boolean"},"languageDropdown":{"type":"boolean"},"enableMuting":{"type":"boolean"},"markdownAllowedDomains":{"type":"array","items":{"type":"string"},"description":"Hostnames whose links in agent replies are clickable, e.g. [\"example.com\", \"hihello.com\"]. Exact host match (plus www. when allowWwwVariantForMarkdown). Empty = no link is clickable; other links show struck through."},"allowWwwVariantForMarkdown":{"type":"boolean","description":"Also accept the www. variant of each markdownAllowedDomains entry. Default true."},"allowHttpLinks":{"type":"boolean","description":"Also allow plain http:// (not https) links on markdownAllowedDomains. Does not make any link clickable by itself."},"acceptFiles":{"type":"boolean"},"acceptLocation":{"type":"boolean"},"pageContext":{"type":"boolean","description":"Tell the agent which page the visitor is on (address without query string, title, description, main heading), at start and whenever they move to another page. Default false."},"inactivityMinutes":{"type":"number","minimum":1,"maximum":30}}},"avatar":{"type":"object","properties":{"type":{"type":"string","enum":["orb","link","image"]},"firstColor":{"type":"string"},"secondColor":{"type":"string"},"linkUrl":{"type":"string"},"imageUrl":{"type":"string"},"imageFileId":{"type":"string"}}},"terms":{"type":"object","properties":{"required":{"type":"boolean"},"termsText":{"type":"string"}}},"styling":{"type":"object","properties":{"variant":{"type":"string","enum":["tiny","compact","full"]},"placement":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left"]},"base":{"type":"string"},"baseHover":{"type":"string"},"baseActive":{"type":"string"},"baseBorder":{"type":"string"},"baseSubtle":{"type":"string"},"basePrimary":{"type":"string"},"baseError":{"type":"string"},"accent":{"type":"string"},"accentHover":{"type":"string"},"accentActive":{"type":"string"},"accentBorder":{"type":"string"},"accentSubtle":{"type":"string"},"accentPrimary":{"type":"string"},"overlayPadding":{"type":"number"},"buttonRadius":{"type":"number"},"inputRadius":{"type":"number"},"bubbleRadius":{"type":"number"},"sheetRadius":{"type":"number"},"compactSheetRadius":{"type":"number"},"dropdownSheetRadius":{"type":"number"},"syntaxTheme":{"type":"string","enum":["auto","light","dark"]},"offsetX":{"type":"number","minimum":0,"maximum":400,"description":"Desktop gap from the left/right edge in px (default: overlayPadding)"},"offsetY":{"type":"number","minimum":0,"maximum":400,"description":"Desktop gap from the top/bottom edge in px (default: overlayPadding)"},"mobileOffsetX":{"type":"number","minimum":0,"maximum":400,"description":"Phones (≤767px): gap from the left/right edge in px (default: the desktop gap)"},"mobileOffsetY":{"type":"number","minimum":0,"maximum":400,"description":"Phones (≤767px): gap from the top/bottom edge in px, e.g. 90 to clear a fixed \"Book now\" bar (default: the desktop gap)"},"mobilePlacement":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left"],"description":"Phones (≤767px): another corner than placement (default: placement)"}}},"text":{"type":"object","properties":{"main_label":{"type":"string"},"start_call":{"type":"string"},"start_chat":{"type":"string"},"new_call":{"type":"string"},"end_call":{"type":"string"},"end_chat":{"type":"string"},"mute_microphone":{"type":"string"},"change_language":{"type":"string"},"collapse":{"type":"string"},"expand":{"type":"string"},"copied":{"type":"string"},"accept_terms":{"type":"string"},"dismiss_terms":{"type":"string"},"collect_title":{"type":"string"},"collect_continue":{"type":"string"},"listening_status":{"type":"string"},"speaking_status":{"type":"string"},"connecting_status":{"type":"string"},"chatting_status":{"type":"string"},"input_label":{"type":"string"},"input_placeholder":{"type":"string"},"input_placeholder_text_only":{"type":"string"},"input_placeholder_new_conversation":{"type":"string"},"user_ended_conversation":{"type":"string"},"agent_ended_conversation":{"type":"string"},"conversation_id":{"type":"string"},"error_occurred":{"type":"string"},"copy_id":{"type":"string"},"initiate_feedback":{"type":"string"},"request_follow_up_feedback":{"type":"string"},"thanks_for_feedback":{"type":"string"},"thanks_for_feedback_details":{"type":"string"},"follow_up_feedback_placeholder":{"type":"string"},"submit":{"type":"string"},"go_back":{"type":"string"},"send_message":{"type":"string"},"text_mode":{"type":"string"},"voice_mode":{"type":"string"},"switched_to_text_mode":{"type":"string"},"switched_to_voice_mode":{"type":"string"},"copy":{"type":"string"},"download":{"type":"string"},"wrap":{"type":"string"},"agent_working":{"type":"string"},"agent_done":{"type":"string"},"agent_error":{"type":"string"},"attach_file":{"type":"string"},"remove_file":{"type":"string"},"file_upload_error":{"type":"string"},"file_type_unsupported":{"type":"string"},"file_too_large":{"type":"string"},"file_limit_reached":{"type":"string"},"share_location":{"type":"string"},"locating":{"type":"string"},"location_ready":{"type":"string"},"location_denied":{"type":"string"},"files_hint":{"type":"string"},"uploading_files":{"type":"string"},"typing_indicator":{"type":"string"},"start_chat_hint":{"type":"string"},"start_chat_hint_files":{"type":"string"},"start_call_hint":{"type":"string"},"preview_agent":{"type":"string"},"preview_visitor":{"type":"string"},"collect_hint_chat":{"type":"string"},"collect_hint_call":{"type":"string"},"terms_title":{"type":"string"},"try_again":{"type":"string"},"show_transcript":{"type":"string"},"hide_transcript":{"type":"string"},"unmute_microphone":{"type":"string"},"microphone_muted":{"type":"string"},"conversation_ended":{"type":"string"},"call_ended":{"type":"string"},"teammate_joined":{"type":"string"},"teammate_joined_hint":{"type":"string"},"team_member":{"type":"string"},"duration":{"type":"string"},"messages":{"type":"string"},"feedback_good":{"type":"string"},"feedback_bad":{"type":"string"}}},"shareablePage":{"type":"object","properties":{"description":{"type":"string"},"requireTerms":{"type":"boolean"}}},"pageNavigation":{"type":"object","properties":{"enabled":{"type":"boolean","description":"The widget AI may open pages of this website for the visitor (text chat only). Only the page's own site and allowedDomains; the visitor sees \"Taking you to …\" and can cancel. Default false."},"listedPagesOnly":{"type":"boolean","description":"When pages are listed, the AI may open only those addresses (any query string). Default true. Ignored while the list is empty."},"instructions":{"type":"string","maxLength":1000,"description":"Extra instructions for the AI about opening pages"},"pages":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","maxLength":500,"description":"The page: a path on the site (\"/el/crete\") or an absolute https address on it"},"name":{"type":"string","maxLength":120,"description":"What the page is, e.g. \"Hotels in Crete\""},"description":{"type":"string","maxLength":150,"description":"Optional: when to open it, e.g. \"all our Cretan hotels, filter by town\""}},"required":["url","name"]},"maxItems":200,"description":"Pages the AI can open, with a name and an optional description (import them from the sitemap in the app)"}},"description":"The AI opens pages of this website for the visitor (text chat only)"}},"nullable":true,"description":"Embeddable website widget settings for the agent"},"password":{"type":"string","description":"Password for the agent"},"passwordTries":{"type":"number","minimum":0,"maximum":10,"description":"Number of password attempts allowed","example":3},"externalDial":{"type":"number","description":"External dial number for the agent","example":1234567890},"internalDial":{"type":"string","pattern":"^[0-9*#]{1,15}$","description":"Internal Voice Logica dial-plan extension. When a UserEndpoint or another internal source dials this extension, the inbound router lands the call on this agent. Unique within the agent's company. Leave empty if the agent is not reachable by internal dial.","example":"4002"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Unique identifier for the node"},"name":{"type":"string","description":"Display name of the node"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"description":"X,Y coordinates for node positioning"},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}},"description":"Input connections to this node"},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}},"description":"Output connections from this node"},"className":{"type":"string","description":"CSS class for styling the node"},"data":{"oneOf":[{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["conversation"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"},"systemPrompt":{"type":"string"},"enableModel":{"type":"boolean"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"enableTranscription":{"type":"boolean"},"transcriptionConfig":{"type":"object","properties":{"transcriptionProvider":{"type":"string","enum":["microsoft","google","fireworks","speechmatics","openai","assemblyai","deepgram","google_v1","google_v2","elevenlabs","voicelogica","soniox"],"description":"The transcription service provider to use for speech-to-text"},"silenceDurationMs":{"type":"number","minimum":500,"description":"Duration of silence in milliseconds before considering the user finished speaking"},"adaptationPhraseSetIds":{"type":"array","items":{"type":"string"},"description":"IDs of adaptation phrase sets to improve transcription accuracy"},"transcriptionVoiceMailPhrases":{"type":"array","items":{"type":"string"},"description":"Phrases that indicate the call has reached a voicemail system"},"waitForFullTranscription":{"type":"boolean","description":"Whether to wait for complete transcription before processing"},"enhanced":{"type":"boolean","description":"Whether to use enhanced transcription models for better accuracy"},"audioEnhancement":{"type":"boolean","description":"Whether to run ai-coustics speech enhancement (noise/background-speech suppression) on caller audio before transcription"},"audioEnhancementLevel":{"type":"number","minimum":0,"maximum":1,"description":"How aggressively the ai-coustics model suppresses noise (0.0-1.0). Uses the model default when omitted"},"endpointSensitivity":{"type":"number","minimum":-1,"maximum":1,"nullable":true,"description":"Soniox only: how aggressively endpoints are detected (-1.0 to 1.0). Higher = faster end-of-turn but more risk of cutting the caller off mid-sentence. Platform default 0.3"},"maxEndpointDelayMs":{"type":"number","minimum":500,"maximum":3000,"nullable":true,"description":"Soniox only: hard cap on how long Soniox may wait for an endpoint after speech ends (500-3000ms). Platform default 1500"},"endpointLatencyAdjustmentLevel":{"type":"integer","minimum":0,"maximum":3,"nullable":true,"description":"Soniox only: endpoint latency reduction level 0-3 (3 = most aggressive). Platform default 3"},"speculativeFinalize":{"type":"boolean","nullable":true,"description":"Soniox only: at the speculative quiet moment, request finalize() to flush pending tokens into the candidate before the endpoint. Platform default from admin settings"},"singleUtterance":{"type":"boolean","description":"Whether to process speech as single utterances"},"openAiModel":{"type":"string","enum":["whisper-1","gpt-transcribe","gpt-4o-transcribe","gpt-4o-mini-transcribe","gpt-4o-transcribe-diarize"],"description":"OpenAI model to use for transcription"},"prompt":{"type":"string","description":"Custom prompt used for transcription processing"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to focus on during transcription"},"initializationMethod":{"type":"string","enum":["on_call_start","on_human_join"],"description":"Method to initialize the transcription service"}},"required":["transcriptionProvider"],"description":"Configuration for speech-to-text transcription settings","example":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"waitForFullTranscription":false,"openAiModel":"whisper-1"}},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}},"skipTurnEnabled":{"type":"boolean"},"skipTurnPrompt":{"type":"string"},"workflowsIds":{"type":"array","items":{"type":"string"}},"knowledgeFileIds":{"type":"array","items":{"type":"string"}},"enableVoice":{"type":"boolean"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"canJumpToPreviousNode":{"type":"boolean"},"workflows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"triggers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCallStart","onCallConnect","onCallEnd","onCallTransfer","onMissedCall","onDTMFInput","onKeywordDetected","duringCall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"functionName":{"type":"string","pattern":"^[a-z0-9_]+$"},"keywords":{"type":"array","items":{"type":"string"}},"condition":{"type":"string"},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"generateMessageBeforeRunningWorkflow":{"type":"boolean"},"messageAiGenerated":{"type":"boolean"},"messagePrompt":{"type":"string"},"playWaitMusic":{"type":"boolean","description":"When true (default), play keyboard wait music while this duringCall workflow tool runs"},"useProtectedValues":{"type":"boolean","description":"onCallEnd only. When true, the non-AI steps of this workflow (API call, integrations, booking, email, SMS, sheets, conditions) get the REAL values the caller said ({{protected.afm}}, {{afm_1}}, …) when the agent protects sensitive data; AI steps (llmCompletion, aiResponse, managedAgent, googleSearch) always get placeholders. Every use is audited. Only members who may reveal sensitive data can turn it on."}},"example":{"keywords":["hello","world"],"condition":"call_started","parameters":[{"name":"call_id","value":"123"}],"playWaitMusic":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onEmailReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"emailFilters":{"type":"object","properties":{"from":{"type":"array","items":{"type":"string"}},"subject":{"type":"array","items":{"type":"string"}},"labels":{"type":"array","items":{"type":"string"}}}}},"example":{"emailFilters":{"from":["test@test.com"],"subject":["test"],"labels":["test"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onAPICall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"payloadSchema":{"type":"object","properties":{"type":{"type":"string","enum":["object"]},"properties":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","enum":["object","array","string","number","boolean","date","enum"]},"required":{"type":"boolean","default":false},"properties":{"type":"object","additionalProperties":{"type":"object","description":"Circular reference detected"}},"items":{"type":"object","description":"Circular reference detected"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"},"minimum":{"type":"number"},"maximum":{"type":"number"},"enum":{"type":"array","items":{"type":"string"}}},"required":["type"]}},"required":{"type":"array","items":{"type":"string"}}},"required":["type","properties"],"description":"Expected payload structure"}},"example":{"payloadSchema":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^TX-[0-9]{8}$"},"amount":{"type":"number","minimum":0},"currency":{"type":"string","enum":["USD","EUR","GBP"]}},"required":["transactionId","amount","currency"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onContactCreated","onCompanyCreated","onDealCreated","onTicketCreated","onPropertyChange"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","property"]},"property":{"type":"string","enum":["hs_lead_status","lifecyclestage","hubspot_owner_id","companyname","domain","dealstage","amount","closedate","closed_won_reason","closed_lost_reason","pipeline","hs_pipeline_stage","hs_due_date"]}},"example":{"resource":"contact","property":"hs_lead_status"}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onWooCommerce"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"getCustomerOrders":{"type":"boolean"},"getProductByName":{"type":"boolean"},"getProductByCode":{"type":"boolean"},"productCodeType":{"type":"string","enum":["id","sku","global_unique_id"]},"createOrder":{"type":"boolean"},"getOrderById":{"type":"boolean"},"notifyEmailsOnOrderCreation":{"type":"array","items":{"type":"string"}}},"example":{"getCustomerOrders":true,"getProductByName":true,"getProductByCode":true,"productCodeType":"id","createOrder":true,"getOrderById":true,"notifyEmailsOnOrderCreation":["test@test.com"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onYubotoPbxChannelHangup","onYubotoPbxChannelAnswer","onYubotoPbxChannelCreate"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"agentId":{"type":"string"},"allowedExtensions":{"type":"array","items":{"type":"string"}}},"example":{"username":"test","password":"test","agentId":"test","allowedExtensions":["123","456"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCampaignLeadStatusChanged"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign to watch. Omit to fire for every campaign of the company."},"statuses":{"type":"array","items":{"type":"string","enum":["successful","failed","reachedMaxRetries","askedToCallBackLater","askedToNeverCallAgain","cancelled"]},"description":"Lead statuses that fire the workflow. Omit or empty = every outcome status."},"stages":{"type":"array","items":{"type":"string"},"description":"Only fire when the lead is in one of these campaign stage names. Omit or empty = any stage."}},"example":{"campaignId":"66f1c0ffee0000000000abcd","statuses":["failed","reachedMaxRetries"],"stages":[]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onShopifyEvent"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["orders/create","orders/paid","orders/fulfilled","orders/partially_fulfilled","orders/cancelled","refunds/create","fulfillments/create","fulfillments/update"]},"minItems":1,"description":"Shopify events that start the workflow."},"financialStatuses":{"type":"array","items":{"type":"string","enum":["pending","authorized","partially_paid","paid","partially_refunded","refunded","voided"]},"description":"Only when the order payment status is one of these. Empty = any."},"fulfillmentStatuses":{"type":"array","items":{"type":"string","enum":["unfulfilled","partial","fulfilled","restocked"]},"description":"Only when the order fulfillment status is one of these. Empty = any."},"shipmentStatuses":{"type":"array","items":{"type":"string","enum":["label_printed","label_purchased","confirmed","in_transit","out_for_delivery","attempted_delivery","ready_for_pickup","delivered","failure"]},"description":"Shipment topics only: only when the carrier status is one of these. Empty = any."},"paymentGateways":{"type":"array","items":{"type":"string"},"description":"Only when a payment gateway name contains one of these (case-insensitive), e.g. \"Cash on Delivery\". Empty = any."},"tags":{"type":"array","items":{"type":"string"},"description":"Only when the order has at least one of these tags (case-insensitive). Empty = any."},"minTotal":{"type":"number","minimum":0,"description":"Only when the order total is at least this amount."},"maxTotal":{"type":"number","minimum":0,"description":"Only when the order total is at most this amount."}},"required":["topics"],"example":{"topics":["orders/create"],"financialStatuses":["pending"],"paymentGateways":["Cash on Delivery"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onLeadReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"string","enum":["tiktok","meta","google_ads","linkedin","webhook","form"]},"description":"Only leads from these sources start the workflow. Empty = any source, including ones added later."},"formIds":{"type":"array","items":{"type":"string","minLength":1},"description":"Only these forms: our lead form ids (from lead_forms_list_forms). A platform form id or a form name also matches, for older triggers. Empty = any."},"requirePhone":{"type":"boolean","description":"Skip a lead with no phone number."},"includeTestSubmissions":{"type":"boolean","description":"Also fire for test submissions. Off by default."}},"example":{"sources":["google_ads","form"],"requirePhone":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"triggerType"}}},"required":["id","name","position","outputs"],"example":{"id":1,"name":"Call Start Trigger","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"},{"node":"3","output":"default"}]},"className":"trigger-node","data":{"triggerType":"onCallStart","triggerConfig":{"enabled":true,"triggerType":"onCallEnd","description":"Trigger when a new call starts"},"transitions":[2,3]}}},"description":"Trigger node that starts the flow"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"nodeType":{"type":"string","enum":["emailConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["nodeType","nodeTitle","transitions","emailConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendSms"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["nodeType","nodeTitle","transitions","smsConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["apiCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["nodeType","nodeTitle","transitions","apiConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["codeExecution"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"codeConfig":{"type":"object","properties":{"code":{"type":"string"},"language":{"type":"string","enum":["javascript","python","java","cpp","php","ruby"]},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties for the code"}},"required":["code","language"],"example":{"code":"console.log(\"Hello, world!\");","language":"javascript","properties":[{"name":"name","type":"string"}]}}},"required":["nodeType","nodeTitle","transitions","codeConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleDocConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}}},"required":["nodeType","nodeTitle","transitions","googleDocConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createEvent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"eventConfig":{"type":"object","properties":{"calendarId":{"type":"string","description":"Google calendar id. Empty = the company's primary calendar."},"summary":{"type":"string","description":"Event title."},"startDateTime":{"type":"string","description":"Start, ISO 8601 (\"2026-08-12T15:00:00\") or \"YYYY-MM-DD HH:mm\"."},"endDateTime":{"type":"string","description":"End. Empty = start + durationMinutes."},"durationMinutes":{"type":"number","minimum":1,"maximum":1440,"description":"Used only when endDateTime is empty. Defaults to 30."},"description":{"type":"string"},"location":{"type":"string"},"attendees":{"type":"string","description":"Comma-separated emails."},"timeZone":{"type":"string","description":"IANA zone. Empty = the company timezone."},"isOnline":{"type":"boolean","description":"When true, Google adds a Meet link to the event."}},"required":["durationMinutes"],"example":{"summary":"Callback for {{contact_name}}","startDateTime":"{{callback_datetime}}","durationMinutes":30,"description":"Requested during call {{call_id}}","attendees":"sales@example.com","isOnline":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendPhoneCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}}},"required":["nodeType","nodeTitle","transitions","phoneCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["llmCompletion"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}}},"required":["nodeType","nodeTitle","transitions","llmCompletionConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheet"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]}},"required":["nodeType","nodeTitle","transitions","googleSheetConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}}},"required":["nodeType","nodeTitle","transitions","googleSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendViber"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}}},"required":["nodeType","nodeTitle","transitions","viberConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["switch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"switchConfig":{"type":"object","properties":{"cases":{"type":"array","items":{"type":"object","properties":{"block":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"transition":{"type":"string"},"transitionIndex":{"type":"number"}},"required":["block"]}}},"required":["cases"],"example":{"cases":[{"transition":"Schedule Appointment","transitionIndex":1,"block":{"operator":"and","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"schedule_appointment","fieldType":"string"}]}},{"transition":"Cancel Appointment","transitionIndex":0,"block":{"operator":"or","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"cancel_appointment","fieldType":"string"}]}}]}}},"required":["nodeType","nodeTitle","transitions","switchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["if"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"ifConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","ifConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["filter"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"filterConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","filterConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["loop"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"loopConfig":{"type":"object","properties":{"array":{"type":"string"}},"required":["array"],"example":{"array":"user_response"}}},"required":["nodeType","nodeTitle","transitions","loopConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["tableNode"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"tableConfig":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","maxLength":128},"type":{"type":"string","enum":["string","number","boolean"]}},"required":["key","label"]},"maxItems":50},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"maxItems":500},"filters":{"type":"array","items":{"type":"object","properties":{"column":{"type":"string","minLength":1},"op":{"type":"string","enum":["equals","notEquals","contains","gt","lt","gte","lte"]},"value":{"type":"string"}},"required":["column","op","value"]}},"mode":{"type":"string","enum":["producer","lookup"]},"keyColumn":{"type":"string"},"keyValue":{"type":"string"}},"required":["columns","rows"],"example":{"columns":[{"key":"name","label":"Name","type":"string"},{"key":"phone","label":"Phone","type":"string"}],"rows":[{"name":"Alice","phone":"+30 210 1234567"},{"name":"Bob","phone":"+30 210 7654321"}],"mode":"producer"}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hubspotContact","hubspotCompany","hubspotDeal","hubspotTicket","hubspotTask","hubspotNote","hubspotMeeting","hubspotEmail","hubspotCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hubspotConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"operation":{"type":"string","enum":["get","create","createOrUpdate","getOrCreate","delete","update","search","list","exists"]},"value":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"associations":{"type":"array","items":{"type":"object","properties":{"associationType":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["associationType","valueType","value"],"example":{"associationType":"contact","valueType":"id","value":"123"}}},"owner":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"contactData":{"type":"object","properties":{"properties":{"type":"object","properties":{"email":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"}},"required":[]}},"example":{"email":"test@test.com","firstname":"John","lastname":"Doe","phone":"+1234567890","company":"Test Corp","website":"https://test.com","lifecyclestage":"marketingqualifiedlead","jobtitle":"Manager","hs_additional_emails":["test2@test.com"]}},"companyData":{"type":"object","properties":{"properties":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"industry":{"type":"string"},"description":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"}},"required":[]}},"example":{"name":"Test Corp","domain":"test.com","industry":"Technology","description":"Test Description","city":"Test City","country":"Test Country","phone":"1234567890","address":"Test Address","owner":{"valueType":"email","value":"test@test.com"}}},"dealData":{"type":"object","properties":{"properties":{"type":"object","properties":{"dealname":{"type":"string"},"pipeline":{"type":"string"},"stage":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string"},"closeDate":{"type":"string"},"dealType":{"type":"string","enum":["new","existing"]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["pipeline","stage"]}},"example":{"name":"Test Deal","description":"Test Description","amount":"1000","stage":"Test Stage"}},"ticketData":{"type":"object","properties":{"properties":{"type":"object","properties":{"pipeline":{"type":"string"},"stage":{"type":"string"},"priority":{"type":"string","enum":["HIGH","MEDIUM","LOW"]},"subject":{"type":"string"},"content":{"type":"string"}},"required":["pipeline","stage","subject"]}},"example":{"pipeline":"Test Pipeline","stage":"Test Stage","priority":"HIGH","subject":"Test Subject","content":"Test Content"}},"taskData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string"},"taskType":{"type":"string"},"priority":{"type":"string"},"dueDate":{"type":"string"},"repeatType":{"type":"object","properties":{"enabled":{"type":"boolean"},"type":{"type":"string","enum":["hour","day","week","month","year"]},"value":{"type":"string"}},"example":{"enabled":true,"type":"day","value":"1"}},"reminderTime":{"oneOf":[{"type":"number"},{"type":"string"}]},"notes":{"type":"string"}},"required":["title","dueDate"]}},"example":{"associations":[{"associationType":"contact","valueType":"email","value":"contact@example.com"}],"properties":{"title":"Task Title","taskType":"TODO","priority":"MEDIUM","associations":[],"timestamp":"2021-01-01","dueDate":"2021-01-01","notes":"Task Notes","ownerEmail":"owner@example.com","status":"NOT_STARTED","reminderTime":1000}}},"noteData":{"type":"object","properties":{"properties":{"type":"object","properties":{"body":{"type":"string"}},"required":[]}}},"meetingData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title of the meeting"},"body":{"type":"string","description":"Meeting description"}}}},"required":["properties"],"example":{"properties":{"title":"Initial Project Discussion","body":"Meeting to discuss project requirements and timeline"}}},"emailData":{"type":"object","properties":{"properties":{"type":"object","properties":{"subject":{"type":"string","description":"Subject of the email"},"body":{"type":"string","description":"Email body content"}},"required":[]}},"example":{"properties":{"subject":"Project Update","body":"Here are the latest updates on the project progress."}}},"callData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title/subject of the call"},"body":{"type":"string","description":"Call description and notes"},"direction":{"type":"string","enum":["INBOUND","OUTBOUND"],"description":"Call direction"},"caller":{"type":"string","description":"Caller phone number"},"callee":{"type":"string","description":"Callee phone number"},"duration":{"type":"string","description":"Call duration in milliseconds"},"disposition":{"type":"string","enum":["9d9162e7-6cf3-4944-bf63-4dff82258764","f240bbac-87c9-4f6e-bf70-924b57d47db7","a4c4c377-d246-4b32-a13b-75a56a4cd0ff","b2cf5968-551e-4856-9783-52b3da59a7d0","73a0d17f-1163-4015-bdd5-ec830791da20","17b47fee-58de-441e-a44c-c6300d46f273"],"description":"Call disposition"},"recordingUrl":{"type":"string","description":"Call recording URL"}},"required":[]}},"example":{"properties":{"title":"Test Call","body":"Test Body"}}}},"required":["resource","operation"],"example":{"resource":"call","operation":"create","owner":{"valueType":"email","value":"test@test.com"},"properties":{"callData":{"properties":{"callTitle":"Test Call","callBody":"Test Body"}}}}}},"required":["nodeType","nodeTitle","transitions","hubspotConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheetSettings"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetSettingsConfig":{"type":"object","properties":{"googleSheetId":{"type":"string","minLength":1,"description":"The unique identifier of the Google Sheet"},"sheetName":{"type":"string","minLength":1,"description":"The name of the specific sheet within the Google Sheet"},"operation":{"type":"string","enum":["getRow","getRows","updateRow","appendRow","deleteRow","getData"],"description":"The operation to perform on the Google Sheet (getRow, getRows, updateRow, appendRow, deleteRow)"},"filter":{"type":"object","properties":{"filterType":{"type":"string","enum":["index","columnName"]},"column":{"type":"string"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"fieldType":{"type":"string","enum":["string","phone","email","number","boolean","date","time","enum"]},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["filterType","column","operator","fieldType"],"example":{"filterType":"index","column":"1","operator":"eq","fieldType":"string","fieldValue":"Chris"},"description":"Filter to apply for selecting rows, such as by index or column name"},"values":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"object","description":"Any valid JSON value"}},"required":["key","value"]},"description":"Key-value pairs for the row data"}},"required":["googleSheetId","sheetName","operation"],"example":{"googleSheetId":"123","sheetName":"Sheet1","operation":"getRow","filter":{"filterType":"index","column":"1","operator":"eq","fieldType":"number","fieldValue":"152"},"values":[{"key":"Email","value":"john.doe@example.com"},{"key":"Name","value":"John Doe"}]}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["aiResponse"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}}},"required":["nodeType","nodeTitle","transitions","aiResponseConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["transferCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["nodeType","nodeTitle","transitions","transferCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["afmSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"afmSearchConfig":{"type":"object","properties":{"afm":{"type":"string","description":"AFM of company"}},"required":["afm"],"example":{"afm":"8022188180"}}},"required":["nodeType","nodeTitle","transitions","afmSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["galaxyGetCustomer","galaxySearchItems","galaxyCheckStock","galaxyGetPrice","galaxyCalculateOrder","galaxyPlaceOrder","galaxyUpdateOrder","galaxyGetOrderStatus","galaxyGetTransactionHistory","galaxyGetCustomerBalance","galaxyGetCustomerAging","galaxyGetFinInfoPerDrugType","galaxyGetItemPurchases","galaxyGetCustomerKartelaLink","galaxyFindItemsByActiveIngredient","galaxyGetInvoicePdfLinks","galaxyGetNextRoute","galaxyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"galaxyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","checkStock","getPrice","calcLines","calculateOrder","placeOrder","updateOrder","getOrderStatus","getTransactionHistory","getCustomerBalance","getCustomerAging","getFinInfoPerDrugType","getItemPurchases","getCustomerKartelaLink","findItemsByActiveIngredient","getInvoicePdfLinks","getNextRoute","customRequest"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","custCode"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query (supports {{variables.x}})"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"checkStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"wrhsCode":{"type":"string","description":"Overrides the company default warehouse"}},"required":["itemCode"]},"getPrice":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"}},"required":["EntryType","Date","Quantity"]},"calcLines":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"},"WrhsCode":{"type":"string"},"AlterCode":{"type":"string"},"Barcode":{"type":"string"}},"required":["EntryType","Date","Quantity","WrhsCode"]},"placeOrder":{"type":"object","properties":{"entry":{"type":"object","properties":{"CompID":{"type":"string"},"CompCode":{"type":"string"},"CmpsID":{"type":"string"},"CmpsCode":{"type":"string"},"WrhsID":{"type":"string"},"WrhsCode":{"type":"string"},"CoetID":{"type":"string"},"CoetCode":{"type":"string"},"DnumID":{"type":"string"},"TransDate":{"type":"string"},"TradeDate":{"type":"string"},"CustID":{"type":"string"},"CustCode":{"type":"string"},"CussID":{"type":"string"},"CussCode":{"type":"string"},"PytmID":{"type":"string"},"PytmCode":{"type":"string"},"MeroID":{"type":"string"},"CollMeroID":{"type":"string"},"RuteID":{"type":"string"},"UserID":{"type":"string"},"SourceType":{"type":"integer"},"RefTradeCode":{"type":"string"},"VoucherCode":{"type":"string"},"Comments":{"type":"string"},"ExecutionDate":{"type":"string"},"Street":{"type":"string"},"StreetNumber":{"type":"string"},"PostalCode":{"type":"string"},"Phone":{"type":"string"},"RegnDescription":{"type":"string"},"PrefDescription":{"type":"string"},"CntrDescription":{"type":"string"},"AddressDescr":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"EntryStatus":{"type":"integer"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1},"ID":{"type":"string"},"FastNumber":{"type":"string"},"TotalValue":{"type":"number"},"NetValue":{"type":"number"},"VatValue":{"type":"number"},"Lines":{"type":"array","items":{"type":"object","properties":{"ItcpID":{"type":"string"},"ItemCode":{"type":"string"},"RequestAQty":{"oneOf":[{"type":"number"},{"type":"string"}]},"WrhsID":{"type":"string"},"Price":{"type":"number"},"Disc1Pcnt":{"type":"number"},"Disc1Val":{"type":"number"},"Disc2Pcnt":{"type":"number"},"Disc2Val":{"type":"number"},"Disc3Pcnt":{"type":"number"},"Disc3Val":{"type":"number"},"Comments":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"DiscountBehaviour":{"type":"integer","minimum":0,"maximum":2},"ZeroingDiscounts":{"type":"integer","minimum":0,"maximum":3,"description":"v103: suppress discounts"},"ApplyDscnID":{"type":"string"},"ApplyDrulID":{"type":"string"},"CicoID":{"type":"string","description":"v103: item-collection (bundle) ID"},"AQty":{"type":"number"},"DisposalAQty":{"type":"number"},"PickingQty":{"type":"number"},"NetValue":{"type":"number"},"GrossValue":{"type":"number"}},"required":["ItcpID","ItemCode","RequestAQty","WrhsID","Price","Disc1Pcnt","Disc1Val","Disc2Pcnt","Disc2Val","Disc3Pcnt","Disc3Val","Comments","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","DiscountBehaviour","ZeroingDiscounts","ApplyDscnID","ApplyDrulID","CicoID","AQty","DisposalAQty","PickingQty","NetValue","GrossValue"]},"nullable":true},"Taxes":{"type":"array","items":{"type":"object","properties":{"FiacID":{"type":"string"},"FiacCode":{"type":"string"},"TrnValue":{"oneOf":[{"type":"number"},{"type":"string"}]},"ExchVatValue":{"type":"number"}},"required":["FiacID","FiacCode","ExchVatValue"]},"nullable":true}},"required":["CompID","CompCode","CmpsID","CmpsCode","WrhsID","WrhsCode","CoetID","CoetCode","DnumID","TransDate","TradeDate","CustID","CustCode","CussID","CussCode","PytmID","PytmCode","MeroID","CollMeroID","RuteID","UserID","SourceType","RefTradeCode","VoucherCode","Comments","ExecutionDate","Street","StreetNumber","PostalCode","Phone","RegnDescription","PrefDescription","CntrDescription","AddressDescr","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","EntryStatus","LockTransaction","ID","FastNumber","TotalValue","NetValue","VatValue","Lines","Taxes"]},"previewFirst":{"type":"boolean","default":false}},"required":["entry"]},"updateOrder":{"type":"object","properties":{"ID":{"type":"string"},"EntryStatus":{"type":"integer"},"Comments":{"type":"string"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1}},"required":["ID"]},"getOrderStatus":{"type":"object","properties":{"id":{"type":"string","description":"Optional specific transaction ID — omit to list all"},"revNum":{"type":"integer","minimum":0,"default":0},"custCode":{"type":"string","description":"List the orders of this customer instead (GetTransactions by CustCode, per branch). Template strings supported."},"dateFrom":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."}}},"getTransactionHistory":{"type":"object","properties":{"CustCode":{"type":"string"},"DateFrom":{"type":"string"},"DateTo":{"type":"string"}},"required":["CustCode","DateFrom","DateTo"]},"getCustomerBalance":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."}},"required":["custCode"]},"getCustomerAging":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"getFinInfoPerDrugType":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"fromDate":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."}},"required":["custCode"]},"getItemPurchases":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"itemCode":{"type":"string","minLength":1,"description":"Galaxy item code (from item search). Template strings supported."},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"compCode":{"type":"string","description":"Branch/company code. Defaults to the customer's branch."}},"required":["custCode","itemCode"]},"getCustomerKartelaLink":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"findItemsByActiveIngredient":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Active ingredient name or AtloID. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["query"]},"getInvoicePdfLinks":{"type":"object","properties":{"custCode":{"type":"string"},"custTin":{"type":"string"},"cussCode":{"type":"string"},"id":{"type":"string"},"dateFrom":{"type":"string"},"dateTo":{"type":"string"}}},"getNextRoute":{"type":"object","properties":{"custCode":{"type":"string","minLength":1}},"required":["custCode"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"POST"},"path":{"type":"string","minLength":1,"description":"Path added after the Galaxy ERP base URL, e.g. /api/crossdomain/advancedcustomviews/<guid>. Supports {{variables}}."},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Key/value properties sent as the query string. Values support {{variables}}."},"body":{"type":"string","description":"Optional raw JSON request body (supports {{variables}}). Example for an advanced custom view: {\"filters\":[{\"CompCode\":\"01\",\"CustCode\":\"{{node_1.custCode}}\"}],\"MasterDetailTree\":false}"},"apiResponse":{"type":"string","description":"Editor-only: JSON schema of the expected response (same as the apiCall node's \"API Response\"). Powers the variable picker so downstream nodes can reference individual response fields; at runtime the real response is flattened into node_N.* regardless."}},"required":["path"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["salesforceGetContact","salesforceCreateLead","salesforceLogCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"salesforceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","createLead","logCall"]},"getContact":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{variables.x}} / {{call.phoneNumber}}"},"objectType":{"type":"string","enum":["Contact","Lead"],"description":"For by=id: which SObject the Id belongs to (default Contact)."}},"required":["by","value"]},"createLead":{"type":"object","properties":{"lastName":{"type":"string","minLength":1,"description":"Lead last name — required by Salesforce. Supports templates."},"company":{"type":"string","minLength":1,"description":"Lead company — required by Salesforce. Supports templates."},"firstName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"description":{"type":"string","description":"Short summary of the request / call reason."}},"required":["lastName","company"]},"logCall":{"type":"object","properties":{"whoId":{"type":"string","minLength":1,"description":"Contact or Lead Id the call is logged against. Supports templates."},"subject":{"type":"string","minLength":1,"description":"Task subject, e.g. \"Inbound call — order status\"."},"description":{"type":"string","description":"Call notes."}},"required":["whoId","subject"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"by":"phone","value":"{{call.phoneNumber}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["guestyFindOwner","guestyFindGuest","guestyIdentifyCaller","guestyGetListings","guestyGetListing","guestyGetReservations","guestyGetReservation","guestyGetHouseRules","guestyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"guestyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["findOwner","findGuest","identifyCaller","getListings","getListing","getReservations","getReservation","getHouseRules","customRequest"]},"findOwner":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email"],"default":"phone","description":"Which field to search the owner by"},"value":{"type":"string","minLength":1,"description":"Search term (template, e.g. {{call.phone_number}})"}},"required":["value"]},"findGuest":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Guest phone to look up via their reservations (template)"}},"required":["value"]},"identifyCaller":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Caller phone (template) — matched against owners AND guests"}},"required":["value"]},"getListings":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated listing ids (template) — e.g. {{node_X.owner.listings}}"},"ownerId":{"type":"string","description":"Resolve the owner's listing ids first, then fetch them (template)"},"q":{"type":"string","description":"Free-text search across title/nickname/address (template)"}}},"getListing":{"type":"object","properties":{"id":{"type":"string","description":"Listing _id (template) — returns the full property"},"nickname":{"type":"string","description":"Listing nickname (template) — used when no id is known"},"fields":{"type":"string","description":"Space-separated field selection; omit for the full listing"}}},"getReservations":{"type":"object","properties":{"listingIds":{"type":"string","description":"Comma-separated listing ids to scope to (template)"},"listingNickname":{"type":"string","description":"Scope to a single listing by its nickname (template)"},"ownerId":{"type":"string","description":"Scope to all of an owner's listings (resolved to ids) (template)"},"guestPhone":{"type":"string","description":"Scope to a guest's reservations by their phone (template)"},"dateFrom":{"type":"string","description":"Window start: ISO date, `today`, or relative like `-7d` (template)"},"dateTo":{"type":"string","description":"Window end: ISO date, `today`, or relative like `+7d` (template)"},"windowDays":{"type":"integer","minimum":0,"description":"When dateFrom/dateTo are omitted, use today∓windowDays as the overlap window"},"status":{"type":"string","description":"Filter by reservation status (template)"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Reservation _id / confirmation id (template)"}},"required":["id"]},"getHouseRules":{"type":"object","properties":{"listingIds":{"type":"string","minLength":1,"description":"Comma-separated listing ids (template) — house rules are keyed by listing/unit-type"}},"required":["listingIds"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"GET"},"path":{"type":"string","minLength":1,"description":"Path after the base URL, e.g. /v1/reservations (template)"},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Query params (templates)"},"body":{"type":"string","description":"Raw JSON body (template) — ignored for GET"}},"required":["path"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"value":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["helpdeskCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"helpdeskConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createTicket"]},"createTicket":{"type":"object","properties":{"subject":{"type":"string","description":"Ticket subject (template, e.g. \"Call from {{call.phone_number}}\")"},"description":{"type":"string","description":"Ticket body (template, e.g. {{call.summary}})"},"requesterPhone":{"type":"string","description":"Requester phone (template, defaults to {{call.phone_number}})"},"requesterEmail":{"type":"string","description":"Requester email (template)"},"requesterName":{"type":"string","description":"Requester display name (template)"},"priority":{"type":"string","enum":["low","medium","high","urgent"],"description":"Ticket priority"}}}},"required":["operation"],"example":{"operation":"createTicket","createTicket":{"subject":"Call from {{call.phone_number}}","description":"{{call.summary}}","requesterPhone":"{{call.phone_number}}","priority":"medium"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["courierTrackVoucher"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"courierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["trackVoucher"]},"trackVoucher":{"type":"object","properties":{"courier":{"type":"string","description":"Courier to query (acs_courier, speedex, geniki_taxydromiki, elta_courier, boxnow, skroutz_lastmile, taxydema). Omit to try every connected courier."},"voucher":{"type":"string","description":"Voucher/tracking number (template, e.g. {{node_5.order.meta.voucher}})"}}}},"required":["operation"],"example":{"operation":"trackVoucher","trackVoucher":{"voucher":"{{node_5.order.meta.voucher}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["vivaCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"vivaConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createPaymentLink"]},"createPaymentLink":{"type":"object","properties":{"amount":{"type":"string","description":"Amount in EUR as a decimal (template, e.g. \"25.50\" or {{node_3.order.total}})"},"description":{"type":"string","description":"Shown to the customer on the checkout page (template)"},"customerName":{"type":"string","description":"Customer full name (template)"},"customerPhone":{"type":"string","description":"Customer phone (template, e.g. {{call.phone_number}})"},"language":{"type":"string","enum":["el","en"],"description":"Checkout page language"}}}},"required":["operation"],"example":{"operation":"createPaymentLink","createPaymentLink":{"amount":"25.50","description":"Πληρωμή παραγγελίας","customerPhone":"{{call.phone_number}}","language":"el"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createTrackedPage"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"trackedPageConfig":{"type":"object","properties":{"html":{"type":"string","description":"Page HTML (template, e.g. {{node_2.html}} from an llmCompletion node). Scripts and forms are stripped; styles are kept."},"title":{"type":"string","description":"Browser tab title (template)"},"expiresInDays":{"type":"integer","minimum":1,"maximum":365,"description":"How long the link stays open (default 30 days)"}},"required":["html"],"example":{"html":"{{node_2.html}}","title":"Η σύνοψη της κλήσης σας","expiresInDays":30}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["shopifyGetCustomer","shopifyGetOrdersByCustomer","shopifyGetOrderById","shopifySearchProducts","shopifyGetProductById","shopifySyncProductsToSkroutz"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"shopifyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","syncProductsToSkroutz"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search — mapped to vendor / product_type / handle."},"vendor":{"type":"string"},"productType":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify product id."}},"required":["productId"]},"syncProductsToSkroutz":{"type":"object","properties":{"maxRecords":{"type":"integer","minimum":0}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["soft1GetCustomer","soft1SearchItems","soft1GetCustomerBalance","soft1GetCustomerAging","soft1GetCustomerHistory","soft1CreateSalesDoc","soft1TransmitEInvoice"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"soft1Config":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","getCustomerHistory","createSalesDoc","transmitEInvoice"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerAging":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerHistory":{"type":"object","properties":{"trdr":{"type":"string"},"tin":{"type":"string"},"code":{"type":"string"},"from":{"type":"string","description":"ISO date YYYY-MM-DD"},"to":{"type":"string","description":"ISO date YYYY-MM-DD"},"limit":{"type":"integer","minimum":1,"maximum":500,"default":50}}},"createSalesDoc":{"type":"object","properties":{"trdr":{"oneOf":[{"type":"string"},{"type":"number"}]},"custCode":{"type":"string"},"series":{"oneOf":[{"type":"string"},{"type":"number"}]},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"mtrl":{"oneOf":[{"type":"string"},{"type":"number"}]},"code":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"transmit":{"type":"boolean"}},"required":["lines"]},"transmitEInvoice":{"type":"object","properties":{"key":{"type":"string","minLength":1},"template":{"type":"string","minLength":1}},"required":["key"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["exelixisSmartGetContact","exelixisSmartListCompanyContacts","exelixisSmartListSupportMembers","exelixisSmartCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"exelixisSmartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","listCompanyContacts","listSupportMembers","createTicket"]},"getContact":{"type":"object","properties":{"phone":{"type":"string","description":"Template — e.g. {{call.phone_number}}"},"afm":{"type":"string","description":"Template — e.g. {{dynamicVariables.afm}}"}}},"listCompanyContacts":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) to list contacts for"}},"required":["companyId"]},"listSupportMembers":{"type":"object","properties":{}},"createTicket":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) — required by the ERP"},"contactId":{"type":"string"},"supportMemberId":{"type":"string"},"title":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"callUrl":{"type":"string","description":"Template — defaults to {{call.call_url}}"}},"required":["companyId","title","summary"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["pylonGetCustomer","pylonSearchItems","pylonGetCustomerBalance","pylonCreateSalesOrder","pylonGetData","pylonPostData"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"pylonConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","createSalesOrder","getData","postData"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"createSalesOrder":{"type":"object","properties":{"customerTin":{"type":"string","description":"Customer TIN — supports {{dynamicVariables.x}}. Optional when rawData supplies the customer."},"seriesCode":{"type":"string"},"customerBranch":{"type":"string"},"paymentMethod":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0}},"required":["itemCode","quantity"]}},"rawData":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Advanced: a JSON object merged verbatim into the Pylon order payload, overriding the structured fields above. Use native Pylon column names, e.g. {\"Lines\":[{\"CenlItemCode\":\"GG11\",\"CenlAMeasurementQty\":2}],\"CsdcRemarks\":\"…\"}. String values support {{dynamicVariables.x}} templates. Bypasses the structured-field validation, so it must match the target Script exactly."}}},"getData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined getjsondata Script code, e.g. itemsVoiceAgent or custInfoVoice"},"extras":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Param name, e.g. @ItemCode or @phone"},"value":{"type":"string","description":"Param value — supports {{dynamicVariables.x}}"}},"required":["name","value"]},"description":"Script parameters; omit or [] for none"},"packageSize":{"type":"integer","minimum":1,"maximum":5000,"description":"Page size (default 200)"},"allPages":{"type":"boolean","description":"Walk every page until exhausted; otherwise just page 1"}},"required":["entitycode"]},"postData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined postdata Script code, e.g. orderVoice or SalesOrders"},"data":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"JSON object serialized into the postdata `data` field. Use the shape the target Script expects. String values support {{dynamicVariables.x}} templates."}},"required":["entitycode","data"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["entersoftGetCustomer","entersoftSearchItems","entersoftGetCustomerBalance","entersoftGetCustomerAging","entersoftRunPublicQuery","entersoftRunEbsService","entersoftCreateSalesDoc"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"entersoftOneConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","runPublicQuery","runEbsService","createSalesDoc"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"code":{"type":"string","minLength":1,"description":"Customer code — supports templates"}},"required":["code"]},"getCustomerAging":{"type":"object","properties":{"code":{"type":"string","minLength":1}},"required":["code"]},"runPublicQuery":{"type":"object","properties":{"publicQueryGid":{"type":"string"},"groupId":{"type":"string"},"filterId":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Param object — values may be templates"}}},"runEbsService":{"type":"object","properties":{"serviceName":{"type":"string","minLength":1},"parameters":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}}},"required":["serviceName"]},"createSalesDoc":{"type":"object","properties":{"customerGid":{"type":"string"},"customerCode":{"type":"string"},"series":{"type":"string"},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemGid":{"type":"string"},"itemCode":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"ebsServiceName":{"type":"string"}},"required":["lines"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["wooGetCustomer","wooGetOrdersByCustomer","wooGetOrderById","wooSearchProducts","wooGetProductById","wooCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"wooCommerceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric WooCommerce customer id"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string"},"sku":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric customer id (0 for guest)"},"lineItems":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"integer","minimum":0},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","lineItems"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["opencartGetCustomer","opencartGetOrdersByCustomer","opencartGetOrderById","opencartSearchProducts","opencartGetProductById","opencartCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"opencartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"manufacturer":{"type":"string","description":"Exact manufacturer filter. Optional."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Existing OpenCart customer id (for logged-in orders)."},"firstname":{"type":"string"},"lastname":{"type":"string"},"email":{"type":"string"},"telephone":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1},"comment":{"type":"string"}},"required":["products"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["magentoGetCustomer","magentoGetOrdersByCustomer","magentoGetOrderById","magentoSearchProducts","magentoGetProductById","magentoListShippingOptions"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"magentoConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","listShippingOptions"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento order increment id (receipt number) or numeric entity id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento product id."}},"required":["productId"]},"listShippingOptions":{"type":"object","properties":{"countryId":{"type":"string","description":"Destination country as ISO-2 code, e.g. \"GR\". Defaults to \"GR\"."},"postcode":{"type":"string","description":"Destination postcode. Supports templates."},"region":{"type":"string","description":"Optional region/state name."},"sku":{"type":"string","description":"Optional product SKU to price against."}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["megasoftGetCustomer","megasoftSearchProducts","megasoftGetProductByCode","megasoftListShippingMethods","megasoftListPaymentMethods","megasoftGetCustomerBalance","megasoftGetCustomerOrders","megasoftGetOrderStatus","megasoftGetCustomerPurchases","megasoftListOffers","megasoftGetItemPrice","megasoftGetProductStock","megasoftCreateOrder","megasoftCancelOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"megasoftConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchProducts","getProductByCode","listShippingMethods","listPaymentMethods","getCustomerBalance","getCustomerOrders","getOrderStatus","getCustomerPurchases","listOffers","getItemPrice","getProductStock","createOrder","cancelOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getProductByCode":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"getCustomerBalance":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."}},"required":["customerCode"]},"getCustomerOrders":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"orderNo":{"type":"string","description":"Optional order number filter. Supports templates."}},"required":["customerCode"]},"getOrderStatus":{"type":"object","properties":{"orderNo":{"type":"string","description":"Optional order number. Supports templates."},"date":{"type":"string","description":"Optional modified-since date (yyyy-MM-dd)."}}},"getCustomerPurchases":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"itemCode":{"type":"string"}},"required":["customerCode"]},"listOffers":{"type":"object","properties":{"offerId":{"type":"string"},"activeOnly":{"type":"boolean","default":true},"dateFrom":{"type":"string"}}},"getItemPrice":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["customerCode","itemCode"]},"getProductStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"createOrder":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."},"qty":{"oneOf":[{"type":"number","minimum":0},{"type":"string","minLength":1}],"description":"Quantity. Number or template string."},"comments":{"type":"string"}},"required":["customerCode","itemCode","qty"]},"cancelOrder":{"type":"object","properties":{"orderNo":{"type":"string","minLength":1,"description":"Megasoft order number. Supports templates."},"seiraPar":{"type":"string","minLength":1,"description":"Order series / parastatiko code. Supports templates."}},"required":["orderNo","seiraPar"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["gonnaOrderSearchCatalog","gonnaOrderCheckDeliveryAddress","gonnaOrderGetCustomer","gonnaOrderGetCustomerOrders","gonnaOrderGetOrderStatus","gonnaOrderCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"gonnaOrderConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["searchCatalog","checkDeliveryAddress","getCustomer","getCustomerOrders","getOrderStatus","createPaymentLink"]},"searchCatalog":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text menu search. Supports {{dynamicVariables.x}}."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"checkDeliveryAddress":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Delivery address. Supports templates."}},"required":["address"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","name"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getCustomerOrders":{"type":"object","properties":{"customerId":{"type":"string","minLength":1,"description":"Customer id. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":10,"default":5}},"required":["customerId"]},"getOrderStatus":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid. Supports templates."}},"required":["orderUuid"]},"createPaymentLink":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid to charge for. Supports templates."},"amount":{"type":"string","description":"Amount override. Leave blank to use the order total."}},"required":["orderUuid"]}},"required":["operation"],"example":{"operation":"checkDeliveryAddress","checkDeliveryAddress":{"address":"{{dynamicVariables.callerAddress}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["webhotelierCheckAvailability","webhotelierSearchBookings","webhotelierGetReservation","webhotelierGetAvailabilityCalendar","webhotelierGetRooms","webhotelierGetRates"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"webhotelierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["checkAvailability","searchBookings","getReservation","getAvailabilityCalendar","getRooms","getRates"]},"checkAvailability":{"type":"object","properties":{"checkin":{"type":"string","minLength":1,"description":"Check-in date YYYY-MM-DD. Supports templates."},"checkout":{"type":"string","minLength":1,"description":"Check-out date YYYY-MM-DD. Supports templates."},"adults":{"type":"string","minLength":1,"description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"rooms":{"type":"string","description":"Number of rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["checkin","checkout","adults"]},"searchBookings":{"type":"object","properties":{"lastName":{"type":"string","description":"Guest last name. Supports templates. Provide this or email."},"email":{"type":"string","description":"Guest email. Supports templates. Provide this or lastName."},"checkinFrom":{"type":"string","description":"Earliest check-in YYYY-MM-DD. Supports templates."},"checkinTo":{"type":"string","description":"Latest check-in YYYY-MM-DD. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getReservation":{"type":"object","properties":{"resId":{"type":"string","minLength":1,"description":"Reservation id. Supports templates."}},"required":["resId"]},"getAvailabilityCalendar":{"type":"object","properties":{"fromd":{"type":"string","minLength":1,"description":"Calendar start / check-in date YYYY-MM-DD. Supports templates."},"tod":{"type":"string","description":"Calendar end / check-out date YYYY-MM-DD (max 3 months from fromd). Supports templates."},"adults":{"type":"string","description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"room":{"type":"string","description":"Room-type code filter. Supports templates."},"rate":{"type":"string","description":"Rate id filter. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["fromd"]},"getRooms":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code for a single room. Empty = list all rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getRates":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code to scope rates. Supports templates."},"rateId":{"type":"string","description":"Rate id for a single rate (requires roomCode). Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}}},"required":["operation"],"example":{"operation":"getReservation","getReservation":{"resId":"{{dynamicVariables.resId}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hosthubIdentifyCaller","hosthubSearchReservations","hosthubGetReservation","hosthubListRentals","hosthubCheckAvailability"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hosthubConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["identifyCaller","searchReservations","getReservation","listRentals","checkAvailability"]},"identifyCaller":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"description":"Caller phone number. Supports templates (e.g. {{call.phone_number}})."}},"required":["phone"]},"searchReservations":{"type":"object","properties":{"name":{"type":"string","description":"Guest name. Supports templates. Provide one of name / phone / confirmationCode."},"phone":{"type":"string","description":"Guest phone. Supports templates."},"confirmationCode":{"type":"string","description":"Channel confirmation code. Supports templates."}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Hosthub reservation (calendar-event) id. Supports templates."}},"required":["id"]},"getRental":{"type":"object","properties":{"rentalId":{"type":"string","description":"Rental id for a single rental. Empty = list all rentals. Supports templates."}}},"checkAvailability":{"type":"object","properties":{"rentalId":{"type":"string","minLength":1,"description":"Rental id to check. Supports templates."},"from":{"type":"string","minLength":1,"description":"Start date YYYY-MM-DD. Supports templates."},"to":{"type":"string","minLength":1,"description":"End date YYYY-MM-DD. Supports templates."}},"required":["rentalId","from","to"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["prestashopGetCustomer","prestashopGetOrdersByCustomer","prestashopGetOrderById","prestashopSearchProducts","prestashopGetProductById","prestashopCreateOrder","prestashopUpdateOrderStatus"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"prestashopConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder","updateOrderStatus"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"reference":{"type":"string","description":"Exact reference (SKU) filter."},"ean13":{"type":"string","description":"Exact EAN-13 barcode filter."},"mpn":{"type":"string","description":"Exact MPN filter."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id."},"addressDeliveryId":{"oneOf":[{"type":"number"},{"type":"string"}]},"addressInvoiceId":{"oneOf":[{"type":"number"},{"type":"string"}]},"cartId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Pre-existing cart id (PrestaShop requires it)."},"currencyId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"langId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"carrierId":{"oneOf":[{"type":"number"},{"type":"string"}]},"payment":{"type":"string","minLength":1,"description":"Human-readable payment label."},"module":{"type":"string","description":"Payment module code, e.g. \"ps_checkpayment\"."},"totalPaid":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProducts":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProductsWithTax":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalShipping":{"oneOf":[{"type":"number"},{"type":"string"}]},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"product_attribute_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0},"product_name":{"type":"string"},"unit_price":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","addressDeliveryId","addressInvoiceId","cartId","carrierId","payment","totalPaid","totalProducts","totalProductsWithTax","products"]},"updateOrderStatus":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id to update."},"orderStateId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Target order_state id (numeric, store-specific)."}},"required":["orderId","orderStateId"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["airtableGetRecord","airtableSearchRecords","airtableCreateRecord","airtableUpdateRecord"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"airtableConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getRecord","searchRecords","createRecord","updateRecord"]},"getRecord":{"type":"object","properties":{"by":{"type":"string","enum":["phone","id"],"description":"Look up by mapped phone field, or by Airtable record id"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchRecords":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"createRecord":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["fields"]},"updateRecord":{"type":"object","properties":{"recordId":{"type":"string","minLength":1,"description":"Airtable record id (rec...) — supports templates"},"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["recordId","fields"]}},"required":["operation"],"example":{"operation":"getRecord","getRecord":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["jiraGetIssue","jiraSearchIssues","jiraCreateIssue","jiraUpdateIssue","jiraAddComment","jiraTransitionIssue"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"jiraConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getIssue","searchIssues","createIssue","updateIssue","addComment","transitionIssue"]},"getIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key, e.g. SUP-1234 — supports {{dynamicVariables.x}}"}},"required":["issueKey"]},"searchIssues":{"type":"object","properties":{"text":{"type":"string","description":"Free-text query — supports templates"},"jql":{"type":"string","description":"Raw JQL — overrides text when present"},"projectKey":{"type":"string","description":"Scope the search to a project key"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"createIssue":{"type":"object","properties":{"summary":{"type":"string","minLength":1,"description":"Issue summary — supports templates"},"description":{"type":"string","description":"Issue description — supports templates"},"projectKey":{"type":"string","description":"Project key — falls back to the connection default"},"issueType":{"type":"string","description":"Issue type name — falls back to the connection default"},"priority":{"type":"string","description":"Priority name (e.g. High)"},"assignee":{"type":"string","description":"Assign to a person by email or name — supports templates"}},"required":["summary"]},"updateIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key to update — supports templates"},"summary":{"type":"string","description":"New summary — supports templates"},"description":{"type":"string","description":"New description — supports templates"},"priority":{"type":"string","description":"New priority name"}},"required":["issueKey"]},"addComment":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"body":{"type":"string","minLength":1,"description":"Comment body — supports templates"}},"required":["issueKey","body"]},"transitionIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"status":{"type":"string","minLength":1,"description":"Target status name, e.g. \"In Progress\" — supports templates"}},"required":["issueKey","status"]}},"required":["operation"],"example":{"operation":"createIssue","createIssue":{"summary":"Callback requested by {{callerPhone}}","description":"{{transcript}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleChatSendMessage","googleChatSendToDefaultSpace","googleChatSendViaWebhook"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleChatConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["sendMessage","sendToDefaultSpace","sendViaWebhook"]},"sendMessage":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque Google Chat space resource (spaces/AAQA...) — set via UI picker"},"spaceDisplayName":{"type":"string","description":"Cached display name for the node summary"},"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string","description":"Optional thread key for in-thread replies"}},"required":["spaceName","body"]},"sendToDefaultSpace":{"type":"object","properties":{"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string"}},"required":["body"]},"sendViaWebhook":{"type":"object","properties":{"webhookId":{"type":"string","minLength":1,"description":"GoogleChatWebhook document id — set via UI picker"},"webhookLabel":{"type":"string","description":"Cached webhook label for the node summary"},"body":{"type":"string","minLength":1},"threadKey":{"type":"string"}},"required":["webhookId","body"]}},"required":["operation"],"example":{"operation":"sendToDefaultSpace","sendToDefaultSpace":{"body":"New lead from {{caller_name}} ({{caller_phone}})"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["searchContact"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"searchContactConfig":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Phone number to look up (template). Most reliable identifier: matched on the stored phone index, so +30/30/national forms all hit the same contact."},"email":{"type":"string","description":"Email address to look up (template). Matched case-insensitively on the main email and every listed email."},"name":{"type":"string","description":"Name to look up (template). Fuzzy: case- and accent-insensitive, Greek/Latin spellings and common inflections. May match several contacts."}},"example":{"phoneNumber":"{{call.phone_number}}","email":"","name":""}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["managedAgent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"managedAgentConfig":{"type":"object","properties":{"prompt":{"type":"string","maxLength":10000,"default":"","description":"System prompt rendered with {{transcript}}, {{call_summary}}, {{contact}}, {{extracted_entities}}"},"builtInTools":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}},"default":[],"description":"Full AgentTool configurations the LLM may call."},"apiTools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_]{1,40}$","description":"Tool name shown to the LLM; must be unique within the node"},"description":{"type":"string","minLength":10,"maxLength":500,"description":"How the LLM decides when to call this tool"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"default":[],"description":"Input schema for the LLM"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"description":"HTTP request configuration (URL, headers, method, body) — reused from function-call api runner","example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["name","description","apiConfig"]},"default":[],"description":"Inline API tools with name + description + HTTP config"},"mcpServers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the MCP server"},"description":{"type":"string","description":"Optional description"},"serverUrl":{"type":"string","format":"uri","description":"MCP server endpoint"},"transport":{"type":"string","enum":["http","sse"],"description":"Transport: http or sse"},"authType":{"type":"string","enum":["none","bearer","oauth"],"description":"Authentication mode"},"authValue":{"type":"string","description":"Token / credential value — encrypted at rest"},"enabledTools":{"type":"array","items":{"type":"string"},"description":"Whitelist of tools exposed to the LLM. Omit to expose every tool the server publishes."}},"required":["name","serverUrl","transport","authType"]},"default":[],"description":"MCP servers whose tools the LLM may call"},"models":{"type":"object","properties":{"primary":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"description":"Model used by the loop by default","example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"escalation":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Optional fallback model rerun on the whole session if primary failed/stuck. Must use the same provider as primary."}},"required":["primary"]},"limits":{"type":"object","properties":{"maxIterations":{"type":"integer","minimum":0,"maximum":50,"default":15,"description":"Hard cap on LLM turns per run. Set to 0 for no limit (cost cap still enforced)."},"maxCostUsd":{"type":"number","minimum":0,"maximum":0.5,"default":0.5,"description":"Hard cap on total cost (USD) per run. Range: 0 to 0.5."},"stuckDetection":{"type":"boolean","default":true,"description":"Bail if the model calls the same tool with the same args twice in a row"}},"default":{}},"routing":{"type":"object","properties":{"onSuccess":{"type":"string","description":"Next workflow node ID when the run completes successfully"},"onPartial":{"type":"string","description":"Next workflow node ID when the run completed but with partial results"},"onFailure":{"type":"string","description":"Next workflow node ID when the run failed"}},"default":{}},"dryRun":{"type":"boolean","default":false},"enableSubagents":{"type":"boolean","default":false},"maxConcurrentSubagents":{"type":"integer","minimum":1,"maximum":10,"default":5},"maxSubagentIterations":{"type":"integer","minimum":1,"maximum":20,"default":8},"knowledgeFileIds":{"type":"array","items":{"type":"string"},"default":[],"description":"Knowledge files the agent can search via search_knowledge. Empty list = no knowledge tool offered."},"knowledgeRerank":{"type":"object","properties":{"enabled":{"type":"boolean","default":true,"description":"Run the rerank pass. When off, top-K is taken directly from the raw retrieval score (faster but noisier context for the main agent)."},"model":{"type":"string","default":"gpt-5.6-luna","description":"Model used for the rerank pass. Should be small/cheap — its job is ranking, not reasoning. Same provider as the node's primary model."},"candidatesK":{"type":"integer","minimum":5,"maximum":200,"default":50,"description":"How many candidates to retrieve from Pinecone before reranking. Higher = better recall, more rerank tokens. 50 is the sweet spot."},"returnK":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"How many chunks to return after reranking. The main agent sees only these."}},"default":{}},"enableScraping":{"type":"boolean","default":false,"description":"When true, agent gets scrape_website(url) tool that fetches+summarises a page via ScraperService."},"workflowToolIds":{"type":"array","items":{"type":"string"},"default":[],"description":"IDs of during-call workflows the agent may call as tools. Only their duringCall triggers run; onCallEnd-triggered or managed-agent-containing workflows are rejected to prevent recursion."}},"example":{"prompt":"You are an order assistant. From the call transcript, identify the requested products, look them up, and create an order. Use the provided tools.","builtInTools":[],"apiTools":[],"mcpServers":[],"models":{"primary":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0}},"limits":{"maxIterations":15,"maxCostUsd":0.5,"stuckDetection":true},"routing":{"onSuccess":"node-success","onFailure":"node-create-ticket"},"dryRun":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"nodeType"}},"html":{"type":"string"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}]}},"required":["id","name","position","inputs","outputs"],"example":{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}},"description":"Action nodes in the flow"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"visibility":{"type":"string","enum":["private","resellerRead","resellerWrite","globalRead"],"description":"Workflow visibility and access control"},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"WorkFlowVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer; absent for workflows that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","visibility"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Handle Incoming Call","description":"Automated call handling flow","type":"flow","executeAt":"immediate","visibility":"private","trigger":{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}},"nodes":[{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"llmCompletionConfig","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"connections":[{"node":"2","input":"default","output":"default","label":"Continue"}],"files":[{"id":"file_123","filename":"welcome.wav","s3Id":"s3-file-123","displayUrl":"https://example.com/files/welcome.wav"}]}}},"knowledgeFiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"The name of the knowledge file"},"description":{"type":"string","description":"Optional description of the knowledge file"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Language of the knowledge file"},"texts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"The subject/title of the text (shown as the knowledge entry)"},"text":{"type":"string","minLength":1,"description":"The text content"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"summary":{"type":"string","description":"One line saying what this text covers, for the agent-facing knowledge index"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["name","text","generateWithAi"]},"description":"Array of text content linked with the knowledge"},"links":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The base URL for the link"},"link":{"type":"array","items":{"type":"object","properties":{"link":{"type":"string","format":"uri","description":"The actual link URL"},"enabled":{"type":"boolean","description":"Whether the link is enabled for processing"},"lastScrapedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contentHash":{"type":"string","description":"Hash of the last scraped content; lets a re-scrape skip URLs whose content is unchanged"},"etag":{"type":"string","description":"Last ETag from the origin; sent as If-None-Match so an unchanged page returns 304"},"lastModified":{"type":"string","description":"Last Last-Modified from the origin; sent as If-Modified-Since for conditional re-fetch"},"lastScrapeAttemptAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastScrapeError":{"type":"string","description":"Why the last attempt produced nothing. Cleared on a successful scrape; set means the page is failing, not merely empty"},"title":{"type":"string","description":"The page's own declared name, from its schema.org markup — used to show the agent what this knowledge base covers"},"summary":{"type":"string","description":"One line saying what this page is about, so the agent can pick the right page before searching rather than after"}},"required":["link","enabled"]},"minItems":1,"description":"Array of link details"},"scrapeInterval":{"type":"string","enum":["off","daily","weekly","monthly"],"description":"How often the link source is automatically re-scraped. \"off\" disables re-scraping; minimum cadence is daily.","default":"off"},"crawlNewLinks":{"type":"boolean","default":false,"description":"On each re-scrape, re-crawl the base URL and ingest any newly discovered links"},"selectAllByDefault":{"type":"boolean","default":false,"description":"Auto-enable links discovered by a re-scrape crawl instead of leaving them disabled"},"excludeUrls":{"type":"array","items":{"type":"string"},"default":[],"description":"URLs to never include, even if discovered by a crawl"},"allowHosts":{"type":"array","items":{"type":"string"},"description":"Extra hosts a re-scrape crawl may add pages from. The base URL's own host and its subdomains are always allowed; every other host is skipped"},"contentFilter":{"type":"string","maxLength":2000,"description":"AI instruction for which pages to keep vs permanently exclude (e.g. only upcoming shows)"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed","default":"not_started"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["url","link","generateWithAi"]},"description":"Array of links linked with the knowledge"},"files":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the file"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"file":{"type":"object","properties":{"buffer":{"type":"object","description":"Any valid JSON value"},"originalname":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"name":{"type":"string"},"encoding":{"type":"string"},"tempFilePath":{"type":"string"},"truncated":{"type":"boolean"},"md5":{"type":"string"}},"description":"File upload schema for multipart/form-data"},"buffer":{"type":"object","description":"Any valid JSON value"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"text":{"type":"string","description":"The extracted text content from the file"},"id":{"type":"string","description":"Optional unique identifier"},"s3Key":{"type":"string","description":"S3 storage key for the file"},"displayUrl":{"type":"string","description":"Public display URL for the file"},"mimeType":{"type":"string","description":"MIME type of the file"},"summary":{"type":"string","description":"One line saying what this file covers, for the agent-facing knowledge index"}},"required":["name","generateWithAi","text","mimeType"]},"description":"Array of files linked with the knowledge with S3 information"},"emails":{"type":"array","items":{"type":"object","properties":{"emailId":{"type":"string","minLength":1,"description":"The email ID"},"text":{"type":"string","minLength":1,"description":"The text content of the email"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["emailId","text"]},"description":"Array of emails linked with the knowledge"},"calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The call ID"},"text":{"type":"string","minLength":1,"description":"The text content of the call (transcript)"}},"required":["id","text"]},"description":"Array of calls linked with the knowledge"},"chats":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The chat ID"},"text":{"type":"string","minLength":1,"description":"The text content of the chat"}},"required":["id","text"]},"description":"Array of chats linked with the knowledge"},"contactIds":{"type":"array","items":{"type":"string"},"description":"Array of contact IDs who have access to this knowledge"},"publicAccess":{"type":"boolean","description":"Whether this knowledge is publicly accessible"},"summaryLevelOfDetail":{"type":"string","enum":["small","medium","large"],"description":"Level of detail for AI-generated summaries"},"knowledgeDataIds":{"type":"array","items":{"type":"string"},"description":"Array of knowledge data IDs linked with this knowledge file"},"knowledgeData":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"sourceId":{"type":"string","description":"Optional unique identifier for the source"},"source":{"type":"string","description":"The source name or identifier"},"sourceUrl":{"type":"string","description":"Originating URL for link-sourced rows"},"sourceType":{"type":"string","enum":["texts","links","files","emails","calls","chats","questions","custom"],"description":"The type of source this knowledge data comes from"},"question":{"type":"string","description":"The question or query this knowledge data answers"},"answer":{"type":"string","description":"The answer or response to the question"},"protected":{"type":"boolean","description":"Whether this knowledge data is protected from modification"},"knowledgeFileId":{"type":"string","description":"Reference to the parent knowledge file"},"contactId":{"type":"string","description":"Optional reference to the associated contact (contact id)"},"isPrimaryVector":{"type":"boolean","description":"True for the canonical Q&A row; false for the auxiliary embedding row."},"timesUsed":{"type":"number","description":"Number of times this knowledge data has been used/accessed"},"alternates":{"type":"array","items":{"type":"string"},"description":"Alternate phrasings of the question (extra retrieval entry points to the same answer)"},"alternatesGenerated":{"type":"boolean","description":"Alternates were AI-generated rather than supplied by the caller"},"unanswered":{"type":"boolean","description":"True when this is a question a caller asked that the agent could not answer. Never retrievable until someone supplies the answer."},"timesAsked":{"type":"number","description":"How many separate calls have asked this unanswered question — what to answer first."}},"required":["id","createdAt","active","createdBy","createdById","companyId","source","sourceType","question","answer","protected","knowledgeFileId"],"description":"Response schema for knowledge data including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","sourceId":"file_12345","source":"company_policy.pdf","sourceType":"files","question":"What are the company policies for employee conduct?","answer":"The company policies for employee conduct include maintaining professional behavior, following dress code guidelines, and treating colleagues with respect.","protected":false,"knowledgeFileId":"507f1f77bcf86cd799439011","timesUsed":0,"vectorId":"vec_12345"}},"description":"Array of knowledge data entries linked with this knowledge file"},"googleDriveFolderId":{"type":"string","description":"Google Drive folder ID"},"googleDriveFolderUpdatedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"summary":{"type":"string","description":"AI-generated summary of the knowledge content"},"keyPoints":{"type":"string","description":"AI-generated key points extracted from the knowledge content"},"hidden":{"type":"boolean","description":"When true, this file is hidden from user-facing list endpoints."},"learningAutoAdd":{"type":"boolean","description":"false = Learning auto-add never approves into this base; absent = allowed."},"autoGenerated":{"type":"boolean","description":"When true, this knowledge file is populated automatically by the system (transferred-call post-analysis)."},"sourceAgentId":{"type":"string","description":"Owning agent id when the file is auto-generated for a single agent."},"isMemoryStore":{"type":"boolean","description":"When true, marks the per-company knowledge file holding contact memories."},"isCompanyKnowledgeStore":{"type":"boolean","description":"When true, marks the per-company file collecting business-wide unanswered questions."},"isCallMemoryStore":{"type":"boolean","description":"When true, marks a hidden per-user call-memory knowledge file for voice-assist."},"sourceUserId":{"type":"string","description":"Owning user id when isCallMemoryStore is true."},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed"},"unansweredCount":{"type":"integer","minimum":0,"description":"How many unanswered caller questions are waiting on this file. Set on the agent own-file and company own-file endpoints."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","language"],"description":"Response schema for knowledge files including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Company Policies and Procedures","description":"Comprehensive guide covering all company policies, procedures, and best practices","summary":"This knowledge base contains comprehensive information about company policies...","keyPoints":"1. Employee conduct policies\n2. Remote work guidelines\n3. Safety procedures","summaryLevelOfDetail":"medium","googleDriveFolderId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveFolderUpdatedAt":"2026-10-20T15:02:35.126Z"}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt","analysisProperties"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["transfer-call"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"transferType":{"type":"string","enum":["warm","cold"]},"voipConnectionIds":{"type":"array","items":{"type":"string"}},"connectDynamically":{"type":"boolean"},"showCallerId":{"type":"boolean"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"transferCallBasedOnPromptInstructions":{"type":"boolean"},"promptForTransferReason":{"type":"string"},"announceTransferReason":{"type":"boolean"},"analyzeTransferredCall":{"type":"boolean"},"agentIdToAnalyzeTransferredCall":{"type":"string"},"secondsToWaitForCallerToAnswer":{"type":"number","minimum":10,"maximum":60},"voipConnections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for the VoIP connection"},"dial":{"type":"number","description":"Dial number or extension assigned to this connection"},"reason":{"type":"string","description":"Internal notes or purpose description for this connection"},"connectionType":{"type":"string","enum":["User","External","Agent"],"description":"Type of destination: 'Agent', 'User', or 'External'"},"agentId":{"type":"string","description":"ID of the AI agent this connection routes to (only for Agent type connections)"},"sipDomain":{"type":"string","description":"SIP domain for this connection."},"phone":{"type":"string","description":"External phone number this connection forwards to (only for External type connections)"},"userId":{"type":"string","description":"ID of the user this connection routes to (only for User type connections)"},"start":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily start time when this connection becomes available"},"end":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily end time when this connection becomes unavailable"},"canAgentTranscribe":{"type":"boolean","description":"Whether the agent can transcribe calls to this connection"},"canAgentRecord":{"type":"boolean","description":"Whether the agent can record calls to this connection"},"canAgentAnalyze":{"type":"boolean","description":"Whether the agent can analyze calls to this connection"},"canAgentSpeakWhenAsked":{"type":"boolean","description":"Whether the agent can speak when asked during calls to this connection"},"allDay":{"type":"boolean","description":"Whether this connection is available 24/7 (ignores start/end times when true)"},"syncWithGoogle":{"type":"boolean","description":"Whether availability is synchronized with Google Calendar"},"syncWithGoogleStatus":{"type":"string","enum":["open","closed"],"description":"Google Calendar sync mode: 'open' for free time availability, 'closed' for busy time unavailability"},"messageToUser":{"type":"string","description":"Custom message or announcement played before transferring calls to this connection"},"aiGeneratedMessage":{"type":"boolean","description":"Whether transfer messages are dynamically generated by AI based on call context"},"transcription_enabled":{"type":"boolean","description":"Whether real-time transcription is enabled for calls on this connection"},"agent":{"type":"object","properties":{"id":{"type":"string","description":"Agent's unique identifier"},"name":{"type":"string","description":"Agent's display name"}},"description":"Full agent details when connectionType is 'Agent' (populated from agents database)"},"user":{"type":"object","properties":{"id":{"type":"string","description":"User's unique identifier"},"name":{"type":"string","description":"User's full name"},"email":{"type":"string","description":"User's email address"},"defaultCompanyId":{"type":"string","description":"User's default company ID"},"picture":{"type":"string","description":"User's profile picture URL"},"emailVerified":{"type":"boolean","description":"Whether the user's email has been verified"},"lastConnectedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"isConnected":{"type":"boolean","description":"Whether the user is currently online/connected"}},"description":"Full user details when connectionType is 'User' (populated from users database)"},"username":{"type":"string","description":"SIP username for direct authentication (advanced configurations only)"},"password":{"type":"string","description":"SIP password for direct authentication (advanced configurations only)"},"ipAddress":{"type":"array","items":{"type":"string"},"description":"Whitelist of allowed IP addresses for security restrictions"},"extensionRegistrationIds":{"type":"array","items":{"type":"string"},"description":"IDs of the extension registrations linked with this connection"},"extensionRegistrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"voipConnectionId":{"type":"string","description":"ID of the VoIP Connection that owns this extension (legacy)"},"phoneExtensionId":{"type":"string","description":"ID of the Phone Extension that owns this extension"},"username":{"type":"string","description":"SIP username/extension that is registered"},"contactUri":{"type":"string","description":"Full SIP Contact URI for routing calls to this extension"},"remoteAddress":{"type":"string","description":"IP address of the registered SIP client"},"clientIp":{"type":"string","description":"Public client IP when known"},"remotePort":{"type":"number","description":"Port number of the registered SIP client"},"transport":{"type":"string","enum":["udp","tcp","tls","websocket"],"description":"Transport protocol: 'udp', 'tcp', 'tls' for SIP; 'websocket' for app clients"},"registeredAt":{"type":"string","format":"date-time","description":"Timestamp when this extension was registered (ISO 8601 format)"},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp when this registration will expire (ISO 8601 format)"},"expires":{"type":"number","description":"Number of seconds until expiration (decreases over time)"},"userAgent":{"type":"string","description":"SIP User-Agent identifying the client software"},"callId":{"type":"string","description":"SIP Call-ID from the REGISTER request"},"bindingSource":{"type":"string","enum":["register","invite"],"description":"'register' = the phone sent a REGISTER and can be rung; 'invite' = stand-in written from an authenticated outbound INVITE, used only for that call's in-dialog requests and never for ringing the phone"},"consecutiveInviteFailures":{"type":"integer","description":"Liveness skip-list counter. Bumped on 5xx/timeout from fork-INVITEs, reset on 200 OK. When ≥3 and `lastInviteFailureAt` is within the last 5 minutes, the registration is skipped by routing."},"lastInviteFailureAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"voipConnection":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"agentId":{"type":"string"},"userId":{"type":"string"},"connectionType":{"type":"string"}},"description":"Legacy VoIP Connection — only populated for pre-migration rows."},"userEndpoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"number":{"type":"string"},"status":{"type":"string"}},"description":"Populated UserEndpoint this registration belongs to."}},"required":["id","createdAt","active","createdBy","createdById","companyId","username","contactUri","remoteAddress","remotePort","transport","registeredAt","expiresAt","expires"],"description":"Extension registration details including contact information and expiration status","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","voipConnectionId":"507f1f77bcf86cd799439011","username":"1001","contactUri":"sip:1001@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300,"userAgent":"Zoiper 5.5.10","callId":"abc123@192.168.1.100","voipConnection":{"id":"507f1f77bcf86cd799439011","name":"Customer Support","agentId":"507f1f77bcf86cd799439012","connectionType":"Agent"}}},"description":"Active SIP device registrations for this connection (virtual populate from ExtensionRegistration collection, filtered to show only non-expired registrations). Each entry represents a physical device (phone, softphone, etc.) currently registered with this extension."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","connectionType","syncWithGoogle","syncWithGoogleStatus"],"description":"Response schema for VoIP connection including complete configuration, company metadata, and linked agent or user details","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support","dial":1,"reason":"General customer support inquiries","connectionType":"Agent","agentId":"507f1f77bcf86cd799439011","phone":"+1234567890","userId":"507f1f77bcf86cd799439012","start":{"hours":9,"minutes":0},"end":{"hours":17,"minutes":0},"canAgentTranscribe":true,"canAgentRecord":true,"canAgentAnalyze":true,"canAgentSpeakWhenAsked":false,"allDay":false,"syncWithGoogle":true,"syncWithGoogleStatus":"open","messageToUser":"Welcome to customer support!","aiGeneratedMessage":false,"agent":{"id":"507f1f77bcf86cd799439011","name":"John Doe","email":"john@example.com"},"user":{"id":"507f1f77bcf86cd799439012","name":"Jane Smith","email":"jane@example.com"},"registrations":[{"id":"507f1f77bcf86cd799439013","username":"customer_support","contactUri":"sip:customer_support@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300}]}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","transferType"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["end-call"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["press-digit"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["email"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","emailConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["sms"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","smsConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["api"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","apiConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["logic-split"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["extract-analysis"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"prompt":{"type":"string"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions"]}],"discriminator":{"propertyName":"nodeType"},"description":"Node-specific data and configuration"},"html":{"type":"string","description":"HTML content for the node display"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}],"description":"Type identifier for the node"}},"required":["id","name","position","inputs","outputs"],"example":{"id":"1","name":"Welcome Message","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"}]},"inputs":{},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}},"description":"Flow nodes for node-based agents"},"connections":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","description":"Target node identifier for the connection"},"input":{"type":"string","description":"Input port identifier on the target node"},"output":{"type":"string","description":"Output port identifier on the source node"},"label":{"type":"string","description":"Display label for the connection"}},"required":["node"],"description":"Schema for a connection between two flow nodes","example":{"node":"2","input":"default","output":"default","label":"Continue"}},"description":"Flow connections between nodes for node-based agents"},"integrations":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"source":{"type":"string"},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"read":{"type":"boolean"},"write":{"type":"boolean"}},"required":["name","read","write"]}}},"required":["enabled","source","properties"]},"description":"Integrations for the agent"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the agent"},"dataRetentionDays":{"type":"integer","minimum":0,"maximum":365,"description":"Days before the retention policy applies (0–180; 0 = at the next nightly run). Playable audio is kept at most 30 days. Only a super admin can set up to 365 (1 year, audio included).","example":30},"dataRetentionPolicy":{"type":"string","enum":["none","only-phone-number","transcript","all"],"description":"What call data to keep. `all`: messages, summary and analysis stay; audio and transcript files are deleted after the retention period. `transcript`: audio is kept for the retention period, then deleted; messages, summary and analysis stay. `only-phone-number`: caller number only. `none`: the call is anonymized.","example":"all"},"archiveRecordingForRetrieval":{"type":"boolean","description":"When true, after the playable period (max 1 month) the audio is hidden and kept in Glacier Instant Retrieval until 3 months from the call, then deleted automatically. Default off.","example":false},"requirePassingTestsToPublish":{"type":"boolean","description":"Opt-in publish gate: putting a version live for the first time is refused unless a test suite run after its last save passed completely. Rollback is never gated. Default off.","example":false},"coreProvidersOnly":{"type":"boolean","description":"Core-providers mode: auxiliary AI on this agent's calls (knowledge lookup during calls, in-call assistant, unanswered questions, analytics enrichment, image analysis) runs on the platform's core model instead of Groq (US) / Gemini. For customers that only accept the core sub-processors. Default off.","example":false},"skipParametersNotUsedInPrompt":{"type":"boolean","description":"When true, parameters/variables not explicitly referenced in the prompt will not be appended as additional context","example":false},"customerInstructions":{"type":"string","description":"The customer instructions for the agent"},"testCasesForCustomerInstructions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id of the test case"},"scenario":{"type":"string","description":"The scenario for the test case"},"idealOutcome":{"type":"string","description":"The ideal outcome for the test case"},"actualOutcomes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id of the actual outcome"},"agentEntity":{"type":"string","enum":["systemPrompt","forwardingInstructions","endCallSettings","skipTurn"]},"existingText":{"type":"string","description":"The existing text in the system prompt that will be replaced or modified"},"newText":{"type":"string","description":"The new text to add to the system prompt"},"actionType":{"type":"string","enum":["add","remove","replace"],"description":"The type of the instruction: add, remove, replace"},"reason":{"type":"string","description":"The reason for the instruction"},"applied":{"type":"boolean","description":"Whether the instruction has been applied"},"appliedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"callId":{"type":"string","description":"The ID of the call if the source is call"},"score":{"type":"number","minimum":1,"maximum":10,"description":"1 to 10 by how close was to ideal outcome"},"outcome":{"type":"string","description":"The outcome of the test case"}},"required":["agentEntity","score","outcome"],"description":"The actual outcome of the test case"},"description":"The actual outcomes of the test case"}},"required":["scenario","idealOutcome","actualOutcomes"],"description":"The test cases for the customer instructions"},"description":"The test cases for the customer instructions"},"aiDisclosure":{"type":"object","properties":{"enabled":{"type":"boolean","description":"When true, the platform ensures the first spoken greeting names AI / a digital assistant. Default is off. Leaving this off may leave the deployer non-compliant with Article 50(1) and 50(5) EU AI Act."},"disabledAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"disabledById":{"type":"string","description":"User id who turned the overlay off"},"disabledBy":{"type":"string","description":"User name who turned the overlay off"}},"description":"Art. 50 AI disclosure overlay. On for new agents; agents created before then stay as they were. Welcome/prompt edits cannot turn this on."},"sensitiveData":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"types":{"type":"array","items":{"type":"string","enum":["amka","afm","personal_number","id_card","passport","gemi","cy_tic","iban","card","cvv","pin","email","phone"]}},"vaultRetentionDays":{"type":"integer","minimum":1,"maximum":365}},"description":"Sensitive-data protection: caller identifiers (ΑΜΚΑ, ΑΦΜ, IBAN, ID card, …) are replaced by placeholders before the AI model sees them; real values are kept encrypted on the call and revealed only with the sensitive-data permission. Default off."}},"required":["name"]}}}},"security":[{"apiKey":[]}],"tags":["Agentic - Agents"]}},"/api/v1/agentic/campaigns":{"post":{"summary":"Create a new AI-powered outbound campaign","description":"Create a new campaign for automated outbound calling with AI agents. Campaigns allow you to:\n\n- **Automate outbound calls** to a list of leads with AI agents\n- **Schedule campaigns** to run at specific times and days\n- **Configure retry logic** for failed or unanswered calls\n- **Manage concurrent calls** to control call volume\n- **Track campaign performance** with real-time statistics\n\n**Required Fields:**\n- `name`: Descriptive name for the campaign\n\n**Call source:**\n- `sipTrunkIds`: SIP trunks to dial out from (get from POST /phones/sip-trunks/query). Required to go live unless `verifiedCallerId` is set. Drafts may omit this and finish setup later.\n- `agentId`: AI agent that handles the calls (company default if omitted)\n\n**Optional Configuration:**\n- `schedule`: Business hours, timezone, and how often to pick pending leads\n- `retries`: Call-backs after the first call when nobody answers (busy, voicemail, no answer, or failed to connect) (0-10, default 3; a lead gets at most retries + 1 calls)\n- `retryDelayMinutes`: Minutes between those calls (default 240 = 4 hours; allowed 60 to 40320 = 1 hour to 4 weeks)\n- `maximumConcurrentCalls`: Limit concurrent calls (max 100)\n- `defaultCallerIds`: Pool of caller IDs presented to leads\n- `notificationSettings`: Email notifications for campaign events\n\nAfter creating a campaign, add leads with POST /agentic/campaign-leads, then set `status` to `\"active\"` (or use resume) to start calling.\n\n**Human seats (optional):** set `userSettings.userIds` so users can dial the autogenerated `extensionNumber` and stay parked. `dispatchStrategy` (`random` | `least_answered` | `round_robin`) picks who gets the next lead. Outbound leads are dialed only while at least one assigned user is online (Windows app connected, or parked on the campaign extension). `overflowToAi` (default true) is only for a live lead that cannot attach to an online user — AI instead of hold music. Hangup after a lead does not leave the campaign — `POST /:id/disconnect` does.","responses":{"200":{"description":"Campaign created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","minLength":1,"description":"Name of the campaign"},"description":{"type":"string","description":"Description of the campaign purpose and goals"},"type":{"type":"string","enum":["email","phone","sms"],"description":"Primary channel type for the campaign"},"purpose":{"type":"string","enum":["appointment","lead_qualification","event_invite","payment_collection","custom"],"description":"What the campaign is trying to achieve. Non-custom purposes seed campaign-level analysis fields and call instructions; \"custom\" (default) leaves everything as-is"},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Campaign-level analysis fields, merged with the agent's own analysis properties for calls of this campaign (campaign wins on name collision)"},"stages":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["success"]}},"required":["name","description","nextAction"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["failed"]}},"required":["name","description","nextAction"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["other"]}},"required":["name","description","nextAction"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["retry"]},"maxRetries":{"type":"integer","minimum":1,"maximum":10,"description":"Calls on this stage (1–10), counting the call that put the lead there: 5 = up to 4 more calls, 1 = no call-back"},"retryIntervalMinutes":{"type":"integer","minimum":30,"maximum":10080,"description":"Minutes to wait before the next attempt (min 30)"}},"required":["name","description","nextAction","maxRetries","retryIntervalMinutes"]}],"discriminator":{"propertyName":"nextAction"}},"maxItems":50,"description":"Stages the AI classifies the lead into after an attempt. Finished stages (success / failed / other) close the lead; retry queues another attempt on the campaign channel"},"maxRetriesFollowUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage","nullable":true},"promptSection":{"type":"string","maxLength":5000,"description":"Campaign call instructions injected into the agent context at the start of every campaign call"},"appointmentServiceKeys":{"type":"array","items":{"type":"string"},"description":"Appointment campaigns only: the agent services (serviceKey, from appointmentSettings.services) this campaign books. Left empty, a lead counts as already booked when ANY upcoming calendar event carries their phone number or email. With services picked, the event must ALSO name one of them — an upcoming event with only the phone number means a different service, so the lead is still called. Ignored for other goals."},"dynamicWelcomeMessage":{"type":"boolean","description":"When true, campaign calls open with an AI-generated greeting built from the campaign goal and lead context instead of the agent's fixed welcome message. Explicit opt-in: each call is then billed with a minimum duration of 10 seconds, even if it ends unanswered"},"welcomeMessage":{"type":"string","maxLength":2000,"description":"Static opening spoken on every campaign call. Used only when dynamicWelcomeMessage is not true. Empty means the agent welcome"},"acceptDynamicVariables":{"type":"boolean","description":"When true (default if omitted), extra columns on a lead list become dynamicVariables automatically. When false, only leadColumns (plus phone) are accepted as extra lead fields"},"leadColumns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1},"type":{"type":"string","enum":["string","number","boolean","date"]}},"required":["name","type"]},"description":"Static extra lead columns when acceptDynamicVariables is false. Echoed back when the toggle is on so a later switch-off keeps the schema"},"status":{"type":"string","enum":["draft","active","paused","completed"],"description":"Current status of the campaign"},"retries":{"type":"integer","minimum":0,"maximum":10,"description":"Number of retries for the campaign (0-10; defaults to 3)"},"maximumConcurrentCalls":{"type":"number","minimum":1,"maximum":100,"description":"Maximum number of concurrent calls for the campaign (max 100)"},"retryDelayMinutes":{"type":"integer","minimum":60,"maximum":40320,"description":"Delay between retry attempts in minutes (60-40320; defaults to 240 = 4 hours)"},"schedule":{"type":"object","properties":{"days":{"type":"array","items":{"type":"object","properties":{"runFromTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23},"minutes":{"type":"number","minimum":0,"maximum":59}},"required":["hours","minutes"]},"runToTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23},"minutes":{"type":"number","minimum":0,"maximum":59}},"required":["hours","minutes"]},"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]}},"required":["runFromTime","runToTime","day"]},"description":"Days of the week and hours of the day to run the campaign"},"timeZone":{"type":"string","description":"IANA time zone, e.g. Europe/Athens"},"runEverySeconds":{"oneOf":[{"type":"number","enum":[60]},{"type":"number","enum":[300]},{"type":"number","enum":[900]},{"type":"number","enum":[1800]},{"type":"number","enum":[3600]},{"type":"number","enum":[7200]},{"type":"number","enum":[14400]},{"type":"number","enum":[28800]},{"type":"number","enum":[57600]},{"type":"number","enum":[86400]}],"description":"How often the campaign checks for leads to call, in seconds: 60, 300, 900, 1800, 3600, 7200, 14400, 28800, 57600 or 86400. Use 60 unless asked otherwise."}},"required":["timeZone"],"description":"Campaign scheduling configuration"},"agentId":{"type":"string","description":"ID of the agent responsible for the campaign"},"voipPhoneIds":{"type":"array","items":{"type":"string"},"description":"Legacy VoIP phone IDs. Prefer sipTrunkIds."},"sipTrunkIds":{"type":"array","items":{"type":"string"},"description":"SIP trunks to dial out from. Get IDs from POST /phones/sip-trunks/query. Required to go live unless verifiedCallerId is set."},"verifiedCallerId":{"type":"string","description":"Verified phone number used as caller ID when dialing on the company trunk"},"defaultCallerIds":{"type":"array","items":{"type":"string"},"description":"Pool of numbers presented to the people being called, for leads without their own callerId"},"notificationSettings":{"type":"object","properties":{"enabled":{"type":"boolean"},"emails":{"type":"array","items":{"type":"string","format":"email"}},"lastSentAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"description":"Notifications configuration"},"lastRunAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"allowedPhoneNumbers":{"type":"array","items":{"type":"string"},"description":"Array of phone numbers that are allowed to be called"},"defaultCampaign":{"type":"boolean","description":"Whether this is the default campaign for the company"},"processingNow":{"type":"boolean","description":"Whether the campaign is currently being processed by the job service"},"processingNowSince":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"userSettings":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":50},"maxItems":100,"default":[],"description":"Company users who may dial into this campaign and take leads"},"dispatchStrategy":{"type":"string","enum":["random","least_answered","round_robin"],"default":"random","description":"How the next lead is given to a waiting user: random, fewest leads so far this session (least_answered), or longest wait (round_robin)"},"overflowToAi":{"type":"boolean","default":true,"description":"If a live lead cannot attach to an online assigned user, send it to the campaign AI instead of hold music. Default true. Campaigns with assigned users do not dial unless at least one of those users is online."},"wrapUpSeconds":{"type":"integer","minimum":0,"maximum":300,"default":5,"description":"Seconds after a lead hangup before the user is eligible for the next lead"},"restrictDialIn":{"type":"boolean","default":true,"description":"When true, only listed userIds may dial the campaign extension"},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"User id"},"name":{"type":"string","description":"Display name"},"email":{"type":"string","description":"Email"},"phoneNo":{"type":"string","description":"Phone number"}},"required":["id","name"]},"description":"Hydrated users for userIds"}},"description":"Assigned users, dispatch strategy, and AI overflow"},"agent":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string"},"agentType":{"type":"string","enum":["prompt-based","analysis-agent","ai-assistant","node-based"],"example":"prompt-based","description":"The type of agent architecture that determines its capabilities and behavior. `prompt-based`: Standard conversational agent that can answer calls, transfer calls, handle emails, book appointments, and execute workflows. Best for general-purpose use cases. `analysis-agent`: Specialized agent for call analysis only. Used to analyze calls after they have been transferred to humans. Monitors and extracts insights from ongoing calls. See: https://docs.voicelogica.ai/transfer-calls/introduction `ai-assistant`: Personal AI assistant/voicemail. Designed ONLY for individual use as your own AI voicemail or personal assistant. Handles calls when you are unavailable. `node-based`: Advanced agent with visual flow builder. Supports complex branching logic, conditional routing, and multi-step reasoning. Best for sophisticated conversational workflows."},"systemPrompt":{"type":"string"},"dynamicVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the dynamic variable"},"value":{"type":"string","description":"The value of the dynamic variable"}},"required":["name","value"]}},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Locale code"},"secondaryLanguages":{"type":"array","items":{"type":"object","properties":{"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"The language of the secondary language"},"type":{"type":"string","enum":["other_agent","other_voice"],"description":"The type of the secondary language"},"agentId":{"type":"string","description":"The ID of the agent that the secondary language is for"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"enabled":{"type":"boolean","description":"Whether the secondary language is enabled"},"defaultContries":{"type":"array","items":{"type":"string","enum":["Afghanistan","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Bouvet Island","Brazil","British Indian Ocean Territory","Brunei Darussalam","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","China","Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo","Congo, The Democratic Republic of the","Cook Islands","Costa Rica","Cote D'Ivoire","Croatia","Cuba","Cyprus","Czech Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Falkland Islands (Malvinas)","Faroe Islands","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Heard Island and Mcdonald Islands","Holy See (Vatican City State)","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran, Islamic Republic Of","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kuwait","Kyrgyzstan","Lao People\"S Democratic Republic","Lao People's Democratic Republic","Latvia","Lebanon","Lesotho","Liberia","Libyan Arab Jamahiriya","Liechtenstein","Lithuania","Luxembourg","Macao","Macedonia, The Former Yugoslav Republic of","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia, Federated States of","Moldova, Republic of","Monaco","Mongolia","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands","Netherlands Antilles","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territory, Occupied","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn","Poland","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saint Helena","Saint Kitts and Nevis","Saint Lucia","Saint Pierre and Miquelon","Saint Vincent and the Grenadines","Samoa","San Marino","Sao Tome and Principe","Saudi Arabia","Senegal","Serbia and Montenegro","Seychelles","Sierra Leone","Singapore","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia and the South Sandwich Islands","Spain","Sri Lanka","Sudan","Suriname","Svalbard and Jan Mayen","Swaziland","Sweden","Switzerland","Syrian Arab Republic","Taiwan, Province of China","Tajikistan","Tanzania, United Republic of","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey","Turkmenistan","Turks and Caicos Islands","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States Minor Outlying Islands","United States","Uruguay","Uzbekistan","Vanuatu","Venezuela","Virgin Islands, British","Virgin Islands, U.S.","Wallis and Futuna","Western Sahara","Yemen","Zambia","Zimbabwe","Unknown or Invalid Region","Russia"],"description":"Country name"},"description":"The default countries for the secondary language"}},"required":["language","type"]}},"knowledgeFileIds":{"type":"array","items":{"type":"string"}},"workflowsIds":{"type":"array","items":{"type":"string"}},"allowedToCopy":{"type":"string","enum":["sameCompany","public","publicWithPassword","private"]},"navigateToNodeTool":{"type":"boolean","description":"Whether the agent can navigate to a specific node tool based on instructions"},"syncWithContacts":{"type":"boolean"},"agentEmailSettings":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"systemPrompt":{"type":"string"},"functionCallIds":{"type":"array","items":{"type":"string"}},"mailboxIds":{"type":"array","items":{"type":"string"},"description":"Mailboxes exclusively assigned to this agent for inbound mail conversations"},"ccOptions":{"type":"array","items":{"type":"string"}},"evaluationSettings":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"methodsEnabled":{"type":"object","properties":{"createDraft":{"type":"boolean"},"reply":{"type":"boolean"},"training":{"type":"boolean"}}},"processEmailPrompt":{"type":"string"},"trainingEvaluationPrompt":{"type":"string"},"completeWhenNoReplyNeeded":{"type":"boolean","description":"When true, newsletters/receipts/no-reply are marked closed (completed). Default true."}},"example":{"methodsEnabled":{"createDraft":true,"reply":true,"training":false},"processEmailPrompt":"Keep replies short and professional.","trainingEvaluationPrompt":"Evaluate this email for training purposes.","completeWhenNoReplyNeeded":true}},"displayBusinessDetails":{"type":"object","properties":{"name":{"type":"boolean"},"address":{"type":"boolean"},"website":{"type":"boolean"},"email":{"type":"boolean"},"phone":{"type":"boolean"},"operatingHours":{"type":"boolean"},"isOpenNow":{"type":"boolean"},"utcOffset":{"type":"boolean"},"wheelchairAccessibleEntrance":{"type":"boolean"}},"example":{"name":true,"address":true,"website":true,"email":true,"phone":true,"operatingHours":true,"isOpenNow":true,"utcOffset":true,"wheelchairAccessibleEntrance":false}},"authorizationConfig":{"type":"object","properties":{"smsEnabled":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"emailEnabled":{"type":"boolean"},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"example":{"smsEnabled":true,"emailEnabled":true}},"contactData":{"type":"object","properties":{"enabled":{"type":"boolean"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["enabled"],"example":{"enabled":true}},"functionCalls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"description":{"type":"string","description":"Description of the function call"},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"description":"Condition blocks for execution logic"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"],"description":"When to execute the function call"},"confirmationMethodConfig":{"type":"object","properties":{"confirmationRequired":{"type":"boolean"},"secondsToWait":{"type":"number","minimum":10},"wordMatch":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"array","items":{"type":"string"}}},"required":["required","value"]},"aiGuidance":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]},"dtmf":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]}},"required":["confirmationRequired","secondsToWait"],"description":"Configuration for user confirmation"},"messageToUserBeforeAction":{"type":"string","description":"Message to show user before executing the action"},"messageToUserAfterAction":{"type":"string","description":"Message to show user after executing the action"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"functions":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"number"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"]},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"action":{"type":"string","enum":["emailConfig","apiCall","sendSms","createEvent","sendPhoneCall","forwardCall","googleSearch","sendMessage","endCallConfig","googleSheetConfig","googleDocConfig","llmCompletion","hubspotConfig","aiResponse","transferCall","afmSearch","codeExecution"]},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}},"forwardCallConfig":{"type":"object","properties":{"voipConnectionId":{"type":"string","minLength":24}},"required":["voipConnectionId"],"example":{"voipConnectionId":"507f1f77bcf86cd799439011"}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}},"sendMessageConfig":{"type":"object","properties":{"messageToUser":{"type":"string","minLength":1}},"required":["messageToUser"],"example":{"messageToUser":"Your order has been shipped!"}},"endCallConfig":{"type":"object","properties":{"reason":{"type":"string","minLength":2}},"required":["reason"],"example":{"reason":"User requested to end the call"}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["sequence","action"]},"description":"Internal actions to execute"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","parameters","functions"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Send Email Notification","description":"Sends an email notification to the user","conditionBlocks":[],"executeAt":"immediate","messageToUserBeforeAction":"I will send you an email notification.","messageToUserAfterAction":"Email notification sent successfully!","fileIds":["file_123","file_456"],"files":[{"id":"file_123","filename":"document.pdf","s3Id":"s3-file-123","displayUrl":"https://example.com/files/document.pdf"}],"parameters":[{"id":"param_1","name":"Email Address","description":"Recipient email address","type":"string","required":true}],"functions":[{"id":"func_1","name":"Send Email","type":"email","config":{"to":"{{emailAddress}}","subject":"Notification","body":"This is a notification email."}}]}}}},"example":{"model":{"completionProvider":"openai","model":"gpt-4o-mini","temperature":0.5,"maxCompletionTokens":500},"systemPrompt":"You are a helpful email assistant. Always be professional and courteous.","functionCalls":[{"id":"fc-123","name":"Send Email","description":"Send an email to the specified recipient"}],"powerUps":["appointment-booking"],"displayBusinessDetails":{"name":true,"address":true,"website":true,"email":true,"phone":true,"operatingHours":true,"isOpenNow":true,"utcOffset":true,"wheelchairAccessibleEntrance":false}}},"agentPhoneSettings":{"type":"object","properties":{"interimGeneration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to generate interim generation while user is speaking"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to trigger interim generation"},"prompt":{"type":"string","description":"The prompt to use when generating interim generation"},"minimumWordsForFullResponse":{"type":"number","description":"The minimum number of words for a full response"}},"description":"Configuration for interim generation"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"AI model configuration for the agent"},"sendSms":{"type":"boolean","description":"Whether to send SMS"},"blockInterruptionWhileAiIsGenerating":{"type":"boolean","description":"Whether to block interruption while AI is generating"},"senderId":{"type":"string","description":"The ID of the sender to use for SMS"},"allowHumanToInterruptAiOnFirstMessage":{"type":"boolean","description":"Whether to allow human to interrupt AI on the first message"},"ssml":{"type":"boolean","description":"Whether to use SSML (Speech Synthesis Markup Language) for voice synthesis"},"skipTurnEnabled":{"type":"boolean","description":"Whether to skip turn during the call"},"skipTurnPrompt":{"type":"string","description":"The prompt to use when skipping turn during the call"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"timesToNudgeBeforeHungup":{"type":"number","minimum":0,"maximum":3,"description":"Number of times to nudge the user before hanging up the call (1-3)"},"nudgeIntervalSeconds":{"type":"number","minimum":0,"maximum":60,"description":"Interval in seconds between nudges when user is silent (0-60 seconds)"},"nudgePrompt":{"type":"string","description":"The prompt to use when nudging the user"},"actionsAfterNudge":{"type":"array","items":{"type":"string","enum":["hangup","forward"]},"maxItems":2,"description":"Actions after nudge when silence threshold is reached (hangup, forward, or both)"},"systemPrompt":{"type":"string","description":"The system prompt that defines the agent's behavior and personality"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"phoneFirstMessageAiGenerated":{"type":"boolean","description":"Whether the first message should be AI-generated or use a predefined message"},"updateAdaptationPhrasesOnSystemPromptChange":{"type":"boolean","description":"Whether to update adaptation phrases when system prompt changes"},"phoneFirstMessage":{"type":"string","description":"The first message to say when the call connects"},"phoneFirstMessageOffHours":{"type":"string","description":"Welcome message when the business is closed; if empty, the normal first message is used"},"endCallAfterOffHoursWelcomeMessage":{"type":"boolean","description":"When the business is closed and the off-hours welcome message plays, hang up as soon as it finishes instead of continuing the conversation"},"transcriptionConfig":{"type":"object","properties":{"transcriptionProvider":{"type":"string","enum":["microsoft","google","fireworks","speechmatics","openai","assemblyai","deepgram","google_v1","google_v2","elevenlabs","voicelogica","soniox"],"description":"The transcription service provider to use for speech-to-text"},"silenceDurationMs":{"type":"number","minimum":500,"description":"Duration of silence in milliseconds before considering the user finished speaking"},"adaptationPhraseSetIds":{"type":"array","items":{"type":"string"},"description":"IDs of adaptation phrase sets to improve transcription accuracy"},"transcriptionVoiceMailPhrases":{"type":"array","items":{"type":"string"},"description":"Phrases that indicate the call has reached a voicemail system"},"waitForFullTranscription":{"type":"boolean","description":"Whether to wait for complete transcription before processing"},"enhanced":{"type":"boolean","description":"Whether to use enhanced transcription models for better accuracy"},"audioEnhancement":{"type":"boolean","description":"Whether to run ai-coustics speech enhancement (noise/background-speech suppression) on caller audio before transcription"},"audioEnhancementLevel":{"type":"number","minimum":0,"maximum":1,"description":"How aggressively the ai-coustics model suppresses noise (0.0-1.0). Uses the model default when omitted"},"endpointSensitivity":{"type":"number","minimum":-1,"maximum":1,"nullable":true,"description":"Soniox only: how aggressively endpoints are detected (-1.0 to 1.0). Higher = faster end-of-turn but more risk of cutting the caller off mid-sentence. Platform default 0.3"},"maxEndpointDelayMs":{"type":"number","minimum":500,"maximum":3000,"nullable":true,"description":"Soniox only: hard cap on how long Soniox may wait for an endpoint after speech ends (500-3000ms). Platform default 1500"},"endpointLatencyAdjustmentLevel":{"type":"integer","minimum":0,"maximum":3,"nullable":true,"description":"Soniox only: endpoint latency reduction level 0-3 (3 = most aggressive). Platform default 3"},"speculativeFinalize":{"type":"boolean","nullable":true,"description":"Soniox only: at the speculative quiet moment, request finalize() to flush pending tokens into the candidate before the endpoint. Platform default from admin settings"},"singleUtterance":{"type":"boolean","description":"Whether to process speech as single utterances"},"openAiModel":{"type":"string","enum":["whisper-1","gpt-transcribe","gpt-4o-transcribe","gpt-4o-mini-transcribe","gpt-4o-transcribe-diarize"],"description":"OpenAI model to use for transcription"},"prompt":{"type":"string","description":"Custom prompt used for transcription processing"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to focus on during transcription"},"initializationMethod":{"type":"string","enum":["on_call_start","on_human_join"],"description":"Method to initialize the transcription service"},"adaptationPhraseSets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the adaptation phrase set"},"description":{"type":"string","nullable":true,"description":"The description of the phrase set"},"phraseSetId":{"type":"string","description":"The phrase set id"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Locale code"},"phrases":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Phrase value"},"boost":{"type":"number","minimum":1,"maximum":20,"description":"Boost value (1-20)"}},"required":["value","boost"]},"nullable":true,"description":"The phrases of the set"},"boost":{"type":"number","minimum":1,"maximum":20,"nullable":true,"description":"Boost value (1-20)"},"apiEnabled":{"type":"boolean","nullable":true,"description":"Whether API is enabled"},"apiUrl":{"type":"string","nullable":true,"description":"API URL"},"apiKey":{"type":"string","nullable":true,"description":"API key"},"lastPulledAt":{"type":"string","format":"date-time","description":"The last pulled at date of the phrase set","nullable":true}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","phraseSetId","language"],"description":"Response schema for adaptation phrase set including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Greetings","description":"Common customer greeting phrases","phraseSetId":"greetings_001","language":"en-US","phrases":[{"value":"Hello","boost":5},{"value":"Hi there","boost":3},{"value":"Good morning","boost":4}],"boost":5,"apiEnabled":true,"apiUrl":"https://api.example.com/phrases","apiKey":"api_key_123","lastPulledAt":"2024-01-15T10:30:00.000Z"}},"description":"Adaptation phrase sets used for transcription"}},"required":["transcriptionProvider"],"description":"Configuration for speech-to-text transcription settings","example":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"waitForFullTranscription":false,"openAiModel":"whisper-1"}},"standbyConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable standby (sleep/wake) for this agent"},"wakePhrases":{"type":"array","items":{"type":"string","minLength":2,"maxLength":50},"maxItems":5,"description":"Phrases that wake the agent. On human-to-human calls the agent stays asleep until one is heard; on normal AI calls a wake phrase brings it back after it was told to sleep. Both parties hear the response."},"sleepPhrases":{"type":"array","items":{"type":"string","minLength":2,"maxLength":50},"maxItems":5,"default":[],"description":"Phrases that put the agent into standby — it stops responding entirely until woken (distinct from skip-turn). Mainly used on normal AI calls."}},"required":["enabled","wakePhrases"],"description":"Standby (sleep/wake) configuration","example":{"enabled":true,"wakePhrases":["logica"],"sleepPhrases":["go to sleep"]}},"voipConnectionIds":{"type":"array","items":{"type":"string"},"description":"@deprecated Legacy VoIP connection IDs. Use transferSettings.availableTransferDestinations + SipTrunk / UserEndpoint / UserGroup. Kept for backward-compat reads until the migration script lands."},"connectDynamically":{"type":"boolean","description":"Whether to connect the user to the appropriate AI or Human Agent dynamically based on the system prompt"},"firstMessageSenderOnOutgoingCall":{"type":"string","enum":["agent","user"],"description":"Who should send the first message on outgoing calls"},"endCallConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable automatic call ending. When enabled, the agent can end calls based on configured reasons"},"messageToClient":{"type":"string","description":"The message the agent will say to the client before ending the call. This is used when aiGenerated is false"},"aiGenerated":{"type":"boolean","description":"When true, the agent will generate a contextual goodbye message. When false, it uses the fixed messageToClient"},"maximumTimeEnabled":{"type":"boolean","description":"Enable automatic call termination after reaching the maximum time limit"},"maximumTimeCallInSeconds":{"type":"number","minimum":1,"description":"Maximum allowed call duration in seconds. Calls will automatically end when this limit is reached (e.g., 300 for 5 minutes)"},"endCallReasons":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","description":"The specific condition or reason when the agent should end the call (e.g., \"customer doesnt want anything else\", \"issue resolved\", \"transferred to human\")"},"aiGenerated":{"type":"boolean","description":"When true, the AI generates a contextual goodbye message. When false, uses a fixed message"},"prompt":{"type":"string","description":"Template or instruction for the AI to generate the goodbye message. Used when aiGenerated is true to guide the tone and content"},"maxInterruptions":{"type":"integer","minimum":0,"maximum":5,"description":"How many times the caller may interrupt the goodbye and keep the call alive before the hangup becomes final. 0 hangs up at once even if the caller speaks. Defaults to 1"}},"required":["reason","aiGenerated"],"example":{"reason":"completed","aiGenerated":true,"prompt":"Thank you for calling. Have a great day!"}},"description":"Detailed end call configurations with specific reasons and custom prompts. Each reason defines when the agent should end the call and what to say"}},"description":"Configuration for automatic call ending behavior","example":{"enabled":true,"aiGenerated":true,"maximumTimeEnabled":true,"maximumTimeCallInSeconds":300,"endCallReasons":[{"reason":"when customer doesnt want anything else","messageToClient":"Thank you for calling. If you need anything else, please call back.","aiGenerated":true}]}},"afterCallFunctionCallIds":{"type":"array","items":{"type":"string"},"description":"IDs of function calls to execute after the call ends"},"postCallAnalysisConfig":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"AI model to use for post-call analysis"},"minimumDuration":{"type":"number","description":"Minimum duration in seconds to generate post-call analysis & summary"},"summaryEnabled":{"type":"boolean","description":"Whether to generate summary"},"summaryPrompt":{"type":"string","maxLength":5000,"description":"Custom prompt for generating call summary"},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties to extract and analyze from the call"},"allowedAutoTaskKinds":{"type":"array","items":{"type":"string","enum":["todo","call","meeting","reminder","callback"]},"description":"Task kinds the AI may auto-create at the end of the call. Human↔AI calls only allow \"callback\"; human↔human (transferred) calls allow the others. Empty = the AI creates no tasks post-call."},"analysisPrompt":{"type":"string","description":"Custom prompt for call analysis"},"emails":{"type":"array","items":{"type":"string","format":"email"},"description":"Email addresses to send post-call analysis to"},"phoneNumbers":{"type":"array","items":{"type":"string"},"description":"Phone numbers to send post-call analysis to"},"webhookHeaders":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The key of the webhook header"},"value":{"type":"string","description":"The value of the webhook header"}},"required":["key","value"]},"description":"Webhook headers to send with the post-call analysis data"},"webhookUrl":{"type":"string","format":"uri","description":"Webhook URL to send post-call analysis data to"},"webhookUseProtectedValues":{"type":"boolean","description":"When the agent protects sensitive data: send the REAL values (ΑΦΜ, ΑΜΚΑ, IBAN, …) to this webhook instead of the placeholders. Off by default; every send is audited. Only members who may reveal sensitive data can turn it on."},"analysisSmsConfig":{"type":"object","properties":{"sendSmsCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"smsPromptEvaluation":{"type":"string","description":"Prompt to evaluate if sms should be sent"},"smsMessage":{"type":"string","description":"Custom sms message to send"},"minimumDuration":{"type":"number","description":"Minimum duration in minutes to send sms"},"sendSmsFromCallerId":{"type":"boolean","description":"Whether to send the SMS using the caller ID (company phone number) that made the call as the sender"}},"required":["sendSmsCondition"],"description":"Configuration for sms content"},"telegramChats":{"type":"array","items":{"type":"string"},"description":"Telegram chat ids that receive the post-call alert. Ids come from the reachable-chat registry (GET /telegram/chats) — a bot may only message a chat that contacted it first, so arbitrary ids cannot be typed in."},"analysisTelegramConfig":{"type":"object","properties":{"sendTelegramCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"telegramPromptEvaluation":{"type":"string","description":"Prompt to evaluate if a Telegram message should be sent (and, with evaluate_condition_and_recipients, which chats)"},"telegramMessage":{"type":"string","description":"Custom Telegram message to send"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds before a Telegram alert is sent"}},"required":["sendTelegramCondition"],"description":"Configuration for the Telegram alert"},"viberChannelIds":{"type":"array","items":{"type":"string"},"description":"Connected Viber Channels (ids from the Viber Channels list) that receive the post-call alert"},"analysisViberChannelConfig":{"type":"object","properties":{"sendViberChannelCondition":{"type":"string","enum":["always","evaluate_condition","never"]},"viberChannelPromptEvaluation":{"type":"string","description":"Prompt to evaluate whether the Viber Channel alert should be posted"},"viberChannelMessage":{"type":"string","description":"Custom Viber Channel message (defaults to the call summary). Takes {{placeholders}}: any analysis property ({{client_name}}), {{summary}}, {{analysis_fields}} (every analysis property as \"Label: value\"), {{phone_number}}"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds before a Viber Channel alert is posted"}},"required":["sendViberChannelCondition"],"description":"Configuration for the Viber Channel alert"},"analysisEmailConfig":{"type":"object","properties":{"dailyDigest":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Send one summary email a day instead of one per call. With a condition prompt, calls that pass it are still emailed at once (urgent); the rest go in the summary."},"alsoEachCall":{"type":"boolean","description":"Also send the normal email after each call, on top of the daily summary. Default false."},"sendTime":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Local time (company timezone) to send the summary, HH:mm. Default 20:00. It covers the 24 hours before."},"lastSentAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["enabled"],"description":"Daily summary email instead of one email per call"},"includeInEmail":{"type":"object","properties":{"callUrl":{"type":"boolean","description":"Whether to include call URL in email"},"summary":{"type":"boolean","description":"Whether to include call summary in email"},"analysisProperties":{"type":"boolean","description":"Whether to include analyzed properties in email"},"dynamicVariables":{"type":"boolean","description":"Whether to include collected / dynamic variables (e.g. widget form fields) in email"},"recording":{"type":"boolean","description":"Whether to include call recording in email"},"transcription":{"type":"boolean","description":"Whether to include call transcription in email"}},"description":"Configuration for email content"},"sendEmailCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"emailPromptEvaluation":{"type":"string","description":"Prompt to evaluate if email should be sent"},"emailSubject":{"type":"string","description":"Custom email subject to send"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds to send email (voice / websocket calls)"},"minimumVisitorMessages":{"type":"integer","minimum":0,"description":"Minimum visitor (Contact/User) messages required to send email for chat / message sessions"}},"required":["sendEmailCondition"],"description":"Configuration for email content"},"excludePhoneNumbers":{"type":"array","items":{"type":"string"},"description":"Caller phone numbers excluded from post-call processing. This suppresses the whole post-call pipeline for that number, not just the notification: no summary is generated, and because caller memory is built from stored summaries, an excluded number also loses memory of its previous calls. Use it for internal test lines, never for a customer you still want remembered."},"evaluationConfig":{"type":"object","properties":{"issuesEnabled":{"type":"boolean","description":"Run the QA/issue lens (defaults on)"},"opportunitiesEnabled":{"type":"boolean","description":"Run the opportunity-mining lens (defaults off; sellable)"},"audioAnalysisEnabled":{"type":"boolean","description":"Re-transcribe the recording for WER and flag awkward pauses (defaults on)"},"errorAlertsEnabled":{"type":"boolean","description":"Email Voice Logica (alerts@) when a call has session errors — never the customer (defaults on)"},"customFocus":{"type":"string","maxLength":2000,"nullable":true,"description":"Free-text \"what matters most\" steering for the judge"},"customCriteria":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"maxItems":5,"description":"Named checks the judge evaluates"},"judgeModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Plan-gated client choice of evaluation model; falls back to the admin A/B pool"},"remediation":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow the evaluator to act post-call (alert business + VL admin for risky/unfixable misses)"},"autoSendToCustomer":{"type":"boolean","description":"Permit auto-sending the drafted follow-up to the caller for SAFE misses (hybrid auto-action)"},"mode":{"type":"string","enum":["alert","managed_agent"],"description":"\"alert\" = detect+notify (+ safe auto-message); \"managed_agent\" = a guard-railed agent re-runs the missed tools using the live toolset, then alerts for what it could not do"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Per-agent override for the remediation agent's primary model (plan-gated)"},"escalationModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Per-agent override for the smarter model the remediation agent escalates to (plan-gated)"}},"description":"Post-call remediation policy — hybrid: safe auto-actions + human alerts for risky"}},"description":"Admin-only post-call evaluation configuration"}},"description":"Configuration for post-call analysis and reporting","example":{"analysisPrompt":"Analyze this call for customer satisfaction and key points discussed.","summaryPrompt":"Provide a concise summary of this call.","emails":["analyst@company.com"],"analysisSmsConfig":{"sendSmsCondition":"always","smsPromptEvaluation":"","smsMessage":"{{phone_number}} {{viewUrl}}","minimumDuration":10,"sendSmsFromCallerId":false},"analysisEmailConfig":{"sendEmailCondition":"always","emailPromptEvaluation":"","emailSubject":"Voice Logica AI- Call analysis: {{caller}} {{date}}","includeInEmail":{"callUrl":true,"summary":true,"analysisProperties":true,"dynamicVariables":true,"recording":true,"transcription":true},"minimumDuration":10,"minimumVisitorMessages":1}}},"sendDmtf":{"type":"boolean","description":"Whether to send DTMF tones during the call (will be active for 40 seconds)"},"dtmfTimeout":{"type":"number","minimum":1,"maximum":60,"description":"Timeout for DTMF input in seconds (1-60 seconds)"},"dtmfKeyToTrigger":{"type":"string","enum":["dtmf-timeout","#","*"],"description":"Keys to trigger the workflow"},"secondsRingingUntilAnswer":{"type":"number","minimum":1,"maximum":60,"description":"Number of seconds to ring before considering the call unanswered (1-60 seconds)"},"volumeThreshold":{"type":"number","minimum":0,"maximum":1,"description":"Audio volume threshold for detecting speech (0.0 to 1.0)"},"saveRecording":{"type":"boolean","description":"Whether to save call recordings"},"saveRecordingGoogleDrive":{"type":"boolean","description":"Whether to save call recordings to Google Drive"},"topNknowledgeQuestionsInPrompt":{"type":"number","minimum":1,"maximum":20,"description":"DEPRECATED — not read by the prompt path; use nKnowledgeFilesQuery"},"nKnowledgeFilesQuery":{"type":"number","minimum":1,"maximum":10,"description":"Number of knowledge files to query for context (max 10)"},"selectiveKnowledgeLookup":{"type":"boolean","description":"When enabled, the AI uses a tool to selectively query specific knowledge files instead of searching all files on every message"},"generateKnowledgeFromTransferredCalls":{"type":"boolean","description":"When enabled, transferred calls are analysed post-transfer and any valuable Q&A insights are added to a private per-agent knowledge file, which is then loaded automatically on future calls."},"recordUnansweredQuestions":{"type":"boolean","description":"When enabled, every finished call is analysed for questions the agent could not answer. Each is stored on the agent’s private knowledge file with no answer and a count of how many calls have asked it, so the gaps can be answered in order of demand. These entries are never retrievable until someone writes the answer."},"unansweredQuestionTargets":{"type":"array","items":{"type":"string","enum":["agent","company"]},"description":"Where captured unanswered questions are stored. 'agent' keeps them on this agent's own file; 'company' puts them on a shared file every agent in the company reads. Select both to have each question routed to one or the other. Defaults to ['agent']."},"unansweredRoutingPrompt":{"type":"string","maxLength":1000,"description":"Only used when BOTH targets are selected: your own rule for which questions belong to the company file and which to this agent. Leave empty to use the default — business-wide facts go to the company, anything tied to what this agent handles stays with the agent."},"maxTimeMemory":{"type":"number","description":"Maximum time in seconds to keep conversation context in memory"},"maxInteractionsMemory":{"type":"number","minimum":0,"maximum":20,"description":"Maximum number of interactions to keep in conversation memory (max 20)"},"droppedCallResumeSeconds":{"type":"number","minimum":0,"maximum":86400,"description":"How long a returning caller or chat visitor (same number / same email) gets the LAST session's messages and AI dialogue on the new call. Memory must be on. The previous session's summary is not injected — the full last conversation is already there. Defaults to 600 (10 minutes). Max 86400 (1 day). Set 0 to always start fresh."},"droppedCallResumeMaxTurns":{"type":"number","minimum":1,"maximum":40,"description":"Optional cap on how many trailing spoken turns of the dropped call to carry over. Leave unset — the default — to carry the ENTIRE conversation, which is what keeps resolved data such as product codes and the identified customer available so the caller is never asked for them twice. Only set this if chained resumes (a caller dropping repeatedly on a bad line) grow the context too far."},"transferType":{"type":"string","enum":["warm","cold"],"description":"Type of call transfer: warm (with context) or cold (without context)"},"transferHoldSoundFileId":{"type":"string","description":"The custom sound to play when the call is transferred"},"transferHoldSound":{"type":"string","enum":["none","coffee_shop","call_center","office","soft_piano","lounge","waiting_room","custom"],"description":"The sounds to play when the call is transferred"},"transferSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Master switch for the agent's transfer capability. When false the AI is not given any transfer tool (forward_call / connect_dynamically) and the available-destinations prompt block is suppressed — but every other field on this object is preserved so the admin can re-enable it without losing config. Treated as true when undefined, for backward compatibility with agents created before this flag existed."},"transferMode":{"type":"string","enum":["blind","warm","attended"],"description":"Transfer mode: blind (immediate REFER), warm (consult + media merge), attended (SIP hold + consult + REFER/Replaces)."},"blindTransfer":{"type":"boolean","description":"Deprecated — use transferMode. Kept for legacy read compat only."},"announceTransferReason":{"type":"boolean","description":"Whether to announce the transfer reason to the person we are transferring the call to."},"transferCallBasedOnPromptInstructions":{"type":"boolean","description":"Whether to dynamically generate the transfer based on the prompt instructions."},"promptForTransferReason":{"type":"string","description":"The prompt to use when dynamically generating the transfer reason."},"analyzeTransferredCall":{"type":"boolean","description":"Whether to analyze the transferred call."},"blockTransferWhenCompanyIsClosed":{"type":"boolean","description":"Whether to block the transfer when the company is closed."},"agentIdToAnalyzeTransferredCall":{"type":"string","description":"The agent ID to analyze the transferred call."},"showCallerId":{"type":"boolean","description":"Whether to show the original caller ID to the person we are transferring the call to Or the current phone number."},"secondsToWaitForCallerToAnswer":{"type":"number","minimum":0,"maximum":60,"description":"The number of seconds to wait for the caller to answer the call."},"availableTransferDestinations":{"type":"array","items":{"type":"object","properties":{"destinationType":{"type":"string","enum":["UserEndpoint","UserGroup","External","Agent"],"description":"Kind of destination — UserEndpoint, UserGroup, External, or Agent."},"destinationId":{"type":"string","minLength":1,"maxLength":100,"description":"Target id (UserEndpoint id, UserGroup id, Agent id) or for External the phone number to dial."},"mode":{"type":"string","enum":["inherit","refer","attended"],"description":"Per-destination dispatch override: `refer` (blind, send SIP REFER), `attended` (place outbound INVITE, bridge on pickup), or `inherit` (use the agent-level blindTransfer flag). Omitted is treated as `inherit`. Internal AGENT destinations ignore this field — they always go through the agent-handoff path once it ships."},"reasonToConnect":{"type":"string","maxLength":500,"description":"When to connect the caller to this destination (e.g. \"when they ask for Dimitris\"). Injected into the live-call transfer catalog."}},"required":["destinationType","destinationId"],"description":"Whitelisted transfer destination available to this agent."},"maxItems":200,"description":"Explicit whitelist of destinations this agent may transfer to. Ignored when allowAllAvailableDestinations is true."},"allowAllAvailableDestinations":{"type":"boolean","description":"When true the agent may transfer a phone call to any enabled UserEndpoint or UserGroup (ringing that user's devices when they have SIP / app / mobile). Chat handoff uses company users. When false, only entries in availableTransferDestinations are offered."},"transferToExternalNumbers":{"type":"boolean","description":"When true the agent may transfer to external phone numbers."},"transferTimeLimitEnabled":{"type":"boolean","description":"Enable automatic transfer after the call reaches the configured time limit."},"transferTimeLimitInSeconds":{"type":"number","minimum":1,"description":"Call duration in seconds after which the agent automatically transfers the call (e.g. 120 for 2 minutes)."},"transferTimeLimitPrompt":{"type":"string","description":"Routing instructions for the automatic time-limit transfer: the destination (phone number, extension or agent ID) and what to tell the caller. Used with connect_dynamically when the time limit is reached."},"maxTransferAttemptsPerCall":{"type":"integer","minimum":1,"maximum":20,"nullable":true,"description":"Opt-in cap on transfer attempts in one call. Once reached, further transfers are refused and the agent takes a message. Unset = unlimited."}},"description":"Configuration for transfer settings","example":{"enabled":true,"announceTransferReason":false,"analyzeTransferredCall":false,"agentIdToAnalyzeTransferredCall":"","transferCallBasedOnPromptInstructions":false,"promptForTransferReason":"Forward to 100 for accounting. For sales, forward to 101. For support, forward to 102.","transferMode":"warm","showCallerId":false,"secondsToWaitForCallerToAnswer":40,"allowAllAvailableDestinations":false,"availableTransferDestinations":[],"transferToExternalNumbers":true}},"enableCallBackAtRequestedTime":{"type":"boolean","description":"Whether to enable callback functionality when users request to be called back at a later date/time"},"callBackIfCallDropsPrompt":{"type":"string","description":"Custom prompt to use when initiating a callback if the call drops"},"skroutzSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether Skroutz is enabled"},"topNSkroutzProductsInPrompt":{"type":"number","description":"Number of Skroutz products to include in the prompt"},"nSkroutzProductsQuery":{"type":"number","description":"Number of Skroutz products to query"},"minProductCodeLength":{"type":"integer","minimum":1,"maximum":20,"description":"Minimum normalized digit length for an utterance to be treated as a product code in the autonomous Skroutz lookup. Defaults to 4 when unset."},"webhookUrl":{"type":"string","format":"uri","description":"Webhook URL to send Skroutz products to"},"webhookHeaders":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The key of the webhook header"},"value":{"type":"string","description":"The value of the webhook header"}},"required":["key","value"]},"description":"Webhook headers to send with the Skroutz products data"}},"required":["enabled","topNSkroutzProductsInPrompt","nSkroutzProductsQuery"],"description":"Configuration for Skroutz settings","example":{"enabled":true,"topNSkroutzProductsInPrompt":3,"nSkroutzProductsQuery":5,"webhookUrl":"https://webhook.site/123e4567-e89b-12d3-a456-426614174000","webhookHeaders":[{"key":"Content-Type","value":"application/json"}]}},"voiceMailPhoneNumber":{"type":"string","description":"Phone numbers to attach voice mail to"},"voipConnections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for the VoIP connection"},"dial":{"type":"number","description":"Dial number or extension assigned to this connection"},"reason":{"type":"string","description":"Internal notes or purpose description for this connection"},"connectionType":{"type":"string","enum":["User","External","Agent"],"description":"Type of destination: 'Agent', 'User', or 'External'"},"agentId":{"type":"string","description":"ID of the AI agent this connection routes to (only for Agent type connections)"},"sipDomain":{"type":"string","description":"SIP domain for this connection."},"phone":{"type":"string","description":"External phone number this connection forwards to (only for External type connections)"},"userId":{"type":"string","description":"ID of the user this connection routes to (only for User type connections)"},"start":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily start time when this connection becomes available"},"end":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily end time when this connection becomes unavailable"},"canAgentTranscribe":{"type":"boolean","description":"Whether the agent can transcribe calls to this connection"},"canAgentRecord":{"type":"boolean","description":"Whether the agent can record calls to this connection"},"canAgentAnalyze":{"type":"boolean","description":"Whether the agent can analyze calls to this connection"},"canAgentSpeakWhenAsked":{"type":"boolean","description":"Whether the agent can speak when asked during calls to this connection"},"allDay":{"type":"boolean","description":"Whether this connection is available 24/7 (ignores start/end times when true)"},"syncWithGoogle":{"type":"boolean","description":"Whether availability is synchronized with Google Calendar"},"syncWithGoogleStatus":{"type":"string","enum":["open","closed"],"description":"Google Calendar sync mode: 'open' for free time availability, 'closed' for busy time unavailability"},"messageToUser":{"type":"string","description":"Custom message or announcement played before transferring calls to this connection"},"aiGeneratedMessage":{"type":"boolean","description":"Whether transfer messages are dynamically generated by AI based on call context"},"transcription_enabled":{"type":"boolean","description":"Whether real-time transcription is enabled for calls on this connection"},"agent":{"type":"object","properties":{"id":{"type":"string","description":"Agent's unique identifier"},"name":{"type":"string","description":"Agent's display name"}},"description":"Full agent details when connectionType is 'Agent' (populated from agents database)"},"user":{"type":"object","properties":{"id":{"type":"string","description":"User's unique identifier"},"name":{"type":"string","description":"User's full name"},"email":{"type":"string","description":"User's email address"},"defaultCompanyId":{"type":"string","description":"User's default company ID"},"picture":{"type":"string","description":"User's profile picture URL"},"emailVerified":{"type":"boolean","description":"Whether the user's email has been verified"},"lastConnectedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"isConnected":{"type":"boolean","description":"Whether the user is currently online/connected"}},"description":"Full user details when connectionType is 'User' (populated from users database)"},"username":{"type":"string","description":"SIP username for direct authentication (advanced configurations only)"},"password":{"type":"string","description":"SIP password for direct authentication (advanced configurations only)"},"ipAddress":{"type":"array","items":{"type":"string"},"description":"Whitelist of allowed IP addresses for security restrictions"},"extensionRegistrationIds":{"type":"array","items":{"type":"string"},"description":"IDs of the extension registrations linked with this connection"},"extensionRegistrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"voipConnectionId":{"type":"string","description":"ID of the VoIP Connection that owns this extension (legacy)"},"phoneExtensionId":{"type":"string","description":"ID of the Phone Extension that owns this extension"},"username":{"type":"string","description":"SIP username/extension that is registered"},"contactUri":{"type":"string","description":"Full SIP Contact URI for routing calls to this extension"},"remoteAddress":{"type":"string","description":"IP address of the registered SIP client"},"clientIp":{"type":"string","description":"Public client IP when known"},"remotePort":{"type":"number","description":"Port number of the registered SIP client"},"transport":{"type":"string","enum":["udp","tcp","tls","websocket"],"description":"Transport protocol: 'udp', 'tcp', 'tls' for SIP; 'websocket' for app clients"},"registeredAt":{"type":"string","format":"date-time","description":"Timestamp when this extension was registered (ISO 8601 format)"},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp when this registration will expire (ISO 8601 format)"},"expires":{"type":"number","description":"Number of seconds until expiration (decreases over time)"},"userAgent":{"type":"string","description":"SIP User-Agent identifying the client software"},"callId":{"type":"string","description":"SIP Call-ID from the REGISTER request"},"bindingSource":{"type":"string","enum":["register","invite"],"description":"'register' = the phone sent a REGISTER and can be rung; 'invite' = stand-in written from an authenticated outbound INVITE, used only for that call's in-dialog requests and never for ringing the phone"},"consecutiveInviteFailures":{"type":"integer","description":"Liveness skip-list counter. Bumped on 5xx/timeout from fork-INVITEs, reset on 200 OK. When ≥3 and `lastInviteFailureAt` is within the last 5 minutes, the registration is skipped by routing."},"lastInviteFailureAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"voipConnection":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"agentId":{"type":"string"},"userId":{"type":"string"},"connectionType":{"type":"string"}},"description":"Legacy VoIP Connection — only populated for pre-migration rows."},"userEndpoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"number":{"type":"string"},"status":{"type":"string"}},"description":"Populated UserEndpoint this registration belongs to."}},"required":["id","createdAt","active","createdBy","createdById","companyId","username","contactUri","remoteAddress","remotePort","transport","registeredAt","expiresAt","expires"],"description":"Extension registration details including contact information and expiration status","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","voipConnectionId":"507f1f77bcf86cd799439011","username":"1001","contactUri":"sip:1001@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300,"userAgent":"Zoiper 5.5.10","callId":"abc123@192.168.1.100","voipConnection":{"id":"507f1f77bcf86cd799439011","name":"Customer Support","agentId":"507f1f77bcf86cd799439012","connectionType":"Agent"}}},"description":"Active SIP device registrations for this connection (virtual populate from ExtensionRegistration collection, filtered to show only non-expired registrations). Each entry represents a physical device (phone, softphone, etc.) currently registered with this extension."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","connectionType","syncWithGoogle","syncWithGoogleStatus"],"description":"Response schema for VoIP connection including complete configuration, company metadata, and linked agent or user details","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support","dial":1,"reason":"General customer support inquiries","connectionType":"Agent","agentId":"507f1f77bcf86cd799439011","phone":"+1234567890","userId":"507f1f77bcf86cd799439012","start":{"hours":9,"minutes":0},"end":{"hours":17,"minutes":0},"canAgentTranscribe":true,"canAgentRecord":true,"canAgentAnalyze":true,"canAgentSpeakWhenAsked":false,"allDay":false,"syncWithGoogle":true,"syncWithGoogleStatus":"open","messageToUser":"Welcome to customer support!","aiGeneratedMessage":false,"agent":{"id":"507f1f77bcf86cd799439011","name":"John Doe","email":"john@example.com"},"user":{"id":"507f1f77bcf86cd799439012","name":"Jane Smith","email":"jane@example.com"},"registrations":[{"id":"507f1f77bcf86cd799439013","username":"customer_support","contactUri":"sip:customer_support@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300}]}},"description":"@deprecated Legacy populated VoIP connections. Use transferSettings.availableTransferDestinations + SipTrunk / UserEndpoint / UserGroup."},"adaptationPhraseSets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the adaptation phrase set"},"description":{"type":"string","nullable":true,"description":"The description of the phrase set"},"phraseSetId":{"type":"string","description":"The phrase set id"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Locale code"},"phrases":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Phrase value"},"boost":{"type":"number","minimum":1,"maximum":20,"description":"Boost value (1-20)"}},"required":["value","boost"]},"nullable":true,"description":"The phrases of the set"},"boost":{"type":"number","minimum":1,"maximum":20,"nullable":true,"description":"Boost value (1-20)"},"apiEnabled":{"type":"boolean","nullable":true,"description":"Whether API is enabled"},"apiUrl":{"type":"string","nullable":true,"description":"API URL"},"apiKey":{"type":"string","nullable":true,"description":"API key"},"lastPulledAt":{"type":"string","format":"date-time","description":"The last pulled at date of the phrase set","nullable":true}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","phraseSetId","language"],"description":"Response schema for adaptation phrase set including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Greetings","description":"Common customer greeting phrases","phraseSetId":"greetings_001","language":"en-US","phrases":[{"value":"Hello","boost":5},{"value":"Hi there","boost":3},{"value":"Good morning","boost":4}],"boost":5,"apiEnabled":true,"apiUrl":"https://api.example.com/phrases","apiKey":"api_key_123","lastPulledAt":"2024-01-15T10:30:00.000Z"}},"description":"List of adaptation phrase sets for improving transcription accuracy"},"afterCallFunctionCalls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"description":{"type":"string","description":"Description of the function call"},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"description":"Condition blocks for execution logic"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"],"description":"When to execute the function call"},"confirmationMethodConfig":{"type":"object","properties":{"confirmationRequired":{"type":"boolean"},"secondsToWait":{"type":"number","minimum":10},"wordMatch":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"array","items":{"type":"string"}}},"required":["required","value"]},"aiGuidance":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]},"dtmf":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]}},"required":["confirmationRequired","secondsToWait"],"description":"Configuration for user confirmation"},"messageToUserBeforeAction":{"type":"string","description":"Message to show user before executing the action"},"messageToUserAfterAction":{"type":"string","description":"Message to show user after executing the action"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"functions":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"number"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"]},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"action":{"type":"string","enum":["emailConfig","apiCall","sendSms","createEvent","sendPhoneCall","forwardCall","googleSearch","sendMessage","endCallConfig","googleSheetConfig","googleDocConfig","llmCompletion","hubspotConfig","aiResponse","transferCall","afmSearch","codeExecution"]},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}},"forwardCallConfig":{"type":"object","properties":{"voipConnectionId":{"type":"string","minLength":24}},"required":["voipConnectionId"],"example":{"voipConnectionId":"507f1f77bcf86cd799439011"}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}},"sendMessageConfig":{"type":"object","properties":{"messageToUser":{"type":"string","minLength":1}},"required":["messageToUser"],"example":{"messageToUser":"Your order has been shipped!"}},"endCallConfig":{"type":"object","properties":{"reason":{"type":"string","minLength":2}},"required":["reason"],"example":{"reason":"User requested to end the call"}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["sequence","action"]},"description":"Internal actions to execute"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","parameters","functions"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Send Email Notification","description":"Sends an email notification to the user","conditionBlocks":[],"executeAt":"immediate","messageToUserBeforeAction":"I will send you an email notification.","messageToUserAfterAction":"Email notification sent successfully!","fileIds":["file_123","file_456"],"files":[{"id":"file_123","filename":"document.pdf","s3Id":"s3-file-123","displayUrl":"https://example.com/files/document.pdf"}],"parameters":[{"id":"param_1","name":"Email Address","description":"Recipient email address","type":"string","required":true}],"functions":[{"id":"func_1","name":"Send Email","type":"email","config":{"to":"{{emailAddress}}","subject":"Notification","body":"This is a notification email."}}]}},"description":"List of function calls that are executed after the call ends"},"transferHoldSoundFile":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}}},"description":"Response schema for agent phone settings including related data","example":{"model":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0.5,"maxCompletionTokens":500},"systemPrompt":"You are a helpful customer support assistant.","voiceConfig":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","speed":1,"backgroundSound":"none","stability":0.5,"similarity":0.5},"voipConnections":[{"id":"voip-123","name":"Main Office Line","provider":"Twilio","phoneNumber":"+1234567890"}],"adaptationPhraseSets":[{"id":"aps-123","name":"Customer Service Phrases","phrases":["customer service","support","help"]}],"transcriptionConfig":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"adaptationPhraseSets":[{"id":"aps-123","name":"Customer Service Phrases","phrases":["customer service","support","help"]}]},"skroutzSettings":{"enabled":true,"topNSkroutzProductsInPrompt":3,"nSkroutzProductsQuery":5,"webhookUrl":"https://webhook.site/123e4567-e89b-12d3-a456-426614174000","webhookHeaders":[{"key":"Content-Type","value":"application/json"}]},"transferSettings":{"announceTransferReason":false,"transferCallBasedOnPromptInstructions":false,"promptForTransferReason":"Forward to 100 for accounting. For sales, forward to 101. For support, forward to 102.","transferMode":"warm","showCallerId":false},"transferHoldSound":"custom","transferHoldSoundFileId":"file-123","transferHoldSoundFile":{"id":"file-123","name":"Human Laugh 1","contentType":"audio/wav","size":1024000}}},"appointmentSettings":{"type":"object","properties":{"enabled":{"type":"boolean","nullable":true,"description":"Whether the appointment settings are enabled"},"isOnline":{"type":"boolean","nullable":true,"description":"Whether the appointment settings are online"},"services":{"type":"array","items":{"type":"object","properties":{"serviceKey":{"type":"string","description":"Stable internal identity for this service; calendars reference it so renames are safe"},"name":{"type":"string","description":"The name of the service"},"description":{"type":"string","description":"The description of the service"},"duration":{"type":"number","description":"The duration of the service in minutes"},"allowedMeetingTypes":{"type":"array","items":{"type":"string","enum":["online","phone","client-location","office-location"]},"description":"How this service can be delivered. `online`: video (e.g. Google Meet). `phone`: voice call only. `client-location`: at an address the caller provides (use location lookup tool). `office-location`: at the provider’s office; set `officeAddress` on the service (or on the matching working-hours row). Omit or `[]` when not set. Used when a working-hours row is `not-set` to decide Meet / location / office."},"officeAddress":{"type":"string","description":"Provider’s office address when `office-location` is in allowedMeetingTypes. Shown to the user for office bookings; working-hours rows may override with their own officeAddress."},"colorId":{"oneOf":[{"type":"string","enum":["1","2","3","4","5","6","7","8","9","10","11"]},{"type":"string","enum":[""]}],"description":"Google Calendar event color ID as a string, \"1\"–\"11\". Omit or \"\" for the default calendar color."}},"required":["name","description","duration","allowedMeetingTypes","colorId"]},"description":"The services of the appointment settings"},"concurrentBookings":{"type":"number","description":"The number of concurrent bookings"},"useGlobalConcurrentBookings":{"type":"string","enum":["not-set","true"],"description":"Use the global concurrentBookings for all calendars (true) or per-calendar concurrentBookings (not-set)"},"allDayBookings":{"type":"boolean","description":"Whether the appointment settings are enabled for all day bookings"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"The parameters of the appointment settings"},"canSameClientBookMultipleAppointmentsInFuture":{"type":"string","enum":["not-set","true","false"],"description":"Whether the same client can book multiple appointments in the future"},"canClientCancelAppointmentWithAi":{"type":"string","enum":["not-set","true","false"],"description":"Whether the client can cancel the appointment with AI"},"futureDaysAllowToBook":{"type":"string","enum":["not-set","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","21","30","45","60","90","120","180","365"],"description":"The number of days in advance that the appointment can be booked"},"sendConfirmation":{"type":"boolean","description":"Whether the confirmation is sent"},"confirmationPrompt":{"type":"string","description":"The confirmation prompt for the appointment"},"confirmationSmsSenderId":{"type":"string","description":"Sender shown on the confirmation SMS (a verified Yuboto sender ID). Empty falls back to the send_sms tool sender, then to VoiceLogica."},"appointmentDescriptionContents":{"type":"array","items":{"type":"string","enum":["questions","services","notes","location","call_url","summary","recording_url"]},"description":"Blocks included in the calendar event description: questions, services, notes, location, call_url, summary, recording_url. Omit for the default set (questions, notes, location, summary)"},"calendars":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the calendar"},"calendarKey":{"type":"string","description":"Stable internal identity for this calendar; allows several calendars to share one Google calendarId"},"calendarId":{"type":"string","description":"The provider calendar ID this calendar reads/writes (Google or Azure/Outlook; may be shared across calendars)"},"provider":{"type":"string","enum":["google","azure"],"description":"Calendar backend for this calendar: 'google' or 'azure' (Microsoft 365). Omit to use the company default."},"description":{"type":"string","description":"The description of the calendar"},"serviceKeys":{"type":"array","items":{"type":"string"},"description":"The serviceKeys of the services of the calendar"},"serviceNames":{"type":"array","items":{"type":"string"},"description":"Legacy name-based service reference; kept for calendars saved before serviceKeys existed"},"futureDaysAllowToBook":{"type":"number","minimum":1,"maximum":365,"description":"The number of days in advance that the appointment can be booked"},"concurrentBookings":{"type":"number","description":"Per-calendar concurrent bookings; omit or 0 to inherit the agent-level default"},"countAllCalendarEventsForConcurrency":{"type":"boolean","description":"Advanced: count every Voice Logica booking on the same Google calendar toward concurrency, whichever logical calendar made it (ignore service names). Use it when several logical calendars share one Google calendar. Default is service-name concurrency."},"restrictions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["max_per_hour","max_per_day","max_per_week","min_gap_minutes","min_notice_hours","min_notice_business_days","min_notice_calendar_days"],"description":"max_per_hour | max_per_day | max_per_week | min_gap_minutes (minimum free gap between appointments) | min_notice_hours (earliest bookable slot is this many hours from now) | min_notice_business_days (this many full company operating days of notice after today; today never counts; every calendar uses that same date, falling back to the union of calendar working days when the company has no hours) | min_notice_calendar_days (same, counting every day including closed ones)"},"limit":{"type":"number","minimum":1,"description":"Cap for max_* types, gap in minutes for min_gap_minutes, lead-time hours for min_notice_hours, or number of days for the min_notice_*_days types (days of notice after today, so 2 on a Wednesday makes Friday the earliest bookable day)"},"serviceNames":{"type":"array","items":{"type":"string"},"description":"When set, restriction applies only to these service names; omit for all services on the calendar"},"enabled":{"type":"boolean","description":"When false, restriction is ignored. Default true."}},"required":["type","limit"]},"description":"Optional booking restrictions: max per hour/day/week, minimum gap between appointments, or minimum notice (hours or operating days) before the start"},"appointmentTitle":{"type":"string","description":"The title of the appointment"},"appointmentNotes":{"type":"string","description":"The notes of the appointment"},"canClientCancelAppointmentWithAi":{"type":"boolean","description":"Whether the client can cancel the appointment with AI"},"canSameClientBookMultipleAppointmentsInFuture":{"type":"boolean","description":"Whether the same client can book multiple appointments in the future"},"workingHours":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Day of the week"},"meetingType":{"type":"string","enum":["online","phone","client-location","office-location","not-set"],"default":"not-set","description":"Modality for this time window: online (Meet), phone, client-location, or office-location. `not-set` = inherit Meet / location / office behaviour from each booked service’s allowedMeetingTypes."},"officeAddress":{"type":"string","description":"Physical office for this window when it includes office-location; overrides service.officeAddress if both are set."},"startTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"Start time for bookings in this window (local calendar day)"},"endTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"End time for bookings in this window (local calendar day)"}},"required":["day","startTime","endTime"]},"description":"Per-calendar bookable windows. Same `day` may appear multiple times for split schedules (e.g. Fri morning office, Fri afternoon client site)."}},"required":["name","calendarId","description","serviceNames","futureDaysAllowToBook"]},"description":"Array of calendar IDs that the appointment settings are enabled for"},"useGlobalWorkingHours":{"type":"string","enum":["not-set","true"],"description":"Use global working hours for all calendars (true) or per-calendar working hours (not-set)"},"workingHours":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Day of the week"},"meetingType":{"type":"string","enum":["online","phone","client-location","office-location","not-set"],"default":"not-set","description":"Modality for this time window: online (Meet), phone, client-location, or office-location. `not-set` = inherit Meet / location / office behaviour from each booked service’s allowedMeetingTypes."},"officeAddress":{"type":"string","description":"Physical office for this window when it includes office-location; overrides service.officeAddress if both are set."},"startTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"Start time for bookings in this window (local calendar day)"},"endTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"End time for bookings in this window (local calendar day)"}},"required":["day","startTime","endTime"]},"description":"Global bookable windows when useGlobalWorkingHours is true. Same weekday may repeat with different times and meetingType (e.g. Fri morning office, Fri afternoon client site)."},"reminderSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the reminder is enabled"},"daysBefore":{"type":"number","description":"The number of days before the appointment to send the reminder"},"time":{"type":"string","description":"The time of the day to send the reminder"},"type":{"type":"string","enum":["email","sms","phone"],"description":"The type of reminder"},"numberOfRetries":{"type":"number","description":"The number of retries for the reminder"},"sendFallbackSms":{"type":"boolean","description":"Whether the fallback SMS is sent"},"fallbackSms":{"type":"string","description":"The fallback SMS message for the appointment"}},"required":["enabled","daysBefore","time","type","numberOfRetries","sendFallbackSms","fallbackSms"],"description":"The reminder settings for the appointment"},"waitingListEnabled":{"type":"boolean","description":"Whether the waiting list is enabled"},"waitingListSettings":{"type":"object","properties":{"candidateDays":{"type":"number","minimum":1,"maximum":365,"description":"How far ahead to look for people to call about a freed slot. Defaults to 30 days; without it the search follows futureDaysAllowToBook, which can be a full year."},"callFromHour":{"type":"string","description":"Earliest local time to place a waiting-list call, HH:MM. Default 09:00."},"callToHour":{"type":"string","description":"Latest local time to place a waiting-list call, HH:MM. Default 20:00."}},"description":"Bounds on who the waiting list calls, and when"}},"required":["sendConfirmation"]},"widgetSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the embeddable widget is enabled for this agent"},"allowedDomains":{"type":"array","items":{"type":"string"},"description":"Hostnames allowed to embed this widget. Empty = allow all."},"allowWwwVariant":{"type":"boolean","description":"Also allow www. variant of each allowed domain"},"actionsRequireVerification":{"type":"boolean","description":"Unverified visitors get a questions-only agent: tools that send messages or touch external systems load only after email/mobile/Google verification"},"collectFields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$","description":"Dynamic variable key used in prompts as {{key}}"},"label":{"type":"string","minLength":1,"maxLength":120,"description":"Label shown to the visitor"},"placeholder":{"type":"string","maxLength":200},"type":{"type":"string","enum":["text","email","tel","number","location","files"],"description":"Input type"},"required":{"type":"boolean"}},"required":["key","label"]},"maxItems":20,"description":"Dynamic fields to ask visitors before starting (name, client_id, …). Email is widgetSettings.email."},"email":{"type":"object","properties":{"required":{"type":"boolean"},"validation":{"type":"boolean"}},"description":"Require a visitor email; optional 6-digit email validation"},"phone":{"type":"object","properties":{"required":{"type":"boolean"},"validation":{"type":"boolean"}},"description":"Require a visitor mobile; optional SMS code (Greece/Cyprus only)"},"feedback":{"type":"object","properties":{"mode":{"type":"string","enum":["none","end"]},"collectComment":{"type":"boolean"}},"description":"Legacy, always 'none'. The end-of-chat rating (Good/Bad + optional comment) is set on the evaluate_conversation tool, not here: update_agent_settings with section 'tools' and changes { name: 'evaluate_conversation', enabled: true, channels: ['widget'], collectComment: true }."},"interface":{"type":"object","properties":{"startsCollapsed":{"type":"boolean"},"languageDropdown":{"type":"boolean"},"enableMuting":{"type":"boolean"},"markdownAllowedDomains":{"type":"array","items":{"type":"string"},"description":"Hostnames whose links in agent replies are clickable, e.g. [\"example.com\", \"hihello.com\"]. Exact host match (plus www. when allowWwwVariantForMarkdown). Empty = no link is clickable; other links show struck through."},"allowWwwVariantForMarkdown":{"type":"boolean","description":"Also accept the www. variant of each markdownAllowedDomains entry. Default true."},"allowHttpLinks":{"type":"boolean","description":"Also allow plain http:// (not https) links on markdownAllowedDomains. Does not make any link clickable by itself."},"acceptFiles":{"type":"boolean"},"acceptLocation":{"type":"boolean"},"pageContext":{"type":"boolean","description":"Tell the agent which page the visitor is on (address without query string, title, description, main heading), at start and whenever they move to another page. Default false."},"inactivityMinutes":{"type":"number","minimum":1,"maximum":30}}},"avatar":{"type":"object","properties":{"type":{"type":"string","enum":["orb","link","image"]},"firstColor":{"type":"string"},"secondColor":{"type":"string"},"linkUrl":{"type":"string"},"imageUrl":{"type":"string"},"imageFileId":{"type":"string"}}},"terms":{"type":"object","properties":{"required":{"type":"boolean"},"termsText":{"type":"string"}}},"styling":{"type":"object","properties":{"variant":{"type":"string","enum":["tiny","compact","full"]},"placement":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left"]},"base":{"type":"string"},"baseHover":{"type":"string"},"baseActive":{"type":"string"},"baseBorder":{"type":"string"},"baseSubtle":{"type":"string"},"basePrimary":{"type":"string"},"baseError":{"type":"string"},"accent":{"type":"string"},"accentHover":{"type":"string"},"accentActive":{"type":"string"},"accentBorder":{"type":"string"},"accentSubtle":{"type":"string"},"accentPrimary":{"type":"string"},"overlayPadding":{"type":"number"},"buttonRadius":{"type":"number"},"inputRadius":{"type":"number"},"bubbleRadius":{"type":"number"},"sheetRadius":{"type":"number"},"compactSheetRadius":{"type":"number"},"dropdownSheetRadius":{"type":"number"},"syntaxTheme":{"type":"string","enum":["auto","light","dark"]},"offsetX":{"type":"number","minimum":0,"maximum":400,"description":"Desktop gap from the left/right edge in px (default: overlayPadding)"},"offsetY":{"type":"number","minimum":0,"maximum":400,"description":"Desktop gap from the top/bottom edge in px (default: overlayPadding)"},"mobileOffsetX":{"type":"number","minimum":0,"maximum":400,"description":"Phones (≤767px): gap from the left/right edge in px (default: the desktop gap)"},"mobileOffsetY":{"type":"number","minimum":0,"maximum":400,"description":"Phones (≤767px): gap from the top/bottom edge in px, e.g. 90 to clear a fixed \"Book now\" bar (default: the desktop gap)"},"mobilePlacement":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left"],"description":"Phones (≤767px): another corner than placement (default: placement)"}}},"text":{"type":"object","properties":{"main_label":{"type":"string"},"start_call":{"type":"string"},"start_chat":{"type":"string"},"new_call":{"type":"string"},"end_call":{"type":"string"},"end_chat":{"type":"string"},"mute_microphone":{"type":"string"},"change_language":{"type":"string"},"collapse":{"type":"string"},"expand":{"type":"string"},"copied":{"type":"string"},"accept_terms":{"type":"string"},"dismiss_terms":{"type":"string"},"collect_title":{"type":"string"},"collect_continue":{"type":"string"},"listening_status":{"type":"string"},"speaking_status":{"type":"string"},"connecting_status":{"type":"string"},"chatting_status":{"type":"string"},"input_label":{"type":"string"},"input_placeholder":{"type":"string"},"input_placeholder_text_only":{"type":"string"},"input_placeholder_new_conversation":{"type":"string"},"user_ended_conversation":{"type":"string"},"agent_ended_conversation":{"type":"string"},"conversation_id":{"type":"string"},"error_occurred":{"type":"string"},"copy_id":{"type":"string"},"initiate_feedback":{"type":"string"},"request_follow_up_feedback":{"type":"string"},"thanks_for_feedback":{"type":"string"},"thanks_for_feedback_details":{"type":"string"},"follow_up_feedback_placeholder":{"type":"string"},"submit":{"type":"string"},"go_back":{"type":"string"},"send_message":{"type":"string"},"text_mode":{"type":"string"},"voice_mode":{"type":"string"},"switched_to_text_mode":{"type":"string"},"switched_to_voice_mode":{"type":"string"},"copy":{"type":"string"},"download":{"type":"string"},"wrap":{"type":"string"},"agent_working":{"type":"string"},"agent_done":{"type":"string"},"agent_error":{"type":"string"},"attach_file":{"type":"string"},"remove_file":{"type":"string"},"file_upload_error":{"type":"string"},"file_type_unsupported":{"type":"string"},"file_too_large":{"type":"string"},"file_limit_reached":{"type":"string"},"share_location":{"type":"string"},"locating":{"type":"string"},"location_ready":{"type":"string"},"location_denied":{"type":"string"},"files_hint":{"type":"string"},"uploading_files":{"type":"string"},"typing_indicator":{"type":"string"},"start_chat_hint":{"type":"string"},"start_chat_hint_files":{"type":"string"},"start_call_hint":{"type":"string"},"preview_agent":{"type":"string"},"preview_visitor":{"type":"string"},"collect_hint_chat":{"type":"string"},"collect_hint_call":{"type":"string"},"terms_title":{"type":"string"},"try_again":{"type":"string"},"show_transcript":{"type":"string"},"hide_transcript":{"type":"string"},"unmute_microphone":{"type":"string"},"microphone_muted":{"type":"string"},"conversation_ended":{"type":"string"},"call_ended":{"type":"string"},"teammate_joined":{"type":"string"},"teammate_joined_hint":{"type":"string"},"team_member":{"type":"string"},"duration":{"type":"string"},"messages":{"type":"string"},"feedback_good":{"type":"string"},"feedback_bad":{"type":"string"}}},"shareablePage":{"type":"object","properties":{"description":{"type":"string"},"requireTerms":{"type":"boolean"}}},"pageNavigation":{"type":"object","properties":{"enabled":{"type":"boolean","description":"The widget AI may open pages of this website for the visitor (text chat only). Only the page's own site and allowedDomains; the visitor sees \"Taking you to …\" and can cancel. Default false."},"listedPagesOnly":{"type":"boolean","description":"When pages are listed, the AI may open only those addresses (any query string). Default true. Ignored while the list is empty."},"instructions":{"type":"string","maxLength":1000,"description":"Extra instructions for the AI about opening pages"},"pages":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","maxLength":500,"description":"The page: a path on the site (\"/el/crete\") or an absolute https address on it"},"name":{"type":"string","maxLength":120,"description":"What the page is, e.g. \"Hotels in Crete\""},"description":{"type":"string","maxLength":150,"description":"Optional: when to open it, e.g. \"all our Cretan hotels, filter by town\""}},"required":["url","name"]},"maxItems":200,"description":"Pages the AI can open, with a name and an optional description (import them from the sitemap in the app)"}},"description":"The AI opens pages of this website for the visitor (text chat only)"}}},"tools":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"name":{"type":"string","enum":["skip_turn","send_sms","send_email","eshop_integration","hubspot","zoho","salesforce","navigate_ivr","schedule_callback","detect_live_sentiment","detect_live_frustration","schedule_appointment","handle_silence","lock_on_speaker","galaxy_drugstore","galaxy_erp","soft1_erp","entersoft_one","odoo_erp","pylon_erp","sap_erp","splynx","shopify","woocommerce","opencart","magento","megasoft","gonnaorder","prestashop","airtable","jira","guesty","clickup","trello","dropbox","googleChat","zoho_crm","helpdesk","courier","outlook","detect_voice_mail","add_participant","make_call_private","pause_recording","request_data_erasure","send_info_page","capture_data_via_sms","compare_caller_to_branches","find_location_info","evaluate_conversation","extract_document","scrape_website","fleet_management","caller_verification","custom_api","webhotelier","hosthub","exelixis_smart"]},"prompt":{"type":"string"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"Play keyboard wait music while this tool runs mid-call"},"senderId":{"type":"string"},"mailboxId":{"type":"string"},"propertyCode":{"type":"string"},"url":{"type":"string","format":"uri"},"interval":{"type":"number","minimum":10,"maximum":10080},"vectorField":{"type":"string"},"aiEnabled":{"type":"boolean"},"keyOfId":{"type":"string","enum":["mpn","ean","sku","skroutzId","groupCode","none"]},"deltaCapable":{"type":"boolean"},"lastSyncAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastFullSyncAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"feedEtag":{"type":"string"},"feedLastModified":{"type":"string"},"timesFailed":{"type":"number"},"readContactProperties":{"type":"array","items":{"type":"string"}},"updateContactProperties":{"type":"array","items":{"type":"string"}},"createCallActivity":{"type":"boolean"},"nudgeIntervalSeconds":{"type":"number","minimum":0,"maximum":60},"timesToNudge":{"type":"number","minimum":1,"maximum":3},"actions":{"type":"array","items":{"type":"string","enum":["forward","hangup"]}},"allowMultipleSpeakers":{"type":"boolean"},"leaveMessage":{"type":"boolean"},"maxDurationSeconds":{"type":"number","minimum":5,"maximum":120},"words":{"type":"array","items":{"type":"string"}},"timeoutSeconds":{"type":"number","minimum":0,"maximum":10},"maxSkips":{"type":"integer","minimum":0,"maximum":20},"enabledOperations":{"type":"array","items":{"oneOf":[{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","check_item_availability","get_item_price","calculate_order","place_order","get_order_status","get_customer_history","get_customer_balance","get_customer_aging","get_customer_kartela_link","find_items_by_active_ingredient","get_invoice_pdf_links","get_next_route","get_customer_top_items","get_top_selling_items","get_customer_fin_info_per_drug_type"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_item_by_id","create_sales_doc","get_sales_doc_by_id"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_balance","get_customer_aging","get_customer_history","get_customer_orders","get_customer_top_items","get_top_selling_items","create_order","create_invoice","create_delivery_note","create_receipt","update_order","update_invoice","update_delivery_note","update_receipt","add_order_line","remove_order_line","adjust_order_quantity","set_order_transfer","log_call","create_meeting","create_task","search_activities","list_projects","create_project","list_project_actions","create_customer","add_customer_phone","remove_customer_phone","get_order_by_key","create_sales_doc","update_sales_doc","transmit_einvoice"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_purchase_history","get_customer_branches","get_customer_balance","add_order_line","remove_order_line","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_products","get_customer_orders","get_order","get_customer_balance","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_login","lookup_customer_by_name","link_caller_to_customer","get_customer_balance","get_services","get_invoices","get_online_status","create_ticket","set_customer_status"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_balance","get_customer_aging","run_public_query","run_ebs_service","create_sales_doc"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order","create_draft_order","sync_products_to_skroutz"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","create_order"]},{"type":"string","enum":["lookup_customer","check_availability","create_order","get_order","list_customer_orders"]},{"type":"string","enum":["get_contact","list_company_contacts","list_support_members","get_order","list_customer_orders","create_ticket","search_items","create_order","send_statement","get_balance"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_name","link_caller_to_customer","lookup_customer_by_afm","verify_customer","get_customer_by_code","get_customer_balance","search_products","get_product_by_code","list_shipping_methods","list_payment_methods","get_customer_orders","get_order_status","get_customer_purchases","list_offers","get_item_price","get_product_stock","get_alt_items","cancel_order","create_order"]},{"type":"string","enum":["search_catalog","get_offer","check_delivery_address","lookup_customer_by_phone","lookup_customer_by_name","link_caller_to_customer","get_customer_orders","list_time_slots","create_order","validate_location","get_order_status","create_payment_link","check_payment_status","create_reservation"]},{"type":"string","enum":["check_availability","search_bookings","get_reservation","get_property_info","create_booking","cancel_booking","get_rooms","get_rates","get_extras","get_availability_calendar","get_best_rate","search_offers","resend_confirmation","check_multi_property_availability","search_properties"]},{"type":"string","enum":["identify_caller","search_reservations","get_reservation","list_rentals","get_rental","check_availability"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_order_states","create_order","update_order_status"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_email","get_contact_by_id","lookup_contact_by_name","link_caller_to_contact"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","create_lead","add_note"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","link_caller_to_contact","get_contact_by_id","create_lead","log_call"]},{"type":"string","enum":["lookup_record_by_phone","search_records","get_record_by_id","create_record","update_record"]},{"type":"string","enum":["lookup_issue","search_issues","create_issue","update_issue","add_comment","get_comments","transition_issue","assign_issue","list_projects","list_create_fields"]},{"type":"string","enum":["identify_caller","get_reservations","get_reservation","get_listings","get_listing_details","get_house_rules","get_conversations","check_availability","get_quote","get_owner_revenue","create_task","list_tasks","send_message"]},{"type":"string","enum":["create_task","update_task","update_task_status","move_task","assign_task","list_members","add_attachment","add_comment","search_tasks","get_task","find_list","get_contact_by_number","list_contacts"]},{"type":"string","enum":["list_boards","list_lists","list_cards","get_card","search_cards","list_members","create_card","update_card","move_card","list_comments","add_comment","assign_member","remove_member","add_attachment"]},{"type":"string","enum":["get_account","list_files","get_metadata","get_download_link","search_files","list_shared_links","upload_file","create_folder","create_shared_link","create_file_request","move_file","copy_file","delete_file"]},{"type":"string","enum":["send_message","send_to_default_space","send_via_webhook"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","create_lead","add_note"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","link_caller_to_contact","get_recent_tickets","create_ticket","add_ticket_reply"]},{"type":"string","enum":["track_voucher","reschedule_delivery"]},{"type":"string","enum":["check_availability","list_events","create_event","update_event","lookup_contact"]}]}},"defaultWrhsCode":{"type":"string"},"defaultProjectKey":{"type":"string"},"defaultIssueTypeName":{"type":"string"},"defaultCalendarId":{"type":"string"},"timeZone":{"type":"string"},"callerKeyType":{"type":"string","enum":["phone","vat","email","custom","none"]},"callerKeyLabel":{"type":"string"},"prefetchTicketsOnCallStart":{"type":"boolean"},"callerPhoneFields":{"type":"array","items":{"type":"string"}},"guestyPrefetch":{"type":"object","properties":{"reservations":{"type":"boolean","description":"Prefetch the caller's reservations (guest: own bookings; owner: active+upcoming across their listings)."},"listings":{"type":"boolean","description":"Prefetch the owner's listings (owners only)."},"houseRules":{"type":"boolean","description":"Prefetch house rules of the guest's reserved listing (guests with a current/upcoming reservation)."},"conversations":{"type":"boolean","description":"Prefetch the caller's recent Guesty conversations."}}},"guestyLimits":{"type":"object","properties":{"maxReservationRangeDays":{"type":"integer","minimum":0,"nullable":true,"description":"Cap (days) on an owner-by-listing reservation date range — the strongest guard. Default and system maximum 7."},"maxReservations":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on reservations returned by any single call. Default 10, system maximum 20."},"maxConversations":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on conversations returned / prefetched. Default 5."},"maxListings":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on listings returned. Default 20."},"prefetchReservationBackDays":{"type":"integer","minimum":0,"nullable":true,"description":"Prefetch window: days before today for a caller's reservations. Default 3."},"prefetchReservationForwardDays":{"type":"integer","minimum":0,"nullable":true,"description":"Prefetch window: days after today. Default 4."}}},"guestyQuoteSource":{"type":"string"},"autoIdentifyCaller":{"type":"boolean"},"prefetchOrdersOnCallStart":{"type":"boolean"},"prefetchOrdersDays":{"type":"integer"},"prefetchOrdersMaxOrders":{"type":"integer"},"prefetchShippingZonesOnCallStart":{"type":"boolean"},"maxOrderValue":{"type":"number","nullable":true},"maxOrderLines":{"type":"integer","nullable":true},"maxSalesDocValue":{"type":"number","nullable":true},"maxSalesDocLines":{"type":"integer","nullable":true},"salesDocShippingEnabled":{"type":"boolean"},"salesDocManageOlderThan24h":{"type":"boolean"},"allowExternalNumbers":{"type":"boolean"},"announceRecordingPause":{"type":"string","enum":["off","pause","resume","both"]},"customAttributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"The attribute key. Meaning varies per provider (see tool config description)."},"description":{"type":"string","minLength":1,"description":"What the AI should put in this field — shown to the LLM as the parameter description."},"required":{"type":"boolean","description":"When true, the AI must fill the field. The write op is rejected if missing."}},"required":["key","description"]}},"logCallNotesTemplate":{"type":"string"},"logCallOnlyWhenField":{"type":"string"},"logCallMergeDaily":{"type":"boolean"},"logCallActor":{"type":"string"},"logCallActorRules":{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","minLength":1,"description":"Post-call analysis property to test, e.g. \"requested_person\"."},"values":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"description":"Values that select this rule — the canonical name plus spoken variants. Case/accent-insensitive; a value also matches when it appears as whole words inside the analysis text."},"actor":{"type":"string","minLength":1,"description":"Soft1 ACTOR (user) the call is assigned to when this rule matches. Supports {{variables}}."},"label":{"type":"string","description":"Operator note, e.g. the person's name. Shown in logs only."}},"required":["property","values","actor"]}},"logCallHeaderFields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"SOACTION column name, e.g. \"UDSTRING01\" or \"CCCSOACTION.UDFTYPE\"."},"value":{"type":"string","description":"Template for the value, e.g. \"{{request_type}}\". Supports {{phone_number}}, {{caller_name}}, {{agent_name}}, {{call_date}} and any post-call analysis property."},"valueMap":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional map from the rendered text to the stored value (case/accent-insensitive key match), e.g. {\"Πωλήσεις\":\"1\",\"Υποστήριξη\":\"2\"}. Unmapped text is stored as is."}},"required":["key","value"]}},"allowedSpaces":{"type":"array","items":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque space resource name (spaces/AAQA...)"},"displayName":{"type":"string","minLength":1,"description":"Friendly label shown to the LLM and rendered in the UI"}},"required":["spaceName","displayName"]}},"allowedBoards":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Trello board id"},"name":{"type":"string","minLength":1,"description":"Board display name shown in the UI and to the AI"}},"required":["id","name"]}},"allowedWebhookLabels":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Field key, e.g. \"full_name\" or \"accident_location\""},"description":{"type":"string","description":"What to ask for — shown as the field label/help text on the web form"},"type":{"type":"string","enum":["text","number","location","files"],"description":"Input type; \"location\" asks for GPS + map pin; \"files\" lets the caller upload photos/PDFs (S3 + OCR/AI analysis)"},"required":{"type":"boolean","default":true}},"required":["name","description","type"]}},"ttlMinutes":{"type":"integer"},"notifyEmails":{"type":"array","items":{"type":"string"}},"smsMessage":{"type":"string"},"maxCallbacks":{"type":"integer"},"dynamicWelcomeMessage":{"type":"boolean"},"branches":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Optional stable id for this branch"},"name":{"type":"string","minLength":1,"description":"Spoken branch name, e.g. \"Syntagma store\""},"address":{"type":"string","description":"Full address text used for geocoding when lat/lng are missing"},"latitude":{"type":"number","description":"Latitude in decimal degrees"},"longitude":{"type":"number","description":"Longitude in decimal degrees"},"googlePlaceId":{"type":"string","description":"Optional Google Place ID; used to resolve coordinates when lat/lng are missing"}},"required":["name"]}},"includeCompanyLocation":{"type":"boolean"},"regionBias":{"type":"string"},"locationDetails":{"type":"array","items":{"type":"string","enum":["phone","website","openingHours","rating","priceLevel","category","summary","mapsLink"]}},"maxResults":{"type":"integer"},"channels":{"type":"array","items":{"type":"string","enum":["calls","widget"]}},"collectComment":{"type":"boolean"},"allowResubmit":{"type":"boolean"},"sendMode":{"type":"string","enum":["always","evaluate"]},"evaluationPrompt":{"type":"string"},"channel":{"type":"string","enum":["email","sms","both"]},"maxAttempts":{"type":"integer"},"codeTtlSeconds":{"type":"integer"},"method":{"type":"string","enum":["otp","known_field"]},"matchField":{"type":"string","enum":["vatNumber"]},"matchLastDigits":{"type":"integer"},"saveCallerNumber":{"type":"boolean"},"recentlyCalledDays":{"type":"integer"},"stopsAtStart":{"type":"boolean"}},"required":["enabled","name","type"],"example":{"enabled":true,"name":"send_sms","prompt":"Send an SMS to the user","type":"system","senderId":"1234567890","url":"https://eshopkatoikidio.gr/skroutz-feed.xml","interval":60,"vectorField":"sku","aiEnabled":false,"keyOfId":"mpn","lastSyncAt":"2024-01-15T10:30:00.000Z","timesFailed":0,"readContactProperties":["firstname","lastname","phone"],"updateContactProperties":["phone"],"createCallActivity":false,"nudgeIntervalSeconds":10,"timesToNudge":3,"actions":["forward"]}}},"mcpServers":{"type":"array","items":{"type":"object","properties":{"connectionId":{"type":"string","minLength":1,"description":"Company MCP connection this agent uses"},"name":{"type":"string","minLength":1,"description":"Display name"},"slug":{"type":"string","minLength":1,"description":"Prefix for LLM tool names (mcp_{slug}__{tool})"},"enabled":{"type":"boolean","default":false},"enabledTools":{"type":"array","items":{"type":"string"},"default":[],"description":"Remote tool names the agent may call"},"selectedToolDefs":{"type":"array","items":{"type":"object","properties":{"remoteName":{"type":"string","minLength":1,"description":"Tool name as published by the MCP server"},"description":{"type":"string","default":""},"inputSchema":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"default":{}}},"required":["remoteName"]},"default":[],"description":"Schemas for enabled tools so live calls stay sync"}},"required":["connectionId","name","slug"]}},"playWaitMusicOnDuringCallTools":{"type":"boolean"},"password":{"type":"string"},"passwordTries":{"type":"number"},"externalDial":{"type":"number"},"internalDial":{"type":"string"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Unique identifier for the node"},"name":{"type":"string","description":"Display name of the node"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"description":"X,Y coordinates for node positioning"},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}},"description":"Input connections to this node"},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}},"description":"Output connections from this node"},"className":{"type":"string","description":"CSS class for styling the node"},"data":{"oneOf":[{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["conversation"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"},"systemPrompt":{"type":"string"},"enableModel":{"type":"boolean"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"enableTranscription":{"type":"boolean"},"transcriptionConfig":{"type":"object","properties":{"transcriptionProvider":{"type":"string","enum":["microsoft","google","fireworks","speechmatics","openai","assemblyai","deepgram","google_v1","google_v2","elevenlabs","voicelogica","soniox"],"description":"The transcription service provider to use for speech-to-text"},"silenceDurationMs":{"type":"number","minimum":500,"description":"Duration of silence in milliseconds before considering the user finished speaking"},"adaptationPhraseSetIds":{"type":"array","items":{"type":"string"},"description":"IDs of adaptation phrase sets to improve transcription accuracy"},"transcriptionVoiceMailPhrases":{"type":"array","items":{"type":"string"},"description":"Phrases that indicate the call has reached a voicemail system"},"waitForFullTranscription":{"type":"boolean","description":"Whether to wait for complete transcription before processing"},"enhanced":{"type":"boolean","description":"Whether to use enhanced transcription models for better accuracy"},"audioEnhancement":{"type":"boolean","description":"Whether to run ai-coustics speech enhancement (noise/background-speech suppression) on caller audio before transcription"},"audioEnhancementLevel":{"type":"number","minimum":0,"maximum":1,"description":"How aggressively the ai-coustics model suppresses noise (0.0-1.0). Uses the model default when omitted"},"endpointSensitivity":{"type":"number","minimum":-1,"maximum":1,"nullable":true,"description":"Soniox only: how aggressively endpoints are detected (-1.0 to 1.0). Higher = faster end-of-turn but more risk of cutting the caller off mid-sentence. Platform default 0.3"},"maxEndpointDelayMs":{"type":"number","minimum":500,"maximum":3000,"nullable":true,"description":"Soniox only: hard cap on how long Soniox may wait for an endpoint after speech ends (500-3000ms). Platform default 1500"},"endpointLatencyAdjustmentLevel":{"type":"integer","minimum":0,"maximum":3,"nullable":true,"description":"Soniox only: endpoint latency reduction level 0-3 (3 = most aggressive). Platform default 3"},"speculativeFinalize":{"type":"boolean","nullable":true,"description":"Soniox only: at the speculative quiet moment, request finalize() to flush pending tokens into the candidate before the endpoint. Platform default from admin settings"},"singleUtterance":{"type":"boolean","description":"Whether to process speech as single utterances"},"openAiModel":{"type":"string","enum":["whisper-1","gpt-transcribe","gpt-4o-transcribe","gpt-4o-mini-transcribe","gpt-4o-transcribe-diarize"],"description":"OpenAI model to use for transcription"},"prompt":{"type":"string","description":"Custom prompt used for transcription processing"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to focus on during transcription"},"initializationMethod":{"type":"string","enum":["on_call_start","on_human_join"],"description":"Method to initialize the transcription service"}},"required":["transcriptionProvider"],"description":"Configuration for speech-to-text transcription settings","example":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"waitForFullTranscription":false,"openAiModel":"whisper-1"}},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}},"skipTurnEnabled":{"type":"boolean"},"skipTurnPrompt":{"type":"string"},"workflowsIds":{"type":"array","items":{"type":"string"}},"knowledgeFileIds":{"type":"array","items":{"type":"string"}},"enableVoice":{"type":"boolean"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"canJumpToPreviousNode":{"type":"boolean"},"workflows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"triggers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCallStart","onCallConnect","onCallEnd","onCallTransfer","onMissedCall","onDTMFInput","onKeywordDetected","duringCall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"functionName":{"type":"string","pattern":"^[a-z0-9_]+$"},"keywords":{"type":"array","items":{"type":"string"}},"condition":{"type":"string"},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"generateMessageBeforeRunningWorkflow":{"type":"boolean"},"messageAiGenerated":{"type":"boolean"},"messagePrompt":{"type":"string"},"playWaitMusic":{"type":"boolean","description":"When true (default), play keyboard wait music while this duringCall workflow tool runs"},"useProtectedValues":{"type":"boolean","description":"onCallEnd only. When true, the non-AI steps of this workflow (API call, integrations, booking, email, SMS, sheets, conditions) get the REAL values the caller said ({{protected.afm}}, {{afm_1}}, …) when the agent protects sensitive data; AI steps (llmCompletion, aiResponse, managedAgent, googleSearch) always get placeholders. Every use is audited. Only members who may reveal sensitive data can turn it on."}},"example":{"keywords":["hello","world"],"condition":"call_started","parameters":[{"name":"call_id","value":"123"}],"playWaitMusic":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onEmailReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"emailFilters":{"type":"object","properties":{"from":{"type":"array","items":{"type":"string"}},"subject":{"type":"array","items":{"type":"string"}},"labels":{"type":"array","items":{"type":"string"}}}}},"example":{"emailFilters":{"from":["test@test.com"],"subject":["test"],"labels":["test"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onAPICall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"payloadSchema":{"type":"object","properties":{"type":{"type":"string","enum":["object"]},"properties":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","enum":["object","array","string","number","boolean","date","enum"]},"required":{"type":"boolean","default":false},"properties":{"type":"object","additionalProperties":{"type":"object","description":"Circular reference detected"}},"items":{"type":"object","description":"Circular reference detected"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"},"minimum":{"type":"number"},"maximum":{"type":"number"},"enum":{"type":"array","items":{"type":"string"}}},"required":["type"]}},"required":{"type":"array","items":{"type":"string"}}},"required":["type","properties"],"description":"Expected payload structure"}},"example":{"payloadSchema":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^TX-[0-9]{8}$"},"amount":{"type":"number","minimum":0},"currency":{"type":"string","enum":["USD","EUR","GBP"]}},"required":["transactionId","amount","currency"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onContactCreated","onCompanyCreated","onDealCreated","onTicketCreated","onPropertyChange"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","property"]},"property":{"type":"string","enum":["hs_lead_status","lifecyclestage","hubspot_owner_id","companyname","domain","dealstage","amount","closedate","closed_won_reason","closed_lost_reason","pipeline","hs_pipeline_stage","hs_due_date"]}},"example":{"resource":"contact","property":"hs_lead_status"}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onWooCommerce"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"getCustomerOrders":{"type":"boolean"},"getProductByName":{"type":"boolean"},"getProductByCode":{"type":"boolean"},"productCodeType":{"type":"string","enum":["id","sku","global_unique_id"]},"createOrder":{"type":"boolean"},"getOrderById":{"type":"boolean"},"notifyEmailsOnOrderCreation":{"type":"array","items":{"type":"string"}}},"example":{"getCustomerOrders":true,"getProductByName":true,"getProductByCode":true,"productCodeType":"id","createOrder":true,"getOrderById":true,"notifyEmailsOnOrderCreation":["test@test.com"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onYubotoPbxChannelHangup","onYubotoPbxChannelAnswer","onYubotoPbxChannelCreate"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"agentId":{"type":"string"},"allowedExtensions":{"type":"array","items":{"type":"string"}}},"example":{"username":"test","password":"test","agentId":"test","allowedExtensions":["123","456"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCampaignLeadStatusChanged"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign to watch. Omit to fire for every campaign of the company."},"statuses":{"type":"array","items":{"type":"string","enum":["successful","failed","reachedMaxRetries","askedToCallBackLater","askedToNeverCallAgain","cancelled"]},"description":"Lead statuses that fire the workflow. Omit or empty = every outcome status."},"stages":{"type":"array","items":{"type":"string"},"description":"Only fire when the lead is in one of these campaign stage names. Omit or empty = any stage."}},"example":{"campaignId":"66f1c0ffee0000000000abcd","statuses":["failed","reachedMaxRetries"],"stages":[]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onShopifyEvent"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["orders/create","orders/paid","orders/fulfilled","orders/partially_fulfilled","orders/cancelled","refunds/create","fulfillments/create","fulfillments/update"]},"minItems":1,"description":"Shopify events that start the workflow."},"financialStatuses":{"type":"array","items":{"type":"string","enum":["pending","authorized","partially_paid","paid","partially_refunded","refunded","voided"]},"description":"Only when the order payment status is one of these. Empty = any."},"fulfillmentStatuses":{"type":"array","items":{"type":"string","enum":["unfulfilled","partial","fulfilled","restocked"]},"description":"Only when the order fulfillment status is one of these. Empty = any."},"shipmentStatuses":{"type":"array","items":{"type":"string","enum":["label_printed","label_purchased","confirmed","in_transit","out_for_delivery","attempted_delivery","ready_for_pickup","delivered","failure"]},"description":"Shipment topics only: only when the carrier status is one of these. Empty = any."},"paymentGateways":{"type":"array","items":{"type":"string"},"description":"Only when a payment gateway name contains one of these (case-insensitive), e.g. \"Cash on Delivery\". Empty = any."},"tags":{"type":"array","items":{"type":"string"},"description":"Only when the order has at least one of these tags (case-insensitive). Empty = any."},"minTotal":{"type":"number","minimum":0,"description":"Only when the order total is at least this amount."},"maxTotal":{"type":"number","minimum":0,"description":"Only when the order total is at most this amount."}},"required":["topics"],"example":{"topics":["orders/create"],"financialStatuses":["pending"],"paymentGateways":["Cash on Delivery"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onLeadReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"string","enum":["tiktok","meta","google_ads","linkedin","webhook","form"]},"description":"Only leads from these sources start the workflow. Empty = any source, including ones added later."},"formIds":{"type":"array","items":{"type":"string","minLength":1},"description":"Only these forms: our lead form ids (from lead_forms_list_forms). A platform form id or a form name also matches, for older triggers. Empty = any."},"requirePhone":{"type":"boolean","description":"Skip a lead with no phone number."},"includeTestSubmissions":{"type":"boolean","description":"Also fire for test submissions. Off by default."}},"example":{"sources":["google_ads","form"],"requirePhone":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"triggerType"}}},"required":["id","name","position","outputs"],"example":{"id":1,"name":"Call Start Trigger","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"},{"node":"3","output":"default"}]},"className":"trigger-node","data":{"triggerType":"onCallStart","triggerConfig":{"enabled":true,"triggerType":"onCallEnd","description":"Trigger when a new call starts"},"transitions":[2,3]}}},"description":"Trigger node that starts the flow"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"nodeType":{"type":"string","enum":["emailConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["nodeType","nodeTitle","transitions","emailConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendSms"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["nodeType","nodeTitle","transitions","smsConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["apiCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["nodeType","nodeTitle","transitions","apiConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["codeExecution"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"codeConfig":{"type":"object","properties":{"code":{"type":"string"},"language":{"type":"string","enum":["javascript","python","java","cpp","php","ruby"]},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties for the code"}},"required":["code","language"],"example":{"code":"console.log(\"Hello, world!\");","language":"javascript","properties":[{"name":"name","type":"string"}]}}},"required":["nodeType","nodeTitle","transitions","codeConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleDocConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}}},"required":["nodeType","nodeTitle","transitions","googleDocConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createEvent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"eventConfig":{"type":"object","properties":{"calendarId":{"type":"string","description":"Google calendar id. Empty = the company's primary calendar."},"summary":{"type":"string","description":"Event title."},"startDateTime":{"type":"string","description":"Start, ISO 8601 (\"2026-08-12T15:00:00\") or \"YYYY-MM-DD HH:mm\"."},"endDateTime":{"type":"string","description":"End. Empty = start + durationMinutes."},"durationMinutes":{"type":"number","minimum":1,"maximum":1440,"description":"Used only when endDateTime is empty. Defaults to 30."},"description":{"type":"string"},"location":{"type":"string"},"attendees":{"type":"string","description":"Comma-separated emails."},"timeZone":{"type":"string","description":"IANA zone. Empty = the company timezone."},"isOnline":{"type":"boolean","description":"When true, Google adds a Meet link to the event."}},"required":["durationMinutes"],"example":{"summary":"Callback for {{contact_name}}","startDateTime":"{{callback_datetime}}","durationMinutes":30,"description":"Requested during call {{call_id}}","attendees":"sales@example.com","isOnline":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendPhoneCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}}},"required":["nodeType","nodeTitle","transitions","phoneCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["llmCompletion"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}}},"required":["nodeType","nodeTitle","transitions","llmCompletionConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheet"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]}},"required":["nodeType","nodeTitle","transitions","googleSheetConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}}},"required":["nodeType","nodeTitle","transitions","googleSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendViber"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}}},"required":["nodeType","nodeTitle","transitions","viberConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["switch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"switchConfig":{"type":"object","properties":{"cases":{"type":"array","items":{"type":"object","properties":{"block":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"transition":{"type":"string"},"transitionIndex":{"type":"number"}},"required":["block"]}}},"required":["cases"],"example":{"cases":[{"transition":"Schedule Appointment","transitionIndex":1,"block":{"operator":"and","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"schedule_appointment","fieldType":"string"}]}},{"transition":"Cancel Appointment","transitionIndex":0,"block":{"operator":"or","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"cancel_appointment","fieldType":"string"}]}}]}}},"required":["nodeType","nodeTitle","transitions","switchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["if"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"ifConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","ifConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["filter"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"filterConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","filterConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["loop"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"loopConfig":{"type":"object","properties":{"array":{"type":"string"}},"required":["array"],"example":{"array":"user_response"}}},"required":["nodeType","nodeTitle","transitions","loopConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["tableNode"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"tableConfig":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","maxLength":128},"type":{"type":"string","enum":["string","number","boolean"]}},"required":["key","label"]},"maxItems":50},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"maxItems":500},"filters":{"type":"array","items":{"type":"object","properties":{"column":{"type":"string","minLength":1},"op":{"type":"string","enum":["equals","notEquals","contains","gt","lt","gte","lte"]},"value":{"type":"string"}},"required":["column","op","value"]}},"mode":{"type":"string","enum":["producer","lookup"]},"keyColumn":{"type":"string"},"keyValue":{"type":"string"}},"required":["columns","rows"],"example":{"columns":[{"key":"name","label":"Name","type":"string"},{"key":"phone","label":"Phone","type":"string"}],"rows":[{"name":"Alice","phone":"+30 210 1234567"},{"name":"Bob","phone":"+30 210 7654321"}],"mode":"producer"}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hubspotContact","hubspotCompany","hubspotDeal","hubspotTicket","hubspotTask","hubspotNote","hubspotMeeting","hubspotEmail","hubspotCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hubspotConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"operation":{"type":"string","enum":["get","create","createOrUpdate","getOrCreate","delete","update","search","list","exists"]},"value":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"associations":{"type":"array","items":{"type":"object","properties":{"associationType":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["associationType","valueType","value"],"example":{"associationType":"contact","valueType":"id","value":"123"}}},"owner":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"contactData":{"type":"object","properties":{"properties":{"type":"object","properties":{"email":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"}},"required":[]}},"example":{"email":"test@test.com","firstname":"John","lastname":"Doe","phone":"+1234567890","company":"Test Corp","website":"https://test.com","lifecyclestage":"marketingqualifiedlead","jobtitle":"Manager","hs_additional_emails":["test2@test.com"]}},"companyData":{"type":"object","properties":{"properties":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"industry":{"type":"string"},"description":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"}},"required":[]}},"example":{"name":"Test Corp","domain":"test.com","industry":"Technology","description":"Test Description","city":"Test City","country":"Test Country","phone":"1234567890","address":"Test Address","owner":{"valueType":"email","value":"test@test.com"}}},"dealData":{"type":"object","properties":{"properties":{"type":"object","properties":{"dealname":{"type":"string"},"pipeline":{"type":"string"},"stage":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string"},"closeDate":{"type":"string"},"dealType":{"type":"string","enum":["new","existing"]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["pipeline","stage"]}},"example":{"name":"Test Deal","description":"Test Description","amount":"1000","stage":"Test Stage"}},"ticketData":{"type":"object","properties":{"properties":{"type":"object","properties":{"pipeline":{"type":"string"},"stage":{"type":"string"},"priority":{"type":"string","enum":["HIGH","MEDIUM","LOW"]},"subject":{"type":"string"},"content":{"type":"string"}},"required":["pipeline","stage","subject"]}},"example":{"pipeline":"Test Pipeline","stage":"Test Stage","priority":"HIGH","subject":"Test Subject","content":"Test Content"}},"taskData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string"},"taskType":{"type":"string"},"priority":{"type":"string"},"dueDate":{"type":"string"},"repeatType":{"type":"object","properties":{"enabled":{"type":"boolean"},"type":{"type":"string","enum":["hour","day","week","month","year"]},"value":{"type":"string"}},"example":{"enabled":true,"type":"day","value":"1"}},"reminderTime":{"oneOf":[{"type":"number"},{"type":"string"}]},"notes":{"type":"string"}},"required":["title","dueDate"]}},"example":{"associations":[{"associationType":"contact","valueType":"email","value":"contact@example.com"}],"properties":{"title":"Task Title","taskType":"TODO","priority":"MEDIUM","associations":[],"timestamp":"2021-01-01","dueDate":"2021-01-01","notes":"Task Notes","ownerEmail":"owner@example.com","status":"NOT_STARTED","reminderTime":1000}}},"noteData":{"type":"object","properties":{"properties":{"type":"object","properties":{"body":{"type":"string"}},"required":[]}}},"meetingData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title of the meeting"},"body":{"type":"string","description":"Meeting description"}}}},"required":["properties"],"example":{"properties":{"title":"Initial Project Discussion","body":"Meeting to discuss project requirements and timeline"}}},"emailData":{"type":"object","properties":{"properties":{"type":"object","properties":{"subject":{"type":"string","description":"Subject of the email"},"body":{"type":"string","description":"Email body content"}},"required":[]}},"example":{"properties":{"subject":"Project Update","body":"Here are the latest updates on the project progress."}}},"callData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title/subject of the call"},"body":{"type":"string","description":"Call description and notes"},"direction":{"type":"string","enum":["INBOUND","OUTBOUND"],"description":"Call direction"},"caller":{"type":"string","description":"Caller phone number"},"callee":{"type":"string","description":"Callee phone number"},"duration":{"type":"string","description":"Call duration in milliseconds"},"disposition":{"type":"string","enum":["9d9162e7-6cf3-4944-bf63-4dff82258764","f240bbac-87c9-4f6e-bf70-924b57d47db7","a4c4c377-d246-4b32-a13b-75a56a4cd0ff","b2cf5968-551e-4856-9783-52b3da59a7d0","73a0d17f-1163-4015-bdd5-ec830791da20","17b47fee-58de-441e-a44c-c6300d46f273"],"description":"Call disposition"},"recordingUrl":{"type":"string","description":"Call recording URL"}},"required":[]}},"example":{"properties":{"title":"Test Call","body":"Test Body"}}}},"required":["resource","operation"],"example":{"resource":"call","operation":"create","owner":{"valueType":"email","value":"test@test.com"},"properties":{"callData":{"properties":{"callTitle":"Test Call","callBody":"Test Body"}}}}}},"required":["nodeType","nodeTitle","transitions","hubspotConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheetSettings"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetSettingsConfig":{"type":"object","properties":{"googleSheetId":{"type":"string","minLength":1,"description":"The unique identifier of the Google Sheet"},"sheetName":{"type":"string","minLength":1,"description":"The name of the specific sheet within the Google Sheet"},"operation":{"type":"string","enum":["getRow","getRows","updateRow","appendRow","deleteRow","getData"],"description":"The operation to perform on the Google Sheet (getRow, getRows, updateRow, appendRow, deleteRow)"},"filter":{"type":"object","properties":{"filterType":{"type":"string","enum":["index","columnName"]},"column":{"type":"string"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"fieldType":{"type":"string","enum":["string","phone","email","number","boolean","date","time","enum"]},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["filterType","column","operator","fieldType"],"example":{"filterType":"index","column":"1","operator":"eq","fieldType":"string","fieldValue":"Chris"},"description":"Filter to apply for selecting rows, such as by index or column name"},"values":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"object","description":"Any valid JSON value"}},"required":["key","value"]},"description":"Key-value pairs for the row data"}},"required":["googleSheetId","sheetName","operation"],"example":{"googleSheetId":"123","sheetName":"Sheet1","operation":"getRow","filter":{"filterType":"index","column":"1","operator":"eq","fieldType":"number","fieldValue":"152"},"values":[{"key":"Email","value":"john.doe@example.com"},{"key":"Name","value":"John Doe"}]}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["aiResponse"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}}},"required":["nodeType","nodeTitle","transitions","aiResponseConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["transferCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["nodeType","nodeTitle","transitions","transferCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["afmSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"afmSearchConfig":{"type":"object","properties":{"afm":{"type":"string","description":"AFM of company"}},"required":["afm"],"example":{"afm":"8022188180"}}},"required":["nodeType","nodeTitle","transitions","afmSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["galaxyGetCustomer","galaxySearchItems","galaxyCheckStock","galaxyGetPrice","galaxyCalculateOrder","galaxyPlaceOrder","galaxyUpdateOrder","galaxyGetOrderStatus","galaxyGetTransactionHistory","galaxyGetCustomerBalance","galaxyGetCustomerAging","galaxyGetFinInfoPerDrugType","galaxyGetItemPurchases","galaxyGetCustomerKartelaLink","galaxyFindItemsByActiveIngredient","galaxyGetInvoicePdfLinks","galaxyGetNextRoute","galaxyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"galaxyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","checkStock","getPrice","calcLines","calculateOrder","placeOrder","updateOrder","getOrderStatus","getTransactionHistory","getCustomerBalance","getCustomerAging","getFinInfoPerDrugType","getItemPurchases","getCustomerKartelaLink","findItemsByActiveIngredient","getInvoicePdfLinks","getNextRoute","customRequest"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","custCode"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query (supports {{variables.x}})"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"checkStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"wrhsCode":{"type":"string","description":"Overrides the company default warehouse"}},"required":["itemCode"]},"getPrice":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"}},"required":["EntryType","Date","Quantity"]},"calcLines":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"},"WrhsCode":{"type":"string"},"AlterCode":{"type":"string"},"Barcode":{"type":"string"}},"required":["EntryType","Date","Quantity","WrhsCode"]},"placeOrder":{"type":"object","properties":{"entry":{"type":"object","properties":{"CompID":{"type":"string"},"CompCode":{"type":"string"},"CmpsID":{"type":"string"},"CmpsCode":{"type":"string"},"WrhsID":{"type":"string"},"WrhsCode":{"type":"string"},"CoetID":{"type":"string"},"CoetCode":{"type":"string"},"DnumID":{"type":"string"},"TransDate":{"type":"string"},"TradeDate":{"type":"string"},"CustID":{"type":"string"},"CustCode":{"type":"string"},"CussID":{"type":"string"},"CussCode":{"type":"string"},"PytmID":{"type":"string"},"PytmCode":{"type":"string"},"MeroID":{"type":"string"},"CollMeroID":{"type":"string"},"RuteID":{"type":"string"},"UserID":{"type":"string"},"SourceType":{"type":"integer"},"RefTradeCode":{"type":"string"},"VoucherCode":{"type":"string"},"Comments":{"type":"string"},"ExecutionDate":{"type":"string"},"Street":{"type":"string"},"StreetNumber":{"type":"string"},"PostalCode":{"type":"string"},"Phone":{"type":"string"},"RegnDescription":{"type":"string"},"PrefDescription":{"type":"string"},"CntrDescription":{"type":"string"},"AddressDescr":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"EntryStatus":{"type":"integer"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1},"ID":{"type":"string"},"FastNumber":{"type":"string"},"TotalValue":{"type":"number"},"NetValue":{"type":"number"},"VatValue":{"type":"number"},"Lines":{"type":"array","items":{"type":"object","properties":{"ItcpID":{"type":"string"},"ItemCode":{"type":"string"},"RequestAQty":{"oneOf":[{"type":"number"},{"type":"string"}]},"WrhsID":{"type":"string"},"Price":{"type":"number"},"Disc1Pcnt":{"type":"number"},"Disc1Val":{"type":"number"},"Disc2Pcnt":{"type":"number"},"Disc2Val":{"type":"number"},"Disc3Pcnt":{"type":"number"},"Disc3Val":{"type":"number"},"Comments":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"DiscountBehaviour":{"type":"integer","minimum":0,"maximum":2},"ZeroingDiscounts":{"type":"integer","minimum":0,"maximum":3,"description":"v103: suppress discounts"},"ApplyDscnID":{"type":"string"},"ApplyDrulID":{"type":"string"},"CicoID":{"type":"string","description":"v103: item-collection (bundle) ID"},"AQty":{"type":"number"},"DisposalAQty":{"type":"number"},"PickingQty":{"type":"number"},"NetValue":{"type":"number"},"GrossValue":{"type":"number"}},"required":["ItcpID","ItemCode","RequestAQty","WrhsID","Price","Disc1Pcnt","Disc1Val","Disc2Pcnt","Disc2Val","Disc3Pcnt","Disc3Val","Comments","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","DiscountBehaviour","ZeroingDiscounts","ApplyDscnID","ApplyDrulID","CicoID","AQty","DisposalAQty","PickingQty","NetValue","GrossValue"]},"nullable":true},"Taxes":{"type":"array","items":{"type":"object","properties":{"FiacID":{"type":"string"},"FiacCode":{"type":"string"},"TrnValue":{"oneOf":[{"type":"number"},{"type":"string"}]},"ExchVatValue":{"type":"number"}},"required":["FiacID","FiacCode","ExchVatValue"]},"nullable":true}},"required":["CompID","CompCode","CmpsID","CmpsCode","WrhsID","WrhsCode","CoetID","CoetCode","DnumID","TransDate","TradeDate","CustID","CustCode","CussID","CussCode","PytmID","PytmCode","MeroID","CollMeroID","RuteID","UserID","SourceType","RefTradeCode","VoucherCode","Comments","ExecutionDate","Street","StreetNumber","PostalCode","Phone","RegnDescription","PrefDescription","CntrDescription","AddressDescr","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","EntryStatus","LockTransaction","ID","FastNumber","TotalValue","NetValue","VatValue","Lines","Taxes"]},"previewFirst":{"type":"boolean","default":false}},"required":["entry"]},"updateOrder":{"type":"object","properties":{"ID":{"type":"string"},"EntryStatus":{"type":"integer"},"Comments":{"type":"string"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1}},"required":["ID"]},"getOrderStatus":{"type":"object","properties":{"id":{"type":"string","description":"Optional specific transaction ID — omit to list all"},"revNum":{"type":"integer","minimum":0,"default":0},"custCode":{"type":"string","description":"List the orders of this customer instead (GetTransactions by CustCode, per branch). Template strings supported."},"dateFrom":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."}}},"getTransactionHistory":{"type":"object","properties":{"CustCode":{"type":"string"},"DateFrom":{"type":"string"},"DateTo":{"type":"string"}},"required":["CustCode","DateFrom","DateTo"]},"getCustomerBalance":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."}},"required":["custCode"]},"getCustomerAging":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"getFinInfoPerDrugType":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"fromDate":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."}},"required":["custCode"]},"getItemPurchases":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"itemCode":{"type":"string","minLength":1,"description":"Galaxy item code (from item search). Template strings supported."},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"compCode":{"type":"string","description":"Branch/company code. Defaults to the customer's branch."}},"required":["custCode","itemCode"]},"getCustomerKartelaLink":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"findItemsByActiveIngredient":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Active ingredient name or AtloID. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["query"]},"getInvoicePdfLinks":{"type":"object","properties":{"custCode":{"type":"string"},"custTin":{"type":"string"},"cussCode":{"type":"string"},"id":{"type":"string"},"dateFrom":{"type":"string"},"dateTo":{"type":"string"}}},"getNextRoute":{"type":"object","properties":{"custCode":{"type":"string","minLength":1}},"required":["custCode"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"POST"},"path":{"type":"string","minLength":1,"description":"Path added after the Galaxy ERP base URL, e.g. /api/crossdomain/advancedcustomviews/<guid>. Supports {{variables}}."},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Key/value properties sent as the query string. Values support {{variables}}."},"body":{"type":"string","description":"Optional raw JSON request body (supports {{variables}}). Example for an advanced custom view: {\"filters\":[{\"CompCode\":\"01\",\"CustCode\":\"{{node_1.custCode}}\"}],\"MasterDetailTree\":false}"},"apiResponse":{"type":"string","description":"Editor-only: JSON schema of the expected response (same as the apiCall node's \"API Response\"). Powers the variable picker so downstream nodes can reference individual response fields; at runtime the real response is flattened into node_N.* regardless."}},"required":["path"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["salesforceGetContact","salesforceCreateLead","salesforceLogCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"salesforceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","createLead","logCall"]},"getContact":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{variables.x}} / {{call.phoneNumber}}"},"objectType":{"type":"string","enum":["Contact","Lead"],"description":"For by=id: which SObject the Id belongs to (default Contact)."}},"required":["by","value"]},"createLead":{"type":"object","properties":{"lastName":{"type":"string","minLength":1,"description":"Lead last name — required by Salesforce. Supports templates."},"company":{"type":"string","minLength":1,"description":"Lead company — required by Salesforce. Supports templates."},"firstName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"description":{"type":"string","description":"Short summary of the request / call reason."}},"required":["lastName","company"]},"logCall":{"type":"object","properties":{"whoId":{"type":"string","minLength":1,"description":"Contact or Lead Id the call is logged against. Supports templates."},"subject":{"type":"string","minLength":1,"description":"Task subject, e.g. \"Inbound call — order status\"."},"description":{"type":"string","description":"Call notes."}},"required":["whoId","subject"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"by":"phone","value":"{{call.phoneNumber}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["guestyFindOwner","guestyFindGuest","guestyIdentifyCaller","guestyGetListings","guestyGetListing","guestyGetReservations","guestyGetReservation","guestyGetHouseRules","guestyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"guestyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["findOwner","findGuest","identifyCaller","getListings","getListing","getReservations","getReservation","getHouseRules","customRequest"]},"findOwner":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email"],"default":"phone","description":"Which field to search the owner by"},"value":{"type":"string","minLength":1,"description":"Search term (template, e.g. {{call.phone_number}})"}},"required":["value"]},"findGuest":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Guest phone to look up via their reservations (template)"}},"required":["value"]},"identifyCaller":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Caller phone (template) — matched against owners AND guests"}},"required":["value"]},"getListings":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated listing ids (template) — e.g. {{node_X.owner.listings}}"},"ownerId":{"type":"string","description":"Resolve the owner's listing ids first, then fetch them (template)"},"q":{"type":"string","description":"Free-text search across title/nickname/address (template)"}}},"getListing":{"type":"object","properties":{"id":{"type":"string","description":"Listing _id (template) — returns the full property"},"nickname":{"type":"string","description":"Listing nickname (template) — used when no id is known"},"fields":{"type":"string","description":"Space-separated field selection; omit for the full listing"}}},"getReservations":{"type":"object","properties":{"listingIds":{"type":"string","description":"Comma-separated listing ids to scope to (template)"},"listingNickname":{"type":"string","description":"Scope to a single listing by its nickname (template)"},"ownerId":{"type":"string","description":"Scope to all of an owner's listings (resolved to ids) (template)"},"guestPhone":{"type":"string","description":"Scope to a guest's reservations by their phone (template)"},"dateFrom":{"type":"string","description":"Window start: ISO date, `today`, or relative like `-7d` (template)"},"dateTo":{"type":"string","description":"Window end: ISO date, `today`, or relative like `+7d` (template)"},"windowDays":{"type":"integer","minimum":0,"description":"When dateFrom/dateTo are omitted, use today∓windowDays as the overlap window"},"status":{"type":"string","description":"Filter by reservation status (template)"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Reservation _id / confirmation id (template)"}},"required":["id"]},"getHouseRules":{"type":"object","properties":{"listingIds":{"type":"string","minLength":1,"description":"Comma-separated listing ids (template) — house rules are keyed by listing/unit-type"}},"required":["listingIds"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"GET"},"path":{"type":"string","minLength":1,"description":"Path after the base URL, e.g. /v1/reservations (template)"},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Query params (templates)"},"body":{"type":"string","description":"Raw JSON body (template) — ignored for GET"}},"required":["path"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"value":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["helpdeskCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"helpdeskConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createTicket"]},"createTicket":{"type":"object","properties":{"subject":{"type":"string","description":"Ticket subject (template, e.g. \"Call from {{call.phone_number}}\")"},"description":{"type":"string","description":"Ticket body (template, e.g. {{call.summary}})"},"requesterPhone":{"type":"string","description":"Requester phone (template, defaults to {{call.phone_number}})"},"requesterEmail":{"type":"string","description":"Requester email (template)"},"requesterName":{"type":"string","description":"Requester display name (template)"},"priority":{"type":"string","enum":["low","medium","high","urgent"],"description":"Ticket priority"}}}},"required":["operation"],"example":{"operation":"createTicket","createTicket":{"subject":"Call from {{call.phone_number}}","description":"{{call.summary}}","requesterPhone":"{{call.phone_number}}","priority":"medium"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["courierTrackVoucher"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"courierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["trackVoucher"]},"trackVoucher":{"type":"object","properties":{"courier":{"type":"string","description":"Courier to query (acs_courier, speedex, geniki_taxydromiki, elta_courier, boxnow, skroutz_lastmile, taxydema). Omit to try every connected courier."},"voucher":{"type":"string","description":"Voucher/tracking number (template, e.g. {{node_5.order.meta.voucher}})"}}}},"required":["operation"],"example":{"operation":"trackVoucher","trackVoucher":{"voucher":"{{node_5.order.meta.voucher}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["vivaCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"vivaConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createPaymentLink"]},"createPaymentLink":{"type":"object","properties":{"amount":{"type":"string","description":"Amount in EUR as a decimal (template, e.g. \"25.50\" or {{node_3.order.total}})"},"description":{"type":"string","description":"Shown to the customer on the checkout page (template)"},"customerName":{"type":"string","description":"Customer full name (template)"},"customerPhone":{"type":"string","description":"Customer phone (template, e.g. {{call.phone_number}})"},"language":{"type":"string","enum":["el","en"],"description":"Checkout page language"}}}},"required":["operation"],"example":{"operation":"createPaymentLink","createPaymentLink":{"amount":"25.50","description":"Πληρωμή παραγγελίας","customerPhone":"{{call.phone_number}}","language":"el"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createTrackedPage"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"trackedPageConfig":{"type":"object","properties":{"html":{"type":"string","description":"Page HTML (template, e.g. {{node_2.html}} from an llmCompletion node). Scripts and forms are stripped; styles are kept."},"title":{"type":"string","description":"Browser tab title (template)"},"expiresInDays":{"type":"integer","minimum":1,"maximum":365,"description":"How long the link stays open (default 30 days)"}},"required":["html"],"example":{"html":"{{node_2.html}}","title":"Η σύνοψη της κλήσης σας","expiresInDays":30}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["shopifyGetCustomer","shopifyGetOrdersByCustomer","shopifyGetOrderById","shopifySearchProducts","shopifyGetProductById","shopifySyncProductsToSkroutz"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"shopifyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","syncProductsToSkroutz"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search — mapped to vendor / product_type / handle."},"vendor":{"type":"string"},"productType":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify product id."}},"required":["productId"]},"syncProductsToSkroutz":{"type":"object","properties":{"maxRecords":{"type":"integer","minimum":0}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["soft1GetCustomer","soft1SearchItems","soft1GetCustomerBalance","soft1GetCustomerAging","soft1GetCustomerHistory","soft1CreateSalesDoc","soft1TransmitEInvoice"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"soft1Config":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","getCustomerHistory","createSalesDoc","transmitEInvoice"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerAging":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerHistory":{"type":"object","properties":{"trdr":{"type":"string"},"tin":{"type":"string"},"code":{"type":"string"},"from":{"type":"string","description":"ISO date YYYY-MM-DD"},"to":{"type":"string","description":"ISO date YYYY-MM-DD"},"limit":{"type":"integer","minimum":1,"maximum":500,"default":50}}},"createSalesDoc":{"type":"object","properties":{"trdr":{"oneOf":[{"type":"string"},{"type":"number"}]},"custCode":{"type":"string"},"series":{"oneOf":[{"type":"string"},{"type":"number"}]},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"mtrl":{"oneOf":[{"type":"string"},{"type":"number"}]},"code":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"transmit":{"type":"boolean"}},"required":["lines"]},"transmitEInvoice":{"type":"object","properties":{"key":{"type":"string","minLength":1},"template":{"type":"string","minLength":1}},"required":["key"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["exelixisSmartGetContact","exelixisSmartListCompanyContacts","exelixisSmartListSupportMembers","exelixisSmartCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"exelixisSmartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","listCompanyContacts","listSupportMembers","createTicket"]},"getContact":{"type":"object","properties":{"phone":{"type":"string","description":"Template — e.g. {{call.phone_number}}"},"afm":{"type":"string","description":"Template — e.g. {{dynamicVariables.afm}}"}}},"listCompanyContacts":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) to list contacts for"}},"required":["companyId"]},"listSupportMembers":{"type":"object","properties":{}},"createTicket":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) — required by the ERP"},"contactId":{"type":"string"},"supportMemberId":{"type":"string"},"title":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"callUrl":{"type":"string","description":"Template — defaults to {{call.call_url}}"}},"required":["companyId","title","summary"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["pylonGetCustomer","pylonSearchItems","pylonGetCustomerBalance","pylonCreateSalesOrder","pylonGetData","pylonPostData"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"pylonConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","createSalesOrder","getData","postData"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"createSalesOrder":{"type":"object","properties":{"customerTin":{"type":"string","description":"Customer TIN — supports {{dynamicVariables.x}}. Optional when rawData supplies the customer."},"seriesCode":{"type":"string"},"customerBranch":{"type":"string"},"paymentMethod":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0}},"required":["itemCode","quantity"]}},"rawData":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Advanced: a JSON object merged verbatim into the Pylon order payload, overriding the structured fields above. Use native Pylon column names, e.g. {\"Lines\":[{\"CenlItemCode\":\"GG11\",\"CenlAMeasurementQty\":2}],\"CsdcRemarks\":\"…\"}. String values support {{dynamicVariables.x}} templates. Bypasses the structured-field validation, so it must match the target Script exactly."}}},"getData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined getjsondata Script code, e.g. itemsVoiceAgent or custInfoVoice"},"extras":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Param name, e.g. @ItemCode or @phone"},"value":{"type":"string","description":"Param value — supports {{dynamicVariables.x}}"}},"required":["name","value"]},"description":"Script parameters; omit or [] for none"},"packageSize":{"type":"integer","minimum":1,"maximum":5000,"description":"Page size (default 200)"},"allPages":{"type":"boolean","description":"Walk every page until exhausted; otherwise just page 1"}},"required":["entitycode"]},"postData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined postdata Script code, e.g. orderVoice or SalesOrders"},"data":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"JSON object serialized into the postdata `data` field. Use the shape the target Script expects. String values support {{dynamicVariables.x}} templates."}},"required":["entitycode","data"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["entersoftGetCustomer","entersoftSearchItems","entersoftGetCustomerBalance","entersoftGetCustomerAging","entersoftRunPublicQuery","entersoftRunEbsService","entersoftCreateSalesDoc"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"entersoftOneConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","runPublicQuery","runEbsService","createSalesDoc"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"code":{"type":"string","minLength":1,"description":"Customer code — supports templates"}},"required":["code"]},"getCustomerAging":{"type":"object","properties":{"code":{"type":"string","minLength":1}},"required":["code"]},"runPublicQuery":{"type":"object","properties":{"publicQueryGid":{"type":"string"},"groupId":{"type":"string"},"filterId":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Param object — values may be templates"}}},"runEbsService":{"type":"object","properties":{"serviceName":{"type":"string","minLength":1},"parameters":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}}},"required":["serviceName"]},"createSalesDoc":{"type":"object","properties":{"customerGid":{"type":"string"},"customerCode":{"type":"string"},"series":{"type":"string"},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemGid":{"type":"string"},"itemCode":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"ebsServiceName":{"type":"string"}},"required":["lines"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["wooGetCustomer","wooGetOrdersByCustomer","wooGetOrderById","wooSearchProducts","wooGetProductById","wooCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"wooCommerceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric WooCommerce customer id"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string"},"sku":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric customer id (0 for guest)"},"lineItems":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"integer","minimum":0},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","lineItems"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["opencartGetCustomer","opencartGetOrdersByCustomer","opencartGetOrderById","opencartSearchProducts","opencartGetProductById","opencartCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"opencartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"manufacturer":{"type":"string","description":"Exact manufacturer filter. Optional."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Existing OpenCart customer id (for logged-in orders)."},"firstname":{"type":"string"},"lastname":{"type":"string"},"email":{"type":"string"},"telephone":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1},"comment":{"type":"string"}},"required":["products"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["magentoGetCustomer","magentoGetOrdersByCustomer","magentoGetOrderById","magentoSearchProducts","magentoGetProductById","magentoListShippingOptions"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"magentoConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","listShippingOptions"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento order increment id (receipt number) or numeric entity id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento product id."}},"required":["productId"]},"listShippingOptions":{"type":"object","properties":{"countryId":{"type":"string","description":"Destination country as ISO-2 code, e.g. \"GR\". Defaults to \"GR\"."},"postcode":{"type":"string","description":"Destination postcode. Supports templates."},"region":{"type":"string","description":"Optional region/state name."},"sku":{"type":"string","description":"Optional product SKU to price against."}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["megasoftGetCustomer","megasoftSearchProducts","megasoftGetProductByCode","megasoftListShippingMethods","megasoftListPaymentMethods","megasoftGetCustomerBalance","megasoftGetCustomerOrders","megasoftGetOrderStatus","megasoftGetCustomerPurchases","megasoftListOffers","megasoftGetItemPrice","megasoftGetProductStock","megasoftCreateOrder","megasoftCancelOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"megasoftConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchProducts","getProductByCode","listShippingMethods","listPaymentMethods","getCustomerBalance","getCustomerOrders","getOrderStatus","getCustomerPurchases","listOffers","getItemPrice","getProductStock","createOrder","cancelOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getProductByCode":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"getCustomerBalance":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."}},"required":["customerCode"]},"getCustomerOrders":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"orderNo":{"type":"string","description":"Optional order number filter. Supports templates."}},"required":["customerCode"]},"getOrderStatus":{"type":"object","properties":{"orderNo":{"type":"string","description":"Optional order number. Supports templates."},"date":{"type":"string","description":"Optional modified-since date (yyyy-MM-dd)."}}},"getCustomerPurchases":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"itemCode":{"type":"string"}},"required":["customerCode"]},"listOffers":{"type":"object","properties":{"offerId":{"type":"string"},"activeOnly":{"type":"boolean","default":true},"dateFrom":{"type":"string"}}},"getItemPrice":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["customerCode","itemCode"]},"getProductStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"createOrder":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."},"qty":{"oneOf":[{"type":"number","minimum":0},{"type":"string","minLength":1}],"description":"Quantity. Number or template string."},"comments":{"type":"string"}},"required":["customerCode","itemCode","qty"]},"cancelOrder":{"type":"object","properties":{"orderNo":{"type":"string","minLength":1,"description":"Megasoft order number. Supports templates."},"seiraPar":{"type":"string","minLength":1,"description":"Order series / parastatiko code. Supports templates."}},"required":["orderNo","seiraPar"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["gonnaOrderSearchCatalog","gonnaOrderCheckDeliveryAddress","gonnaOrderGetCustomer","gonnaOrderGetCustomerOrders","gonnaOrderGetOrderStatus","gonnaOrderCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"gonnaOrderConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["searchCatalog","checkDeliveryAddress","getCustomer","getCustomerOrders","getOrderStatus","createPaymentLink"]},"searchCatalog":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text menu search. Supports {{dynamicVariables.x}}."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"checkDeliveryAddress":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Delivery address. Supports templates."}},"required":["address"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","name"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getCustomerOrders":{"type":"object","properties":{"customerId":{"type":"string","minLength":1,"description":"Customer id. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":10,"default":5}},"required":["customerId"]},"getOrderStatus":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid. Supports templates."}},"required":["orderUuid"]},"createPaymentLink":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid to charge for. Supports templates."},"amount":{"type":"string","description":"Amount override. Leave blank to use the order total."}},"required":["orderUuid"]}},"required":["operation"],"example":{"operation":"checkDeliveryAddress","checkDeliveryAddress":{"address":"{{dynamicVariables.callerAddress}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["webhotelierCheckAvailability","webhotelierSearchBookings","webhotelierGetReservation","webhotelierGetAvailabilityCalendar","webhotelierGetRooms","webhotelierGetRates"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"webhotelierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["checkAvailability","searchBookings","getReservation","getAvailabilityCalendar","getRooms","getRates"]},"checkAvailability":{"type":"object","properties":{"checkin":{"type":"string","minLength":1,"description":"Check-in date YYYY-MM-DD. Supports templates."},"checkout":{"type":"string","minLength":1,"description":"Check-out date YYYY-MM-DD. Supports templates."},"adults":{"type":"string","minLength":1,"description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"rooms":{"type":"string","description":"Number of rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["checkin","checkout","adults"]},"searchBookings":{"type":"object","properties":{"lastName":{"type":"string","description":"Guest last name. Supports templates. Provide this or email."},"email":{"type":"string","description":"Guest email. Supports templates. Provide this or lastName."},"checkinFrom":{"type":"string","description":"Earliest check-in YYYY-MM-DD. Supports templates."},"checkinTo":{"type":"string","description":"Latest check-in YYYY-MM-DD. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getReservation":{"type":"object","properties":{"resId":{"type":"string","minLength":1,"description":"Reservation id. Supports templates."}},"required":["resId"]},"getAvailabilityCalendar":{"type":"object","properties":{"fromd":{"type":"string","minLength":1,"description":"Calendar start / check-in date YYYY-MM-DD. Supports templates."},"tod":{"type":"string","description":"Calendar end / check-out date YYYY-MM-DD (max 3 months from fromd). Supports templates."},"adults":{"type":"string","description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"room":{"type":"string","description":"Room-type code filter. Supports templates."},"rate":{"type":"string","description":"Rate id filter. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["fromd"]},"getRooms":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code for a single room. Empty = list all rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getRates":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code to scope rates. Supports templates."},"rateId":{"type":"string","description":"Rate id for a single rate (requires roomCode). Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}}},"required":["operation"],"example":{"operation":"getReservation","getReservation":{"resId":"{{dynamicVariables.resId}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hosthubIdentifyCaller","hosthubSearchReservations","hosthubGetReservation","hosthubListRentals","hosthubCheckAvailability"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hosthubConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["identifyCaller","searchReservations","getReservation","listRentals","checkAvailability"]},"identifyCaller":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"description":"Caller phone number. Supports templates (e.g. {{call.phone_number}})."}},"required":["phone"]},"searchReservations":{"type":"object","properties":{"name":{"type":"string","description":"Guest name. Supports templates. Provide one of name / phone / confirmationCode."},"phone":{"type":"string","description":"Guest phone. Supports templates."},"confirmationCode":{"type":"string","description":"Channel confirmation code. Supports templates."}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Hosthub reservation (calendar-event) id. Supports templates."}},"required":["id"]},"getRental":{"type":"object","properties":{"rentalId":{"type":"string","description":"Rental id for a single rental. Empty = list all rentals. Supports templates."}}},"checkAvailability":{"type":"object","properties":{"rentalId":{"type":"string","minLength":1,"description":"Rental id to check. Supports templates."},"from":{"type":"string","minLength":1,"description":"Start date YYYY-MM-DD. Supports templates."},"to":{"type":"string","minLength":1,"description":"End date YYYY-MM-DD. Supports templates."}},"required":["rentalId","from","to"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["prestashopGetCustomer","prestashopGetOrdersByCustomer","prestashopGetOrderById","prestashopSearchProducts","prestashopGetProductById","prestashopCreateOrder","prestashopUpdateOrderStatus"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"prestashopConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder","updateOrderStatus"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"reference":{"type":"string","description":"Exact reference (SKU) filter."},"ean13":{"type":"string","description":"Exact EAN-13 barcode filter."},"mpn":{"type":"string","description":"Exact MPN filter."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id."},"addressDeliveryId":{"oneOf":[{"type":"number"},{"type":"string"}]},"addressInvoiceId":{"oneOf":[{"type":"number"},{"type":"string"}]},"cartId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Pre-existing cart id (PrestaShop requires it)."},"currencyId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"langId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"carrierId":{"oneOf":[{"type":"number"},{"type":"string"}]},"payment":{"type":"string","minLength":1,"description":"Human-readable payment label."},"module":{"type":"string","description":"Payment module code, e.g. \"ps_checkpayment\"."},"totalPaid":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProducts":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProductsWithTax":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalShipping":{"oneOf":[{"type":"number"},{"type":"string"}]},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"product_attribute_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0},"product_name":{"type":"string"},"unit_price":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","addressDeliveryId","addressInvoiceId","cartId","carrierId","payment","totalPaid","totalProducts","totalProductsWithTax","products"]},"updateOrderStatus":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id to update."},"orderStateId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Target order_state id (numeric, store-specific)."}},"required":["orderId","orderStateId"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["airtableGetRecord","airtableSearchRecords","airtableCreateRecord","airtableUpdateRecord"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"airtableConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getRecord","searchRecords","createRecord","updateRecord"]},"getRecord":{"type":"object","properties":{"by":{"type":"string","enum":["phone","id"],"description":"Look up by mapped phone field, or by Airtable record id"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchRecords":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"createRecord":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["fields"]},"updateRecord":{"type":"object","properties":{"recordId":{"type":"string","minLength":1,"description":"Airtable record id (rec...) — supports templates"},"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["recordId","fields"]}},"required":["operation"],"example":{"operation":"getRecord","getRecord":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["jiraGetIssue","jiraSearchIssues","jiraCreateIssue","jiraUpdateIssue","jiraAddComment","jiraTransitionIssue"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"jiraConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getIssue","searchIssues","createIssue","updateIssue","addComment","transitionIssue"]},"getIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key, e.g. SUP-1234 — supports {{dynamicVariables.x}}"}},"required":["issueKey"]},"searchIssues":{"type":"object","properties":{"text":{"type":"string","description":"Free-text query — supports templates"},"jql":{"type":"string","description":"Raw JQL — overrides text when present"},"projectKey":{"type":"string","description":"Scope the search to a project key"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"createIssue":{"type":"object","properties":{"summary":{"type":"string","minLength":1,"description":"Issue summary — supports templates"},"description":{"type":"string","description":"Issue description — supports templates"},"projectKey":{"type":"string","description":"Project key — falls back to the connection default"},"issueType":{"type":"string","description":"Issue type name — falls back to the connection default"},"priority":{"type":"string","description":"Priority name (e.g. High)"},"assignee":{"type":"string","description":"Assign to a person by email or name — supports templates"}},"required":["summary"]},"updateIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key to update — supports templates"},"summary":{"type":"string","description":"New summary — supports templates"},"description":{"type":"string","description":"New description — supports templates"},"priority":{"type":"string","description":"New priority name"}},"required":["issueKey"]},"addComment":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"body":{"type":"string","minLength":1,"description":"Comment body — supports templates"}},"required":["issueKey","body"]},"transitionIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"status":{"type":"string","minLength":1,"description":"Target status name, e.g. \"In Progress\" — supports templates"}},"required":["issueKey","status"]}},"required":["operation"],"example":{"operation":"createIssue","createIssue":{"summary":"Callback requested by {{callerPhone}}","description":"{{transcript}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleChatSendMessage","googleChatSendToDefaultSpace","googleChatSendViaWebhook"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleChatConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["sendMessage","sendToDefaultSpace","sendViaWebhook"]},"sendMessage":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque Google Chat space resource (spaces/AAQA...) — set via UI picker"},"spaceDisplayName":{"type":"string","description":"Cached display name for the node summary"},"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string","description":"Optional thread key for in-thread replies"}},"required":["spaceName","body"]},"sendToDefaultSpace":{"type":"object","properties":{"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string"}},"required":["body"]},"sendViaWebhook":{"type":"object","properties":{"webhookId":{"type":"string","minLength":1,"description":"GoogleChatWebhook document id — set via UI picker"},"webhookLabel":{"type":"string","description":"Cached webhook label for the node summary"},"body":{"type":"string","minLength":1},"threadKey":{"type":"string"}},"required":["webhookId","body"]}},"required":["operation"],"example":{"operation":"sendToDefaultSpace","sendToDefaultSpace":{"body":"New lead from {{caller_name}} ({{caller_phone}})"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["searchContact"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"searchContactConfig":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Phone number to look up (template). Most reliable identifier: matched on the stored phone index, so +30/30/national forms all hit the same contact."},"email":{"type":"string","description":"Email address to look up (template). Matched case-insensitively on the main email and every listed email."},"name":{"type":"string","description":"Name to look up (template). Fuzzy: case- and accent-insensitive, Greek/Latin spellings and common inflections. May match several contacts."}},"example":{"phoneNumber":"{{call.phone_number}}","email":"","name":""}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["managedAgent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"managedAgentConfig":{"type":"object","properties":{"prompt":{"type":"string","maxLength":10000,"default":"","description":"System prompt rendered with {{transcript}}, {{call_summary}}, {{contact}}, {{extracted_entities}}"},"builtInTools":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}},"default":[],"description":"Full AgentTool configurations the LLM may call."},"apiTools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_]{1,40}$","description":"Tool name shown to the LLM; must be unique within the node"},"description":{"type":"string","minLength":10,"maxLength":500,"description":"How the LLM decides when to call this tool"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"default":[],"description":"Input schema for the LLM"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"description":"HTTP request configuration (URL, headers, method, body) — reused from function-call api runner","example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["name","description","apiConfig"]},"default":[],"description":"Inline API tools with name + description + HTTP config"},"mcpServers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the MCP server"},"description":{"type":"string","description":"Optional description"},"serverUrl":{"type":"string","format":"uri","description":"MCP server endpoint"},"transport":{"type":"string","enum":["http","sse"],"description":"Transport: http or sse"},"authType":{"type":"string","enum":["none","bearer","oauth"],"description":"Authentication mode"},"authValue":{"type":"string","description":"Token / credential value — encrypted at rest"},"enabledTools":{"type":"array","items":{"type":"string"},"description":"Whitelist of tools exposed to the LLM. Omit to expose every tool the server publishes."}},"required":["name","serverUrl","transport","authType"]},"default":[],"description":"MCP servers whose tools the LLM may call"},"models":{"type":"object","properties":{"primary":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"description":"Model used by the loop by default","example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"escalation":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Optional fallback model rerun on the whole session if primary failed/stuck. Must use the same provider as primary."}},"required":["primary"]},"limits":{"type":"object","properties":{"maxIterations":{"type":"integer","minimum":0,"maximum":50,"default":15,"description":"Hard cap on LLM turns per run. Set to 0 for no limit (cost cap still enforced)."},"maxCostUsd":{"type":"number","minimum":0,"maximum":0.5,"default":0.5,"description":"Hard cap on total cost (USD) per run. Range: 0 to 0.5."},"stuckDetection":{"type":"boolean","default":true,"description":"Bail if the model calls the same tool with the same args twice in a row"}},"default":{}},"routing":{"type":"object","properties":{"onSuccess":{"type":"string","description":"Next workflow node ID when the run completes successfully"},"onPartial":{"type":"string","description":"Next workflow node ID when the run completed but with partial results"},"onFailure":{"type":"string","description":"Next workflow node ID when the run failed"}},"default":{}},"dryRun":{"type":"boolean","default":false},"enableSubagents":{"type":"boolean","default":false},"maxConcurrentSubagents":{"type":"integer","minimum":1,"maximum":10,"default":5},"maxSubagentIterations":{"type":"integer","minimum":1,"maximum":20,"default":8},"knowledgeFileIds":{"type":"array","items":{"type":"string"},"default":[],"description":"Knowledge files the agent can search via search_knowledge. Empty list = no knowledge tool offered."},"knowledgeRerank":{"type":"object","properties":{"enabled":{"type":"boolean","default":true,"description":"Run the rerank pass. When off, top-K is taken directly from the raw retrieval score (faster but noisier context for the main agent)."},"model":{"type":"string","default":"gpt-5.6-luna","description":"Model used for the rerank pass. Should be small/cheap — its job is ranking, not reasoning. Same provider as the node's primary model."},"candidatesK":{"type":"integer","minimum":5,"maximum":200,"default":50,"description":"How many candidates to retrieve from Pinecone before reranking. Higher = better recall, more rerank tokens. 50 is the sweet spot."},"returnK":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"How many chunks to return after reranking. The main agent sees only these."}},"default":{}},"enableScraping":{"type":"boolean","default":false,"description":"When true, agent gets scrape_website(url) tool that fetches+summarises a page via ScraperService."},"workflowToolIds":{"type":"array","items":{"type":"string"},"default":[],"description":"IDs of during-call workflows the agent may call as tools. Only their duringCall triggers run; onCallEnd-triggered or managed-agent-containing workflows are rejected to prevent recursion."}},"example":{"prompt":"You are an order assistant. From the call transcript, identify the requested products, look them up, and create an order. Use the provided tools.","builtInTools":[],"apiTools":[],"mcpServers":[],"models":{"primary":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0}},"limits":{"maxIterations":15,"maxCostUsd":0.5,"stuckDetection":true},"routing":{"onSuccess":"node-success","onFailure":"node-create-ticket"},"dryRun":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"nodeType"}},"html":{"type":"string"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}]}},"required":["id","name","position","inputs","outputs"],"example":{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}},"description":"Action nodes in the flow"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"visibility":{"type":"string","enum":["private","resellerRead","resellerWrite","globalRead"],"description":"Workflow visibility and access control"},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"WorkFlowVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer; absent for workflows that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","visibility"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Handle Incoming Call","description":"Automated call handling flow","type":"flow","executeAt":"immediate","visibility":"private","trigger":{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}},"nodes":[{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"llmCompletionConfig","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"connections":[{"node":"2","input":"default","output":"default","label":"Continue"}],"files":[{"id":"file_123","filename":"welcome.wav","s3Id":"s3-file-123","displayUrl":"https://example.com/files/welcome.wav"}]}}},"knowledgeFiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"The name of the knowledge file"},"description":{"type":"string","description":"Optional description of the knowledge file"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Language of the knowledge file"},"texts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"The subject/title of the text (shown as the knowledge entry)"},"text":{"type":"string","minLength":1,"description":"The text content"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"summary":{"type":"string","description":"One line saying what this text covers, for the agent-facing knowledge index"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["name","text","generateWithAi"]},"description":"Array of text content linked with the knowledge"},"links":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The base URL for the link"},"link":{"type":"array","items":{"type":"object","properties":{"link":{"type":"string","format":"uri","description":"The actual link URL"},"enabled":{"type":"boolean","description":"Whether the link is enabled for processing"},"lastScrapedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contentHash":{"type":"string","description":"Hash of the last scraped content; lets a re-scrape skip URLs whose content is unchanged"},"etag":{"type":"string","description":"Last ETag from the origin; sent as If-None-Match so an unchanged page returns 304"},"lastModified":{"type":"string","description":"Last Last-Modified from the origin; sent as If-Modified-Since for conditional re-fetch"},"lastScrapeAttemptAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastScrapeError":{"type":"string","description":"Why the last attempt produced nothing. Cleared on a successful scrape; set means the page is failing, not merely empty"},"title":{"type":"string","description":"The page's own declared name, from its schema.org markup — used to show the agent what this knowledge base covers"},"summary":{"type":"string","description":"One line saying what this page is about, so the agent can pick the right page before searching rather than after"}},"required":["link","enabled"]},"minItems":1,"description":"Array of link details"},"scrapeInterval":{"type":"string","enum":["off","daily","weekly","monthly"],"description":"How often the link source is automatically re-scraped. \"off\" disables re-scraping; minimum cadence is daily.","default":"off"},"crawlNewLinks":{"type":"boolean","default":false,"description":"On each re-scrape, re-crawl the base URL and ingest any newly discovered links"},"selectAllByDefault":{"type":"boolean","default":false,"description":"Auto-enable links discovered by a re-scrape crawl instead of leaving them disabled"},"excludeUrls":{"type":"array","items":{"type":"string"},"default":[],"description":"URLs to never include, even if discovered by a crawl"},"allowHosts":{"type":"array","items":{"type":"string"},"description":"Extra hosts a re-scrape crawl may add pages from. The base URL's own host and its subdomains are always allowed; every other host is skipped"},"contentFilter":{"type":"string","maxLength":2000,"description":"AI instruction for which pages to keep vs permanently exclude (e.g. only upcoming shows)"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed","default":"not_started"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["url","link","generateWithAi"]},"description":"Array of links linked with the knowledge"},"files":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the file"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"file":{"type":"object","properties":{"buffer":{"type":"object","description":"Any valid JSON value"},"originalname":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"name":{"type":"string"},"encoding":{"type":"string"},"tempFilePath":{"type":"string"},"truncated":{"type":"boolean"},"md5":{"type":"string"}},"description":"File upload schema for multipart/form-data"},"buffer":{"type":"object","description":"Any valid JSON value"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"text":{"type":"string","description":"The extracted text content from the file"},"id":{"type":"string","description":"Optional unique identifier"},"s3Key":{"type":"string","description":"S3 storage key for the file"},"displayUrl":{"type":"string","description":"Public display URL for the file"},"mimeType":{"type":"string","description":"MIME type of the file"},"summary":{"type":"string","description":"One line saying what this file covers, for the agent-facing knowledge index"}},"required":["name","generateWithAi","text","mimeType"]},"description":"Array of files linked with the knowledge with S3 information"},"emails":{"type":"array","items":{"type":"object","properties":{"emailId":{"type":"string","minLength":1,"description":"The email ID"},"text":{"type":"string","minLength":1,"description":"The text content of the email"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["emailId","text"]},"description":"Array of emails linked with the knowledge"},"calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The call ID"},"text":{"type":"string","minLength":1,"description":"The text content of the call (transcript)"}},"required":["id","text"]},"description":"Array of calls linked with the knowledge"},"chats":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The chat ID"},"text":{"type":"string","minLength":1,"description":"The text content of the chat"}},"required":["id","text"]},"description":"Array of chats linked with the knowledge"},"contactIds":{"type":"array","items":{"type":"string"},"description":"Array of contact IDs who have access to this knowledge"},"publicAccess":{"type":"boolean","description":"Whether this knowledge is publicly accessible"},"summaryLevelOfDetail":{"type":"string","enum":["small","medium","large"],"description":"Level of detail for AI-generated summaries"},"knowledgeDataIds":{"type":"array","items":{"type":"string"},"description":"Array of knowledge data IDs linked with this knowledge file"},"knowledgeData":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"sourceId":{"type":"string","description":"Optional unique identifier for the source"},"source":{"type":"string","description":"The source name or identifier"},"sourceUrl":{"type":"string","description":"Originating URL for link-sourced rows"},"sourceType":{"type":"string","enum":["texts","links","files","emails","calls","chats","questions","custom"],"description":"The type of source this knowledge data comes from"},"question":{"type":"string","description":"The question or query this knowledge data answers"},"answer":{"type":"string","description":"The answer or response to the question"},"protected":{"type":"boolean","description":"Whether this knowledge data is protected from modification"},"knowledgeFileId":{"type":"string","description":"Reference to the parent knowledge file"},"contactId":{"type":"string","description":"Optional reference to the associated contact (contact id)"},"isPrimaryVector":{"type":"boolean","description":"True for the canonical Q&A row; false for the auxiliary embedding row."},"timesUsed":{"type":"number","description":"Number of times this knowledge data has been used/accessed"},"alternates":{"type":"array","items":{"type":"string"},"description":"Alternate phrasings of the question (extra retrieval entry points to the same answer)"},"alternatesGenerated":{"type":"boolean","description":"Alternates were AI-generated rather than supplied by the caller"},"unanswered":{"type":"boolean","description":"True when this is a question a caller asked that the agent could not answer. Never retrievable until someone supplies the answer."},"timesAsked":{"type":"number","description":"How many separate calls have asked this unanswered question — what to answer first."}},"required":["id","createdAt","active","createdBy","createdById","companyId","source","sourceType","question","answer","protected","knowledgeFileId"],"description":"Response schema for knowledge data including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","sourceId":"file_12345","source":"company_policy.pdf","sourceType":"files","question":"What are the company policies for employee conduct?","answer":"The company policies for employee conduct include maintaining professional behavior, following dress code guidelines, and treating colleagues with respect.","protected":false,"knowledgeFileId":"507f1f77bcf86cd799439011","timesUsed":0,"vectorId":"vec_12345"}},"description":"Array of knowledge data entries linked with this knowledge file"},"googleDriveFolderId":{"type":"string","description":"Google Drive folder ID"},"googleDriveFolderUpdatedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"summary":{"type":"string","description":"AI-generated summary of the knowledge content"},"keyPoints":{"type":"string","description":"AI-generated key points extracted from the knowledge content"},"hidden":{"type":"boolean","description":"When true, this file is hidden from user-facing list endpoints."},"learningAutoAdd":{"type":"boolean","description":"false = Learning auto-add never approves into this base; absent = allowed."},"autoGenerated":{"type":"boolean","description":"When true, this knowledge file is populated automatically by the system (transferred-call post-analysis)."},"sourceAgentId":{"type":"string","description":"Owning agent id when the file is auto-generated for a single agent."},"isMemoryStore":{"type":"boolean","description":"When true, marks the per-company knowledge file holding contact memories."},"isCompanyKnowledgeStore":{"type":"boolean","description":"When true, marks the per-company file collecting business-wide unanswered questions."},"isCallMemoryStore":{"type":"boolean","description":"When true, marks a hidden per-user call-memory knowledge file for voice-assist."},"sourceUserId":{"type":"string","description":"Owning user id when isCallMemoryStore is true."},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed"},"unansweredCount":{"type":"integer","minimum":0,"description":"How many unanswered caller questions are waiting on this file. Set on the agent own-file and company own-file endpoints."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","language"],"description":"Response schema for knowledge files including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Company Policies and Procedures","description":"Comprehensive guide covering all company policies, procedures, and best practices","summary":"This knowledge base contains comprehensive information about company policies...","keyPoints":"1. Employee conduct policies\n2. Remote work guidelines\n3. Safety procedures","summaryLevelOfDetail":"medium","googleDriveFolderId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveFolderUpdatedAt":"2026-10-20T15:02:35.126Z"}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt","analysisProperties"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["transfer-call"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"transferType":{"type":"string","enum":["warm","cold"]},"voipConnectionIds":{"type":"array","items":{"type":"string"}},"connectDynamically":{"type":"boolean"},"showCallerId":{"type":"boolean"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"transferCallBasedOnPromptInstructions":{"type":"boolean"},"promptForTransferReason":{"type":"string"},"announceTransferReason":{"type":"boolean"},"analyzeTransferredCall":{"type":"boolean"},"agentIdToAnalyzeTransferredCall":{"type":"string"},"secondsToWaitForCallerToAnswer":{"type":"number","minimum":10,"maximum":60},"voipConnections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for the VoIP connection"},"dial":{"type":"number","description":"Dial number or extension assigned to this connection"},"reason":{"type":"string","description":"Internal notes or purpose description for this connection"},"connectionType":{"type":"string","enum":["User","External","Agent"],"description":"Type of destination: 'Agent', 'User', or 'External'"},"agentId":{"type":"string","description":"ID of the AI agent this connection routes to (only for Agent type connections)"},"sipDomain":{"type":"string","description":"SIP domain for this connection."},"phone":{"type":"string","description":"External phone number this connection forwards to (only for External type connections)"},"userId":{"type":"string","description":"ID of the user this connection routes to (only for User type connections)"},"start":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily start time when this connection becomes available"},"end":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily end time when this connection becomes unavailable"},"canAgentTranscribe":{"type":"boolean","description":"Whether the agent can transcribe calls to this connection"},"canAgentRecord":{"type":"boolean","description":"Whether the agent can record calls to this connection"},"canAgentAnalyze":{"type":"boolean","description":"Whether the agent can analyze calls to this connection"},"canAgentSpeakWhenAsked":{"type":"boolean","description":"Whether the agent can speak when asked during calls to this connection"},"allDay":{"type":"boolean","description":"Whether this connection is available 24/7 (ignores start/end times when true)"},"syncWithGoogle":{"type":"boolean","description":"Whether availability is synchronized with Google Calendar"},"syncWithGoogleStatus":{"type":"string","enum":["open","closed"],"description":"Google Calendar sync mode: 'open' for free time availability, 'closed' for busy time unavailability"},"messageToUser":{"type":"string","description":"Custom message or announcement played before transferring calls to this connection"},"aiGeneratedMessage":{"type":"boolean","description":"Whether transfer messages are dynamically generated by AI based on call context"},"transcription_enabled":{"type":"boolean","description":"Whether real-time transcription is enabled for calls on this connection"},"agent":{"type":"object","properties":{"id":{"type":"string","description":"Agent's unique identifier"},"name":{"type":"string","description":"Agent's display name"}},"description":"Full agent details when connectionType is 'Agent' (populated from agents database)"},"user":{"type":"object","properties":{"id":{"type":"string","description":"User's unique identifier"},"name":{"type":"string","description":"User's full name"},"email":{"type":"string","description":"User's email address"},"defaultCompanyId":{"type":"string","description":"User's default company ID"},"picture":{"type":"string","description":"User's profile picture URL"},"emailVerified":{"type":"boolean","description":"Whether the user's email has been verified"},"lastConnectedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"isConnected":{"type":"boolean","description":"Whether the user is currently online/connected"}},"description":"Full user details when connectionType is 'User' (populated from users database)"},"username":{"type":"string","description":"SIP username for direct authentication (advanced configurations only)"},"password":{"type":"string","description":"SIP password for direct authentication (advanced configurations only)"},"ipAddress":{"type":"array","items":{"type":"string"},"description":"Whitelist of allowed IP addresses for security restrictions"},"extensionRegistrationIds":{"type":"array","items":{"type":"string"},"description":"IDs of the extension registrations linked with this connection"},"extensionRegistrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"voipConnectionId":{"type":"string","description":"ID of the VoIP Connection that owns this extension (legacy)"},"phoneExtensionId":{"type":"string","description":"ID of the Phone Extension that owns this extension"},"username":{"type":"string","description":"SIP username/extension that is registered"},"contactUri":{"type":"string","description":"Full SIP Contact URI for routing calls to this extension"},"remoteAddress":{"type":"string","description":"IP address of the registered SIP client"},"clientIp":{"type":"string","description":"Public client IP when known"},"remotePort":{"type":"number","description":"Port number of the registered SIP client"},"transport":{"type":"string","enum":["udp","tcp","tls","websocket"],"description":"Transport protocol: 'udp', 'tcp', 'tls' for SIP; 'websocket' for app clients"},"registeredAt":{"type":"string","format":"date-time","description":"Timestamp when this extension was registered (ISO 8601 format)"},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp when this registration will expire (ISO 8601 format)"},"expires":{"type":"number","description":"Number of seconds until expiration (decreases over time)"},"userAgent":{"type":"string","description":"SIP User-Agent identifying the client software"},"callId":{"type":"string","description":"SIP Call-ID from the REGISTER request"},"bindingSource":{"type":"string","enum":["register","invite"],"description":"'register' = the phone sent a REGISTER and can be rung; 'invite' = stand-in written from an authenticated outbound INVITE, used only for that call's in-dialog requests and never for ringing the phone"},"consecutiveInviteFailures":{"type":"integer","description":"Liveness skip-list counter. Bumped on 5xx/timeout from fork-INVITEs, reset on 200 OK. When ≥3 and `lastInviteFailureAt` is within the last 5 minutes, the registration is skipped by routing."},"lastInviteFailureAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"voipConnection":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"agentId":{"type":"string"},"userId":{"type":"string"},"connectionType":{"type":"string"}},"description":"Legacy VoIP Connection — only populated for pre-migration rows."},"userEndpoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"number":{"type":"string"},"status":{"type":"string"}},"description":"Populated UserEndpoint this registration belongs to."}},"required":["id","createdAt","active","createdBy","createdById","companyId","username","contactUri","remoteAddress","remotePort","transport","registeredAt","expiresAt","expires"],"description":"Extension registration details including contact information and expiration status","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","voipConnectionId":"507f1f77bcf86cd799439011","username":"1001","contactUri":"sip:1001@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300,"userAgent":"Zoiper 5.5.10","callId":"abc123@192.168.1.100","voipConnection":{"id":"507f1f77bcf86cd799439011","name":"Customer Support","agentId":"507f1f77bcf86cd799439012","connectionType":"Agent"}}},"description":"Active SIP device registrations for this connection (virtual populate from ExtensionRegistration collection, filtered to show only non-expired registrations). Each entry represents a physical device (phone, softphone, etc.) currently registered with this extension."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","connectionType","syncWithGoogle","syncWithGoogleStatus"],"description":"Response schema for VoIP connection including complete configuration, company metadata, and linked agent or user details","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support","dial":1,"reason":"General customer support inquiries","connectionType":"Agent","agentId":"507f1f77bcf86cd799439011","phone":"+1234567890","userId":"507f1f77bcf86cd799439012","start":{"hours":9,"minutes":0},"end":{"hours":17,"minutes":0},"canAgentTranscribe":true,"canAgentRecord":true,"canAgentAnalyze":true,"canAgentSpeakWhenAsked":false,"allDay":false,"syncWithGoogle":true,"syncWithGoogleStatus":"open","messageToUser":"Welcome to customer support!","aiGeneratedMessage":false,"agent":{"id":"507f1f77bcf86cd799439011","name":"John Doe","email":"john@example.com"},"user":{"id":"507f1f77bcf86cd799439012","name":"Jane Smith","email":"jane@example.com"},"registrations":[{"id":"507f1f77bcf86cd799439013","username":"customer_support","contactUri":"sip:customer_support@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300}]}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","transferType"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["end-call"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["press-digit"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["email"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","emailConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["sms"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","smsConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["api"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","apiConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["logic-split"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["extract-analysis"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"prompt":{"type":"string"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions"]}],"discriminator":{"propertyName":"nodeType"},"description":"Node-specific data and configuration"},"html":{"type":"string","description":"HTML content for the node display"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}],"description":"Type identifier for the node"}},"required":["id","name","position","inputs","outputs"],"example":{"id":"1","name":"Welcome Message","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"}]},"inputs":{},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}}},"connections":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","description":"Target node identifier for the connection"},"input":{"type":"string","description":"Input port identifier on the target node"},"output":{"type":"string","description":"Output port identifier on the source node"},"label":{"type":"string","description":"Display label for the connection"}},"required":["node"],"description":"Schema for a connection between two flow nodes","example":{"node":"2","input":"default","output":"default","label":"Continue"}}},"integrations":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"source":{"type":"string"},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"read":{"type":"boolean"},"write":{"type":"boolean"}},"required":["name","read","write"]}}},"required":["enabled","source","properties"]}},"knowledgeFiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"The name of the knowledge file"},"description":{"type":"string","description":"Optional description of the knowledge file"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Language of the knowledge file"},"texts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"The subject/title of the text (shown as the knowledge entry)"},"text":{"type":"string","minLength":1,"description":"The text content"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"summary":{"type":"string","description":"One line saying what this text covers, for the agent-facing knowledge index"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["name","text","generateWithAi"]},"description":"Array of text content linked with the knowledge"},"links":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The base URL for the link"},"link":{"type":"array","items":{"type":"object","properties":{"link":{"type":"string","format":"uri","description":"The actual link URL"},"enabled":{"type":"boolean","description":"Whether the link is enabled for processing"},"lastScrapedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contentHash":{"type":"string","description":"Hash of the last scraped content; lets a re-scrape skip URLs whose content is unchanged"},"etag":{"type":"string","description":"Last ETag from the origin; sent as If-None-Match so an unchanged page returns 304"},"lastModified":{"type":"string","description":"Last Last-Modified from the origin; sent as If-Modified-Since for conditional re-fetch"},"lastScrapeAttemptAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastScrapeError":{"type":"string","description":"Why the last attempt produced nothing. Cleared on a successful scrape; set means the page is failing, not merely empty"},"title":{"type":"string","description":"The page's own declared name, from its schema.org markup — used to show the agent what this knowledge base covers"},"summary":{"type":"string","description":"One line saying what this page is about, so the agent can pick the right page before searching rather than after"}},"required":["link","enabled"]},"minItems":1,"description":"Array of link details"},"scrapeInterval":{"type":"string","enum":["off","daily","weekly","monthly"],"description":"How often the link source is automatically re-scraped. \"off\" disables re-scraping; minimum cadence is daily.","default":"off"},"crawlNewLinks":{"type":"boolean","default":false,"description":"On each re-scrape, re-crawl the base URL and ingest any newly discovered links"},"selectAllByDefault":{"type":"boolean","default":false,"description":"Auto-enable links discovered by a re-scrape crawl instead of leaving them disabled"},"excludeUrls":{"type":"array","items":{"type":"string"},"default":[],"description":"URLs to never include, even if discovered by a crawl"},"allowHosts":{"type":"array","items":{"type":"string"},"description":"Extra hosts a re-scrape crawl may add pages from. The base URL's own host and its subdomains are always allowed; every other host is skipped"},"contentFilter":{"type":"string","maxLength":2000,"description":"AI instruction for which pages to keep vs permanently exclude (e.g. only upcoming shows)"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed","default":"not_started"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["url","link","generateWithAi"]},"description":"Array of links linked with the knowledge"},"files":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the file"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"file":{"type":"object","properties":{"buffer":{"type":"object","description":"Any valid JSON value"},"originalname":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"name":{"type":"string"},"encoding":{"type":"string"},"tempFilePath":{"type":"string"},"truncated":{"type":"boolean"},"md5":{"type":"string"}},"description":"File upload schema for multipart/form-data"},"buffer":{"type":"object","description":"Any valid JSON value"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"text":{"type":"string","description":"The extracted text content from the file"},"id":{"type":"string","description":"Optional unique identifier"},"s3Key":{"type":"string","description":"S3 storage key for the file"},"displayUrl":{"type":"string","description":"Public display URL for the file"},"mimeType":{"type":"string","description":"MIME type of the file"},"summary":{"type":"string","description":"One line saying what this file covers, for the agent-facing knowledge index"}},"required":["name","generateWithAi","text","mimeType"]},"description":"Array of files linked with the knowledge with S3 information"},"emails":{"type":"array","items":{"type":"object","properties":{"emailId":{"type":"string","minLength":1,"description":"The email ID"},"text":{"type":"string","minLength":1,"description":"The text content of the email"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["emailId","text"]},"description":"Array of emails linked with the knowledge"},"calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The call ID"},"text":{"type":"string","minLength":1,"description":"The text content of the call (transcript)"}},"required":["id","text"]},"description":"Array of calls linked with the knowledge"},"chats":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The chat ID"},"text":{"type":"string","minLength":1,"description":"The text content of the chat"}},"required":["id","text"]},"description":"Array of chats linked with the knowledge"},"contactIds":{"type":"array","items":{"type":"string"},"description":"Array of contact IDs who have access to this knowledge"},"publicAccess":{"type":"boolean","description":"Whether this knowledge is publicly accessible"},"summaryLevelOfDetail":{"type":"string","enum":["small","medium","large"],"description":"Level of detail for AI-generated summaries"},"knowledgeDataIds":{"type":"array","items":{"type":"string"},"description":"Array of knowledge data IDs linked with this knowledge file"},"knowledgeData":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"sourceId":{"type":"string","description":"Optional unique identifier for the source"},"source":{"type":"string","description":"The source name or identifier"},"sourceUrl":{"type":"string","description":"Originating URL for link-sourced rows"},"sourceType":{"type":"string","enum":["texts","links","files","emails","calls","chats","questions","custom"],"description":"The type of source this knowledge data comes from"},"question":{"type":"string","description":"The question or query this knowledge data answers"},"answer":{"type":"string","description":"The answer or response to the question"},"protected":{"type":"boolean","description":"Whether this knowledge data is protected from modification"},"knowledgeFileId":{"type":"string","description":"Reference to the parent knowledge file"},"contactId":{"type":"string","description":"Optional reference to the associated contact (contact id)"},"isPrimaryVector":{"type":"boolean","description":"True for the canonical Q&A row; false for the auxiliary embedding row."},"timesUsed":{"type":"number","description":"Number of times this knowledge data has been used/accessed"},"alternates":{"type":"array","items":{"type":"string"},"description":"Alternate phrasings of the question (extra retrieval entry points to the same answer)"},"alternatesGenerated":{"type":"boolean","description":"Alternates were AI-generated rather than supplied by the caller"},"unanswered":{"type":"boolean","description":"True when this is a question a caller asked that the agent could not answer. Never retrievable until someone supplies the answer."},"timesAsked":{"type":"number","description":"How many separate calls have asked this unanswered question — what to answer first."}},"required":["id","createdAt","active","createdBy","createdById","companyId","source","sourceType","question","answer","protected","knowledgeFileId"],"description":"Response schema for knowledge data including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","sourceId":"file_12345","source":"company_policy.pdf","sourceType":"files","question":"What are the company policies for employee conduct?","answer":"The company policies for employee conduct include maintaining professional behavior, following dress code guidelines, and treating colleagues with respect.","protected":false,"knowledgeFileId":"507f1f77bcf86cd799439011","timesUsed":0,"vectorId":"vec_12345"}},"description":"Array of knowledge data entries linked with this knowledge file"},"googleDriveFolderId":{"type":"string","description":"Google Drive folder ID"},"googleDriveFolderUpdatedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"summary":{"type":"string","description":"AI-generated summary of the knowledge content"},"keyPoints":{"type":"string","description":"AI-generated key points extracted from the knowledge content"},"hidden":{"type":"boolean","description":"When true, this file is hidden from user-facing list endpoints."},"learningAutoAdd":{"type":"boolean","description":"false = Learning auto-add never approves into this base; absent = allowed."},"autoGenerated":{"type":"boolean","description":"When true, this knowledge file is populated automatically by the system (transferred-call post-analysis)."},"sourceAgentId":{"type":"string","description":"Owning agent id when the file is auto-generated for a single agent."},"isMemoryStore":{"type":"boolean","description":"When true, marks the per-company knowledge file holding contact memories."},"isCompanyKnowledgeStore":{"type":"boolean","description":"When true, marks the per-company file collecting business-wide unanswered questions."},"isCallMemoryStore":{"type":"boolean","description":"When true, marks a hidden per-user call-memory knowledge file for voice-assist."},"sourceUserId":{"type":"string","description":"Owning user id when isCallMemoryStore is true."},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed"},"unansweredCount":{"type":"integer","minimum":0,"description":"How many unanswered caller questions are waiting on this file. Set on the agent own-file and company own-file endpoints."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","language"],"description":"Response schema for knowledge files including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Company Policies and Procedures","description":"Comprehensive guide covering all company policies, procedures, and best practices","summary":"This knowledge base contains comprehensive information about company policies...","keyPoints":"1. Employee conduct policies\n2. Remote work guidelines\n3. Safety procedures","summaryLevelOfDetail":"medium","googleDriveFolderId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveFolderUpdatedAt":"2026-10-20T15:02:35.126Z"}}},"workflows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"triggers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCallStart","onCallConnect","onCallEnd","onCallTransfer","onMissedCall","onDTMFInput","onKeywordDetected","duringCall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"functionName":{"type":"string","pattern":"^[a-z0-9_]+$"},"keywords":{"type":"array","items":{"type":"string"}},"condition":{"type":"string"},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"generateMessageBeforeRunningWorkflow":{"type":"boolean"},"messageAiGenerated":{"type":"boolean"},"messagePrompt":{"type":"string"},"playWaitMusic":{"type":"boolean","description":"When true (default), play keyboard wait music while this duringCall workflow tool runs"},"useProtectedValues":{"type":"boolean","description":"onCallEnd only. When true, the non-AI steps of this workflow (API call, integrations, booking, email, SMS, sheets, conditions) get the REAL values the caller said ({{protected.afm}}, {{afm_1}}, …) when the agent protects sensitive data; AI steps (llmCompletion, aiResponse, managedAgent, googleSearch) always get placeholders. Every use is audited. Only members who may reveal sensitive data can turn it on."}},"example":{"keywords":["hello","world"],"condition":"call_started","parameters":[{"name":"call_id","value":"123"}],"playWaitMusic":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onEmailReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"emailFilters":{"type":"object","properties":{"from":{"type":"array","items":{"type":"string"}},"subject":{"type":"array","items":{"type":"string"}},"labels":{"type":"array","items":{"type":"string"}}}}},"example":{"emailFilters":{"from":["test@test.com"],"subject":["test"],"labels":["test"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onAPICall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"payloadSchema":{"type":"object","properties":{"type":{"type":"string","enum":["object"]},"properties":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","enum":["object","array","string","number","boolean","date","enum"]},"required":{"type":"boolean","default":false},"properties":{"type":"object","additionalProperties":{"type":"object","description":"Circular reference detected"}},"items":{"type":"object","description":"Circular reference detected"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"},"minimum":{"type":"number"},"maximum":{"type":"number"},"enum":{"type":"array","items":{"type":"string"}}},"required":["type"]}},"required":{"type":"array","items":{"type":"string"}}},"required":["type","properties"],"description":"Expected payload structure"}},"example":{"payloadSchema":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^TX-[0-9]{8}$"},"amount":{"type":"number","minimum":0},"currency":{"type":"string","enum":["USD","EUR","GBP"]}},"required":["transactionId","amount","currency"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onContactCreated","onCompanyCreated","onDealCreated","onTicketCreated","onPropertyChange"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","property"]},"property":{"type":"string","enum":["hs_lead_status","lifecyclestage","hubspot_owner_id","companyname","domain","dealstage","amount","closedate","closed_won_reason","closed_lost_reason","pipeline","hs_pipeline_stage","hs_due_date"]}},"example":{"resource":"contact","property":"hs_lead_status"}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onWooCommerce"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"getCustomerOrders":{"type":"boolean"},"getProductByName":{"type":"boolean"},"getProductByCode":{"type":"boolean"},"productCodeType":{"type":"string","enum":["id","sku","global_unique_id"]},"createOrder":{"type":"boolean"},"getOrderById":{"type":"boolean"},"notifyEmailsOnOrderCreation":{"type":"array","items":{"type":"string"}}},"example":{"getCustomerOrders":true,"getProductByName":true,"getProductByCode":true,"productCodeType":"id","createOrder":true,"getOrderById":true,"notifyEmailsOnOrderCreation":["test@test.com"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onYubotoPbxChannelHangup","onYubotoPbxChannelAnswer","onYubotoPbxChannelCreate"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"agentId":{"type":"string"},"allowedExtensions":{"type":"array","items":{"type":"string"}}},"example":{"username":"test","password":"test","agentId":"test","allowedExtensions":["123","456"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCampaignLeadStatusChanged"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign to watch. Omit to fire for every campaign of the company."},"statuses":{"type":"array","items":{"type":"string","enum":["successful","failed","reachedMaxRetries","askedToCallBackLater","askedToNeverCallAgain","cancelled"]},"description":"Lead statuses that fire the workflow. Omit or empty = every outcome status."},"stages":{"type":"array","items":{"type":"string"},"description":"Only fire when the lead is in one of these campaign stage names. Omit or empty = any stage."}},"example":{"campaignId":"66f1c0ffee0000000000abcd","statuses":["failed","reachedMaxRetries"],"stages":[]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onShopifyEvent"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["orders/create","orders/paid","orders/fulfilled","orders/partially_fulfilled","orders/cancelled","refunds/create","fulfillments/create","fulfillments/update"]},"minItems":1,"description":"Shopify events that start the workflow."},"financialStatuses":{"type":"array","items":{"type":"string","enum":["pending","authorized","partially_paid","paid","partially_refunded","refunded","voided"]},"description":"Only when the order payment status is one of these. Empty = any."},"fulfillmentStatuses":{"type":"array","items":{"type":"string","enum":["unfulfilled","partial","fulfilled","restocked"]},"description":"Only when the order fulfillment status is one of these. Empty = any."},"shipmentStatuses":{"type":"array","items":{"type":"string","enum":["label_printed","label_purchased","confirmed","in_transit","out_for_delivery","attempted_delivery","ready_for_pickup","delivered","failure"]},"description":"Shipment topics only: only when the carrier status is one of these. Empty = any."},"paymentGateways":{"type":"array","items":{"type":"string"},"description":"Only when a payment gateway name contains one of these (case-insensitive), e.g. \"Cash on Delivery\". Empty = any."},"tags":{"type":"array","items":{"type":"string"},"description":"Only when the order has at least one of these tags (case-insensitive). Empty = any."},"minTotal":{"type":"number","minimum":0,"description":"Only when the order total is at least this amount."},"maxTotal":{"type":"number","minimum":0,"description":"Only when the order total is at most this amount."}},"required":["topics"],"example":{"topics":["orders/create"],"financialStatuses":["pending"],"paymentGateways":["Cash on Delivery"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onLeadReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"string","enum":["tiktok","meta","google_ads","linkedin","webhook","form"]},"description":"Only leads from these sources start the workflow. Empty = any source, including ones added later."},"formIds":{"type":"array","items":{"type":"string","minLength":1},"description":"Only these forms: our lead form ids (from lead_forms_list_forms). A platform form id or a form name also matches, for older triggers. Empty = any."},"requirePhone":{"type":"boolean","description":"Skip a lead with no phone number."},"includeTestSubmissions":{"type":"boolean","description":"Also fire for test submissions. Off by default."}},"example":{"sources":["google_ads","form"],"requirePhone":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"triggerType"}}},"required":["id","name","position","outputs"],"example":{"id":1,"name":"Call Start Trigger","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"},{"node":"3","output":"default"}]},"className":"trigger-node","data":{"triggerType":"onCallStart","triggerConfig":{"enabled":true,"triggerType":"onCallEnd","description":"Trigger when a new call starts"},"transitions":[2,3]}}},"description":"Trigger node that starts the flow"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"nodeType":{"type":"string","enum":["emailConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["nodeType","nodeTitle","transitions","emailConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendSms"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["nodeType","nodeTitle","transitions","smsConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["apiCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["nodeType","nodeTitle","transitions","apiConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["codeExecution"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"codeConfig":{"type":"object","properties":{"code":{"type":"string"},"language":{"type":"string","enum":["javascript","python","java","cpp","php","ruby"]},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties for the code"}},"required":["code","language"],"example":{"code":"console.log(\"Hello, world!\");","language":"javascript","properties":[{"name":"name","type":"string"}]}}},"required":["nodeType","nodeTitle","transitions","codeConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleDocConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}}},"required":["nodeType","nodeTitle","transitions","googleDocConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createEvent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"eventConfig":{"type":"object","properties":{"calendarId":{"type":"string","description":"Google calendar id. Empty = the company's primary calendar."},"summary":{"type":"string","description":"Event title."},"startDateTime":{"type":"string","description":"Start, ISO 8601 (\"2026-08-12T15:00:00\") or \"YYYY-MM-DD HH:mm\"."},"endDateTime":{"type":"string","description":"End. Empty = start + durationMinutes."},"durationMinutes":{"type":"number","minimum":1,"maximum":1440,"description":"Used only when endDateTime is empty. Defaults to 30."},"description":{"type":"string"},"location":{"type":"string"},"attendees":{"type":"string","description":"Comma-separated emails."},"timeZone":{"type":"string","description":"IANA zone. Empty = the company timezone."},"isOnline":{"type":"boolean","description":"When true, Google adds a Meet link to the event."}},"required":["durationMinutes"],"example":{"summary":"Callback for {{contact_name}}","startDateTime":"{{callback_datetime}}","durationMinutes":30,"description":"Requested during call {{call_id}}","attendees":"sales@example.com","isOnline":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendPhoneCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}}},"required":["nodeType","nodeTitle","transitions","phoneCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["llmCompletion"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}}},"required":["nodeType","nodeTitle","transitions","llmCompletionConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheet"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]}},"required":["nodeType","nodeTitle","transitions","googleSheetConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}}},"required":["nodeType","nodeTitle","transitions","googleSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendViber"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}}},"required":["nodeType","nodeTitle","transitions","viberConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["switch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"switchConfig":{"type":"object","properties":{"cases":{"type":"array","items":{"type":"object","properties":{"block":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"transition":{"type":"string"},"transitionIndex":{"type":"number"}},"required":["block"]}}},"required":["cases"],"example":{"cases":[{"transition":"Schedule Appointment","transitionIndex":1,"block":{"operator":"and","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"schedule_appointment","fieldType":"string"}]}},{"transition":"Cancel Appointment","transitionIndex":0,"block":{"operator":"or","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"cancel_appointment","fieldType":"string"}]}}]}}},"required":["nodeType","nodeTitle","transitions","switchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["if"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"ifConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","ifConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["filter"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"filterConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","filterConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["loop"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"loopConfig":{"type":"object","properties":{"array":{"type":"string"}},"required":["array"],"example":{"array":"user_response"}}},"required":["nodeType","nodeTitle","transitions","loopConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["tableNode"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"tableConfig":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","maxLength":128},"type":{"type":"string","enum":["string","number","boolean"]}},"required":["key","label"]},"maxItems":50},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"maxItems":500},"filters":{"type":"array","items":{"type":"object","properties":{"column":{"type":"string","minLength":1},"op":{"type":"string","enum":["equals","notEquals","contains","gt","lt","gte","lte"]},"value":{"type":"string"}},"required":["column","op","value"]}},"mode":{"type":"string","enum":["producer","lookup"]},"keyColumn":{"type":"string"},"keyValue":{"type":"string"}},"required":["columns","rows"],"example":{"columns":[{"key":"name","label":"Name","type":"string"},{"key":"phone","label":"Phone","type":"string"}],"rows":[{"name":"Alice","phone":"+30 210 1234567"},{"name":"Bob","phone":"+30 210 7654321"}],"mode":"producer"}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hubspotContact","hubspotCompany","hubspotDeal","hubspotTicket","hubspotTask","hubspotNote","hubspotMeeting","hubspotEmail","hubspotCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hubspotConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"operation":{"type":"string","enum":["get","create","createOrUpdate","getOrCreate","delete","update","search","list","exists"]},"value":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"associations":{"type":"array","items":{"type":"object","properties":{"associationType":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["associationType","valueType","value"],"example":{"associationType":"contact","valueType":"id","value":"123"}}},"owner":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"contactData":{"type":"object","properties":{"properties":{"type":"object","properties":{"email":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"}},"required":[]}},"example":{"email":"test@test.com","firstname":"John","lastname":"Doe","phone":"+1234567890","company":"Test Corp","website":"https://test.com","lifecyclestage":"marketingqualifiedlead","jobtitle":"Manager","hs_additional_emails":["test2@test.com"]}},"companyData":{"type":"object","properties":{"properties":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"industry":{"type":"string"},"description":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"}},"required":[]}},"example":{"name":"Test Corp","domain":"test.com","industry":"Technology","description":"Test Description","city":"Test City","country":"Test Country","phone":"1234567890","address":"Test Address","owner":{"valueType":"email","value":"test@test.com"}}},"dealData":{"type":"object","properties":{"properties":{"type":"object","properties":{"dealname":{"type":"string"},"pipeline":{"type":"string"},"stage":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string"},"closeDate":{"type":"string"},"dealType":{"type":"string","enum":["new","existing"]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["pipeline","stage"]}},"example":{"name":"Test Deal","description":"Test Description","amount":"1000","stage":"Test Stage"}},"ticketData":{"type":"object","properties":{"properties":{"type":"object","properties":{"pipeline":{"type":"string"},"stage":{"type":"string"},"priority":{"type":"string","enum":["HIGH","MEDIUM","LOW"]},"subject":{"type":"string"},"content":{"type":"string"}},"required":["pipeline","stage","subject"]}},"example":{"pipeline":"Test Pipeline","stage":"Test Stage","priority":"HIGH","subject":"Test Subject","content":"Test Content"}},"taskData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string"},"taskType":{"type":"string"},"priority":{"type":"string"},"dueDate":{"type":"string"},"repeatType":{"type":"object","properties":{"enabled":{"type":"boolean"},"type":{"type":"string","enum":["hour","day","week","month","year"]},"value":{"type":"string"}},"example":{"enabled":true,"type":"day","value":"1"}},"reminderTime":{"oneOf":[{"type":"number"},{"type":"string"}]},"notes":{"type":"string"}},"required":["title","dueDate"]}},"example":{"associations":[{"associationType":"contact","valueType":"email","value":"contact@example.com"}],"properties":{"title":"Task Title","taskType":"TODO","priority":"MEDIUM","associations":[],"timestamp":"2021-01-01","dueDate":"2021-01-01","notes":"Task Notes","ownerEmail":"owner@example.com","status":"NOT_STARTED","reminderTime":1000}}},"noteData":{"type":"object","properties":{"properties":{"type":"object","properties":{"body":{"type":"string"}},"required":[]}}},"meetingData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title of the meeting"},"body":{"type":"string","description":"Meeting description"}}}},"required":["properties"],"example":{"properties":{"title":"Initial Project Discussion","body":"Meeting to discuss project requirements and timeline"}}},"emailData":{"type":"object","properties":{"properties":{"type":"object","properties":{"subject":{"type":"string","description":"Subject of the email"},"body":{"type":"string","description":"Email body content"}},"required":[]}},"example":{"properties":{"subject":"Project Update","body":"Here are the latest updates on the project progress."}}},"callData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title/subject of the call"},"body":{"type":"string","description":"Call description and notes"},"direction":{"type":"string","enum":["INBOUND","OUTBOUND"],"description":"Call direction"},"caller":{"type":"string","description":"Caller phone number"},"callee":{"type":"string","description":"Callee phone number"},"duration":{"type":"string","description":"Call duration in milliseconds"},"disposition":{"type":"string","enum":["9d9162e7-6cf3-4944-bf63-4dff82258764","f240bbac-87c9-4f6e-bf70-924b57d47db7","a4c4c377-d246-4b32-a13b-75a56a4cd0ff","b2cf5968-551e-4856-9783-52b3da59a7d0","73a0d17f-1163-4015-bdd5-ec830791da20","17b47fee-58de-441e-a44c-c6300d46f273"],"description":"Call disposition"},"recordingUrl":{"type":"string","description":"Call recording URL"}},"required":[]}},"example":{"properties":{"title":"Test Call","body":"Test Body"}}}},"required":["resource","operation"],"example":{"resource":"call","operation":"create","owner":{"valueType":"email","value":"test@test.com"},"properties":{"callData":{"properties":{"callTitle":"Test Call","callBody":"Test Body"}}}}}},"required":["nodeType","nodeTitle","transitions","hubspotConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheetSettings"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetSettingsConfig":{"type":"object","properties":{"googleSheetId":{"type":"string","minLength":1,"description":"The unique identifier of the Google Sheet"},"sheetName":{"type":"string","minLength":1,"description":"The name of the specific sheet within the Google Sheet"},"operation":{"type":"string","enum":["getRow","getRows","updateRow","appendRow","deleteRow","getData"],"description":"The operation to perform on the Google Sheet (getRow, getRows, updateRow, appendRow, deleteRow)"},"filter":{"type":"object","properties":{"filterType":{"type":"string","enum":["index","columnName"]},"column":{"type":"string"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"fieldType":{"type":"string","enum":["string","phone","email","number","boolean","date","time","enum"]},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["filterType","column","operator","fieldType"],"example":{"filterType":"index","column":"1","operator":"eq","fieldType":"string","fieldValue":"Chris"},"description":"Filter to apply for selecting rows, such as by index or column name"},"values":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"object","description":"Any valid JSON value"}},"required":["key","value"]},"description":"Key-value pairs for the row data"}},"required":["googleSheetId","sheetName","operation"],"example":{"googleSheetId":"123","sheetName":"Sheet1","operation":"getRow","filter":{"filterType":"index","column":"1","operator":"eq","fieldType":"number","fieldValue":"152"},"values":[{"key":"Email","value":"john.doe@example.com"},{"key":"Name","value":"John Doe"}]}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["aiResponse"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}}},"required":["nodeType","nodeTitle","transitions","aiResponseConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["transferCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["nodeType","nodeTitle","transitions","transferCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["afmSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"afmSearchConfig":{"type":"object","properties":{"afm":{"type":"string","description":"AFM of company"}},"required":["afm"],"example":{"afm":"8022188180"}}},"required":["nodeType","nodeTitle","transitions","afmSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["galaxyGetCustomer","galaxySearchItems","galaxyCheckStock","galaxyGetPrice","galaxyCalculateOrder","galaxyPlaceOrder","galaxyUpdateOrder","galaxyGetOrderStatus","galaxyGetTransactionHistory","galaxyGetCustomerBalance","galaxyGetCustomerAging","galaxyGetFinInfoPerDrugType","galaxyGetItemPurchases","galaxyGetCustomerKartelaLink","galaxyFindItemsByActiveIngredient","galaxyGetInvoicePdfLinks","galaxyGetNextRoute","galaxyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"galaxyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","checkStock","getPrice","calcLines","calculateOrder","placeOrder","updateOrder","getOrderStatus","getTransactionHistory","getCustomerBalance","getCustomerAging","getFinInfoPerDrugType","getItemPurchases","getCustomerKartelaLink","findItemsByActiveIngredient","getInvoicePdfLinks","getNextRoute","customRequest"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","custCode"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query (supports {{variables.x}})"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"checkStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"wrhsCode":{"type":"string","description":"Overrides the company default warehouse"}},"required":["itemCode"]},"getPrice":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"}},"required":["EntryType","Date","Quantity"]},"calcLines":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"},"WrhsCode":{"type":"string"},"AlterCode":{"type":"string"},"Barcode":{"type":"string"}},"required":["EntryType","Date","Quantity","WrhsCode"]},"placeOrder":{"type":"object","properties":{"entry":{"type":"object","properties":{"CompID":{"type":"string"},"CompCode":{"type":"string"},"CmpsID":{"type":"string"},"CmpsCode":{"type":"string"},"WrhsID":{"type":"string"},"WrhsCode":{"type":"string"},"CoetID":{"type":"string"},"CoetCode":{"type":"string"},"DnumID":{"type":"string"},"TransDate":{"type":"string"},"TradeDate":{"type":"string"},"CustID":{"type":"string"},"CustCode":{"type":"string"},"CussID":{"type":"string"},"CussCode":{"type":"string"},"PytmID":{"type":"string"},"PytmCode":{"type":"string"},"MeroID":{"type":"string"},"CollMeroID":{"type":"string"},"RuteID":{"type":"string"},"UserID":{"type":"string"},"SourceType":{"type":"integer"},"RefTradeCode":{"type":"string"},"VoucherCode":{"type":"string"},"Comments":{"type":"string"},"ExecutionDate":{"type":"string"},"Street":{"type":"string"},"StreetNumber":{"type":"string"},"PostalCode":{"type":"string"},"Phone":{"type":"string"},"RegnDescription":{"type":"string"},"PrefDescription":{"type":"string"},"CntrDescription":{"type":"string"},"AddressDescr":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"EntryStatus":{"type":"integer"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1},"ID":{"type":"string"},"FastNumber":{"type":"string"},"TotalValue":{"type":"number"},"NetValue":{"type":"number"},"VatValue":{"type":"number"},"Lines":{"type":"array","items":{"type":"object","properties":{"ItcpID":{"type":"string"},"ItemCode":{"type":"string"},"RequestAQty":{"oneOf":[{"type":"number"},{"type":"string"}]},"WrhsID":{"type":"string"},"Price":{"type":"number"},"Disc1Pcnt":{"type":"number"},"Disc1Val":{"type":"number"},"Disc2Pcnt":{"type":"number"},"Disc2Val":{"type":"number"},"Disc3Pcnt":{"type":"number"},"Disc3Val":{"type":"number"},"Comments":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"DiscountBehaviour":{"type":"integer","minimum":0,"maximum":2},"ZeroingDiscounts":{"type":"integer","minimum":0,"maximum":3,"description":"v103: suppress discounts"},"ApplyDscnID":{"type":"string"},"ApplyDrulID":{"type":"string"},"CicoID":{"type":"string","description":"v103: item-collection (bundle) ID"},"AQty":{"type":"number"},"DisposalAQty":{"type":"number"},"PickingQty":{"type":"number"},"NetValue":{"type":"number"},"GrossValue":{"type":"number"}},"required":["ItcpID","ItemCode","RequestAQty","WrhsID","Price","Disc1Pcnt","Disc1Val","Disc2Pcnt","Disc2Val","Disc3Pcnt","Disc3Val","Comments","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","DiscountBehaviour","ZeroingDiscounts","ApplyDscnID","ApplyDrulID","CicoID","AQty","DisposalAQty","PickingQty","NetValue","GrossValue"]},"nullable":true},"Taxes":{"type":"array","items":{"type":"object","properties":{"FiacID":{"type":"string"},"FiacCode":{"type":"string"},"TrnValue":{"oneOf":[{"type":"number"},{"type":"string"}]},"ExchVatValue":{"type":"number"}},"required":["FiacID","FiacCode","ExchVatValue"]},"nullable":true}},"required":["CompID","CompCode","CmpsID","CmpsCode","WrhsID","WrhsCode","CoetID","CoetCode","DnumID","TransDate","TradeDate","CustID","CustCode","CussID","CussCode","PytmID","PytmCode","MeroID","CollMeroID","RuteID","UserID","SourceType","RefTradeCode","VoucherCode","Comments","ExecutionDate","Street","StreetNumber","PostalCode","Phone","RegnDescription","PrefDescription","CntrDescription","AddressDescr","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","EntryStatus","LockTransaction","ID","FastNumber","TotalValue","NetValue","VatValue","Lines","Taxes"]},"previewFirst":{"type":"boolean","default":false}},"required":["entry"]},"updateOrder":{"type":"object","properties":{"ID":{"type":"string"},"EntryStatus":{"type":"integer"},"Comments":{"type":"string"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1}},"required":["ID"]},"getOrderStatus":{"type":"object","properties":{"id":{"type":"string","description":"Optional specific transaction ID — omit to list all"},"revNum":{"type":"integer","minimum":0,"default":0},"custCode":{"type":"string","description":"List the orders of this customer instead (GetTransactions by CustCode, per branch). Template strings supported."},"dateFrom":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."}}},"getTransactionHistory":{"type":"object","properties":{"CustCode":{"type":"string"},"DateFrom":{"type":"string"},"DateTo":{"type":"string"}},"required":["CustCode","DateFrom","DateTo"]},"getCustomerBalance":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."}},"required":["custCode"]},"getCustomerAging":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"getFinInfoPerDrugType":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"fromDate":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."}},"required":["custCode"]},"getItemPurchases":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"itemCode":{"type":"string","minLength":1,"description":"Galaxy item code (from item search). Template strings supported."},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"compCode":{"type":"string","description":"Branch/company code. Defaults to the customer's branch."}},"required":["custCode","itemCode"]},"getCustomerKartelaLink":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"findItemsByActiveIngredient":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Active ingredient name or AtloID. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["query"]},"getInvoicePdfLinks":{"type":"object","properties":{"custCode":{"type":"string"},"custTin":{"type":"string"},"cussCode":{"type":"string"},"id":{"type":"string"},"dateFrom":{"type":"string"},"dateTo":{"type":"string"}}},"getNextRoute":{"type":"object","properties":{"custCode":{"type":"string","minLength":1}},"required":["custCode"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"POST"},"path":{"type":"string","minLength":1,"description":"Path added after the Galaxy ERP base URL, e.g. /api/crossdomain/advancedcustomviews/<guid>. Supports {{variables}}."},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Key/value properties sent as the query string. Values support {{variables}}."},"body":{"type":"string","description":"Optional raw JSON request body (supports {{variables}}). Example for an advanced custom view: {\"filters\":[{\"CompCode\":\"01\",\"CustCode\":\"{{node_1.custCode}}\"}],\"MasterDetailTree\":false}"},"apiResponse":{"type":"string","description":"Editor-only: JSON schema of the expected response (same as the apiCall node's \"API Response\"). Powers the variable picker so downstream nodes can reference individual response fields; at runtime the real response is flattened into node_N.* regardless."}},"required":["path"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["salesforceGetContact","salesforceCreateLead","salesforceLogCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"salesforceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","createLead","logCall"]},"getContact":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{variables.x}} / {{call.phoneNumber}}"},"objectType":{"type":"string","enum":["Contact","Lead"],"description":"For by=id: which SObject the Id belongs to (default Contact)."}},"required":["by","value"]},"createLead":{"type":"object","properties":{"lastName":{"type":"string","minLength":1,"description":"Lead last name — required by Salesforce. Supports templates."},"company":{"type":"string","minLength":1,"description":"Lead company — required by Salesforce. Supports templates."},"firstName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"description":{"type":"string","description":"Short summary of the request / call reason."}},"required":["lastName","company"]},"logCall":{"type":"object","properties":{"whoId":{"type":"string","minLength":1,"description":"Contact or Lead Id the call is logged against. Supports templates."},"subject":{"type":"string","minLength":1,"description":"Task subject, e.g. \"Inbound call — order status\"."},"description":{"type":"string","description":"Call notes."}},"required":["whoId","subject"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"by":"phone","value":"{{call.phoneNumber}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["guestyFindOwner","guestyFindGuest","guestyIdentifyCaller","guestyGetListings","guestyGetListing","guestyGetReservations","guestyGetReservation","guestyGetHouseRules","guestyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"guestyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["findOwner","findGuest","identifyCaller","getListings","getListing","getReservations","getReservation","getHouseRules","customRequest"]},"findOwner":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email"],"default":"phone","description":"Which field to search the owner by"},"value":{"type":"string","minLength":1,"description":"Search term (template, e.g. {{call.phone_number}})"}},"required":["value"]},"findGuest":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Guest phone to look up via their reservations (template)"}},"required":["value"]},"identifyCaller":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Caller phone (template) — matched against owners AND guests"}},"required":["value"]},"getListings":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated listing ids (template) — e.g. {{node_X.owner.listings}}"},"ownerId":{"type":"string","description":"Resolve the owner's listing ids first, then fetch them (template)"},"q":{"type":"string","description":"Free-text search across title/nickname/address (template)"}}},"getListing":{"type":"object","properties":{"id":{"type":"string","description":"Listing _id (template) — returns the full property"},"nickname":{"type":"string","description":"Listing nickname (template) — used when no id is known"},"fields":{"type":"string","description":"Space-separated field selection; omit for the full listing"}}},"getReservations":{"type":"object","properties":{"listingIds":{"type":"string","description":"Comma-separated listing ids to scope to (template)"},"listingNickname":{"type":"string","description":"Scope to a single listing by its nickname (template)"},"ownerId":{"type":"string","description":"Scope to all of an owner's listings (resolved to ids) (template)"},"guestPhone":{"type":"string","description":"Scope to a guest's reservations by their phone (template)"},"dateFrom":{"type":"string","description":"Window start: ISO date, `today`, or relative like `-7d` (template)"},"dateTo":{"type":"string","description":"Window end: ISO date, `today`, or relative like `+7d` (template)"},"windowDays":{"type":"integer","minimum":0,"description":"When dateFrom/dateTo are omitted, use today∓windowDays as the overlap window"},"status":{"type":"string","description":"Filter by reservation status (template)"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Reservation _id / confirmation id (template)"}},"required":["id"]},"getHouseRules":{"type":"object","properties":{"listingIds":{"type":"string","minLength":1,"description":"Comma-separated listing ids (template) — house rules are keyed by listing/unit-type"}},"required":["listingIds"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"GET"},"path":{"type":"string","minLength":1,"description":"Path after the base URL, e.g. /v1/reservations (template)"},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Query params (templates)"},"body":{"type":"string","description":"Raw JSON body (template) — ignored for GET"}},"required":["path"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"value":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["helpdeskCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"helpdeskConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createTicket"]},"createTicket":{"type":"object","properties":{"subject":{"type":"string","description":"Ticket subject (template, e.g. \"Call from {{call.phone_number}}\")"},"description":{"type":"string","description":"Ticket body (template, e.g. {{call.summary}})"},"requesterPhone":{"type":"string","description":"Requester phone (template, defaults to {{call.phone_number}})"},"requesterEmail":{"type":"string","description":"Requester email (template)"},"requesterName":{"type":"string","description":"Requester display name (template)"},"priority":{"type":"string","enum":["low","medium","high","urgent"],"description":"Ticket priority"}}}},"required":["operation"],"example":{"operation":"createTicket","createTicket":{"subject":"Call from {{call.phone_number}}","description":"{{call.summary}}","requesterPhone":"{{call.phone_number}}","priority":"medium"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["courierTrackVoucher"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"courierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["trackVoucher"]},"trackVoucher":{"type":"object","properties":{"courier":{"type":"string","description":"Courier to query (acs_courier, speedex, geniki_taxydromiki, elta_courier, boxnow, skroutz_lastmile, taxydema). Omit to try every connected courier."},"voucher":{"type":"string","description":"Voucher/tracking number (template, e.g. {{node_5.order.meta.voucher}})"}}}},"required":["operation"],"example":{"operation":"trackVoucher","trackVoucher":{"voucher":"{{node_5.order.meta.voucher}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["vivaCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"vivaConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createPaymentLink"]},"createPaymentLink":{"type":"object","properties":{"amount":{"type":"string","description":"Amount in EUR as a decimal (template, e.g. \"25.50\" or {{node_3.order.total}})"},"description":{"type":"string","description":"Shown to the customer on the checkout page (template)"},"customerName":{"type":"string","description":"Customer full name (template)"},"customerPhone":{"type":"string","description":"Customer phone (template, e.g. {{call.phone_number}})"},"language":{"type":"string","enum":["el","en"],"description":"Checkout page language"}}}},"required":["operation"],"example":{"operation":"createPaymentLink","createPaymentLink":{"amount":"25.50","description":"Πληρωμή παραγγελίας","customerPhone":"{{call.phone_number}}","language":"el"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createTrackedPage"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"trackedPageConfig":{"type":"object","properties":{"html":{"type":"string","description":"Page HTML (template, e.g. {{node_2.html}} from an llmCompletion node). Scripts and forms are stripped; styles are kept."},"title":{"type":"string","description":"Browser tab title (template)"},"expiresInDays":{"type":"integer","minimum":1,"maximum":365,"description":"How long the link stays open (default 30 days)"}},"required":["html"],"example":{"html":"{{node_2.html}}","title":"Η σύνοψη της κλήσης σας","expiresInDays":30}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["shopifyGetCustomer","shopifyGetOrdersByCustomer","shopifyGetOrderById","shopifySearchProducts","shopifyGetProductById","shopifySyncProductsToSkroutz"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"shopifyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","syncProductsToSkroutz"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search — mapped to vendor / product_type / handle."},"vendor":{"type":"string"},"productType":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify product id."}},"required":["productId"]},"syncProductsToSkroutz":{"type":"object","properties":{"maxRecords":{"type":"integer","minimum":0}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["soft1GetCustomer","soft1SearchItems","soft1GetCustomerBalance","soft1GetCustomerAging","soft1GetCustomerHistory","soft1CreateSalesDoc","soft1TransmitEInvoice"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"soft1Config":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","getCustomerHistory","createSalesDoc","transmitEInvoice"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerAging":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerHistory":{"type":"object","properties":{"trdr":{"type":"string"},"tin":{"type":"string"},"code":{"type":"string"},"from":{"type":"string","description":"ISO date YYYY-MM-DD"},"to":{"type":"string","description":"ISO date YYYY-MM-DD"},"limit":{"type":"integer","minimum":1,"maximum":500,"default":50}}},"createSalesDoc":{"type":"object","properties":{"trdr":{"oneOf":[{"type":"string"},{"type":"number"}]},"custCode":{"type":"string"},"series":{"oneOf":[{"type":"string"},{"type":"number"}]},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"mtrl":{"oneOf":[{"type":"string"},{"type":"number"}]},"code":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"transmit":{"type":"boolean"}},"required":["lines"]},"transmitEInvoice":{"type":"object","properties":{"key":{"type":"string","minLength":1},"template":{"type":"string","minLength":1}},"required":["key"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["exelixisSmartGetContact","exelixisSmartListCompanyContacts","exelixisSmartListSupportMembers","exelixisSmartCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"exelixisSmartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","listCompanyContacts","listSupportMembers","createTicket"]},"getContact":{"type":"object","properties":{"phone":{"type":"string","description":"Template — e.g. {{call.phone_number}}"},"afm":{"type":"string","description":"Template — e.g. {{dynamicVariables.afm}}"}}},"listCompanyContacts":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) to list contacts for"}},"required":["companyId"]},"listSupportMembers":{"type":"object","properties":{}},"createTicket":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) — required by the ERP"},"contactId":{"type":"string"},"supportMemberId":{"type":"string"},"title":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"callUrl":{"type":"string","description":"Template — defaults to {{call.call_url}}"}},"required":["companyId","title","summary"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["pylonGetCustomer","pylonSearchItems","pylonGetCustomerBalance","pylonCreateSalesOrder","pylonGetData","pylonPostData"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"pylonConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","createSalesOrder","getData","postData"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"createSalesOrder":{"type":"object","properties":{"customerTin":{"type":"string","description":"Customer TIN — supports {{dynamicVariables.x}}. Optional when rawData supplies the customer."},"seriesCode":{"type":"string"},"customerBranch":{"type":"string"},"paymentMethod":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0}},"required":["itemCode","quantity"]}},"rawData":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Advanced: a JSON object merged verbatim into the Pylon order payload, overriding the structured fields above. Use native Pylon column names, e.g. {\"Lines\":[{\"CenlItemCode\":\"GG11\",\"CenlAMeasurementQty\":2}],\"CsdcRemarks\":\"…\"}. String values support {{dynamicVariables.x}} templates. Bypasses the structured-field validation, so it must match the target Script exactly."}}},"getData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined getjsondata Script code, e.g. itemsVoiceAgent or custInfoVoice"},"extras":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Param name, e.g. @ItemCode or @phone"},"value":{"type":"string","description":"Param value — supports {{dynamicVariables.x}}"}},"required":["name","value"]},"description":"Script parameters; omit or [] for none"},"packageSize":{"type":"integer","minimum":1,"maximum":5000,"description":"Page size (default 200)"},"allPages":{"type":"boolean","description":"Walk every page until exhausted; otherwise just page 1"}},"required":["entitycode"]},"postData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined postdata Script code, e.g. orderVoice or SalesOrders"},"data":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"JSON object serialized into the postdata `data` field. Use the shape the target Script expects. String values support {{dynamicVariables.x}} templates."}},"required":["entitycode","data"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["entersoftGetCustomer","entersoftSearchItems","entersoftGetCustomerBalance","entersoftGetCustomerAging","entersoftRunPublicQuery","entersoftRunEbsService","entersoftCreateSalesDoc"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"entersoftOneConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","runPublicQuery","runEbsService","createSalesDoc"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"code":{"type":"string","minLength":1,"description":"Customer code — supports templates"}},"required":["code"]},"getCustomerAging":{"type":"object","properties":{"code":{"type":"string","minLength":1}},"required":["code"]},"runPublicQuery":{"type":"object","properties":{"publicQueryGid":{"type":"string"},"groupId":{"type":"string"},"filterId":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Param object — values may be templates"}}},"runEbsService":{"type":"object","properties":{"serviceName":{"type":"string","minLength":1},"parameters":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}}},"required":["serviceName"]},"createSalesDoc":{"type":"object","properties":{"customerGid":{"type":"string"},"customerCode":{"type":"string"},"series":{"type":"string"},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemGid":{"type":"string"},"itemCode":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"ebsServiceName":{"type":"string"}},"required":["lines"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["wooGetCustomer","wooGetOrdersByCustomer","wooGetOrderById","wooSearchProducts","wooGetProductById","wooCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"wooCommerceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric WooCommerce customer id"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string"},"sku":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric customer id (0 for guest)"},"lineItems":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"integer","minimum":0},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","lineItems"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["opencartGetCustomer","opencartGetOrdersByCustomer","opencartGetOrderById","opencartSearchProducts","opencartGetProductById","opencartCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"opencartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"manufacturer":{"type":"string","description":"Exact manufacturer filter. Optional."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Existing OpenCart customer id (for logged-in orders)."},"firstname":{"type":"string"},"lastname":{"type":"string"},"email":{"type":"string"},"telephone":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1},"comment":{"type":"string"}},"required":["products"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["magentoGetCustomer","magentoGetOrdersByCustomer","magentoGetOrderById","magentoSearchProducts","magentoGetProductById","magentoListShippingOptions"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"magentoConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","listShippingOptions"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento order increment id (receipt number) or numeric entity id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento product id."}},"required":["productId"]},"listShippingOptions":{"type":"object","properties":{"countryId":{"type":"string","description":"Destination country as ISO-2 code, e.g. \"GR\". Defaults to \"GR\"."},"postcode":{"type":"string","description":"Destination postcode. Supports templates."},"region":{"type":"string","description":"Optional region/state name."},"sku":{"type":"string","description":"Optional product SKU to price against."}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["megasoftGetCustomer","megasoftSearchProducts","megasoftGetProductByCode","megasoftListShippingMethods","megasoftListPaymentMethods","megasoftGetCustomerBalance","megasoftGetCustomerOrders","megasoftGetOrderStatus","megasoftGetCustomerPurchases","megasoftListOffers","megasoftGetItemPrice","megasoftGetProductStock","megasoftCreateOrder","megasoftCancelOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"megasoftConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchProducts","getProductByCode","listShippingMethods","listPaymentMethods","getCustomerBalance","getCustomerOrders","getOrderStatus","getCustomerPurchases","listOffers","getItemPrice","getProductStock","createOrder","cancelOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getProductByCode":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"getCustomerBalance":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."}},"required":["customerCode"]},"getCustomerOrders":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"orderNo":{"type":"string","description":"Optional order number filter. Supports templates."}},"required":["customerCode"]},"getOrderStatus":{"type":"object","properties":{"orderNo":{"type":"string","description":"Optional order number. Supports templates."},"date":{"type":"string","description":"Optional modified-since date (yyyy-MM-dd)."}}},"getCustomerPurchases":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"itemCode":{"type":"string"}},"required":["customerCode"]},"listOffers":{"type":"object","properties":{"offerId":{"type":"string"},"activeOnly":{"type":"boolean","default":true},"dateFrom":{"type":"string"}}},"getItemPrice":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["customerCode","itemCode"]},"getProductStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"createOrder":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."},"qty":{"oneOf":[{"type":"number","minimum":0},{"type":"string","minLength":1}],"description":"Quantity. Number or template string."},"comments":{"type":"string"}},"required":["customerCode","itemCode","qty"]},"cancelOrder":{"type":"object","properties":{"orderNo":{"type":"string","minLength":1,"description":"Megasoft order number. Supports templates."},"seiraPar":{"type":"string","minLength":1,"description":"Order series / parastatiko code. Supports templates."}},"required":["orderNo","seiraPar"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["gonnaOrderSearchCatalog","gonnaOrderCheckDeliveryAddress","gonnaOrderGetCustomer","gonnaOrderGetCustomerOrders","gonnaOrderGetOrderStatus","gonnaOrderCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"gonnaOrderConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["searchCatalog","checkDeliveryAddress","getCustomer","getCustomerOrders","getOrderStatus","createPaymentLink"]},"searchCatalog":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text menu search. Supports {{dynamicVariables.x}}."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"checkDeliveryAddress":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Delivery address. Supports templates."}},"required":["address"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","name"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getCustomerOrders":{"type":"object","properties":{"customerId":{"type":"string","minLength":1,"description":"Customer id. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":10,"default":5}},"required":["customerId"]},"getOrderStatus":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid. Supports templates."}},"required":["orderUuid"]},"createPaymentLink":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid to charge for. Supports templates."},"amount":{"type":"string","description":"Amount override. Leave blank to use the order total."}},"required":["orderUuid"]}},"required":["operation"],"example":{"operation":"checkDeliveryAddress","checkDeliveryAddress":{"address":"{{dynamicVariables.callerAddress}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["webhotelierCheckAvailability","webhotelierSearchBookings","webhotelierGetReservation","webhotelierGetAvailabilityCalendar","webhotelierGetRooms","webhotelierGetRates"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"webhotelierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["checkAvailability","searchBookings","getReservation","getAvailabilityCalendar","getRooms","getRates"]},"checkAvailability":{"type":"object","properties":{"checkin":{"type":"string","minLength":1,"description":"Check-in date YYYY-MM-DD. Supports templates."},"checkout":{"type":"string","minLength":1,"description":"Check-out date YYYY-MM-DD. Supports templates."},"adults":{"type":"string","minLength":1,"description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"rooms":{"type":"string","description":"Number of rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["checkin","checkout","adults"]},"searchBookings":{"type":"object","properties":{"lastName":{"type":"string","description":"Guest last name. Supports templates. Provide this or email."},"email":{"type":"string","description":"Guest email. Supports templates. Provide this or lastName."},"checkinFrom":{"type":"string","description":"Earliest check-in YYYY-MM-DD. Supports templates."},"checkinTo":{"type":"string","description":"Latest check-in YYYY-MM-DD. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getReservation":{"type":"object","properties":{"resId":{"type":"string","minLength":1,"description":"Reservation id. Supports templates."}},"required":["resId"]},"getAvailabilityCalendar":{"type":"object","properties":{"fromd":{"type":"string","minLength":1,"description":"Calendar start / check-in date YYYY-MM-DD. Supports templates."},"tod":{"type":"string","description":"Calendar end / check-out date YYYY-MM-DD (max 3 months from fromd). Supports templates."},"adults":{"type":"string","description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"room":{"type":"string","description":"Room-type code filter. Supports templates."},"rate":{"type":"string","description":"Rate id filter. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["fromd"]},"getRooms":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code for a single room. Empty = list all rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getRates":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code to scope rates. Supports templates."},"rateId":{"type":"string","description":"Rate id for a single rate (requires roomCode). Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}}},"required":["operation"],"example":{"operation":"getReservation","getReservation":{"resId":"{{dynamicVariables.resId}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hosthubIdentifyCaller","hosthubSearchReservations","hosthubGetReservation","hosthubListRentals","hosthubCheckAvailability"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hosthubConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["identifyCaller","searchReservations","getReservation","listRentals","checkAvailability"]},"identifyCaller":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"description":"Caller phone number. Supports templates (e.g. {{call.phone_number}})."}},"required":["phone"]},"searchReservations":{"type":"object","properties":{"name":{"type":"string","description":"Guest name. Supports templates. Provide one of name / phone / confirmationCode."},"phone":{"type":"string","description":"Guest phone. Supports templates."},"confirmationCode":{"type":"string","description":"Channel confirmation code. Supports templates."}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Hosthub reservation (calendar-event) id. Supports templates."}},"required":["id"]},"getRental":{"type":"object","properties":{"rentalId":{"type":"string","description":"Rental id for a single rental. Empty = list all rentals. Supports templates."}}},"checkAvailability":{"type":"object","properties":{"rentalId":{"type":"string","minLength":1,"description":"Rental id to check. Supports templates."},"from":{"type":"string","minLength":1,"description":"Start date YYYY-MM-DD. Supports templates."},"to":{"type":"string","minLength":1,"description":"End date YYYY-MM-DD. Supports templates."}},"required":["rentalId","from","to"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["prestashopGetCustomer","prestashopGetOrdersByCustomer","prestashopGetOrderById","prestashopSearchProducts","prestashopGetProductById","prestashopCreateOrder","prestashopUpdateOrderStatus"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"prestashopConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder","updateOrderStatus"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"reference":{"type":"string","description":"Exact reference (SKU) filter."},"ean13":{"type":"string","description":"Exact EAN-13 barcode filter."},"mpn":{"type":"string","description":"Exact MPN filter."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id."},"addressDeliveryId":{"oneOf":[{"type":"number"},{"type":"string"}]},"addressInvoiceId":{"oneOf":[{"type":"number"},{"type":"string"}]},"cartId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Pre-existing cart id (PrestaShop requires it)."},"currencyId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"langId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"carrierId":{"oneOf":[{"type":"number"},{"type":"string"}]},"payment":{"type":"string","minLength":1,"description":"Human-readable payment label."},"module":{"type":"string","description":"Payment module code, e.g. \"ps_checkpayment\"."},"totalPaid":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProducts":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProductsWithTax":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalShipping":{"oneOf":[{"type":"number"},{"type":"string"}]},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"product_attribute_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0},"product_name":{"type":"string"},"unit_price":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","addressDeliveryId","addressInvoiceId","cartId","carrierId","payment","totalPaid","totalProducts","totalProductsWithTax","products"]},"updateOrderStatus":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id to update."},"orderStateId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Target order_state id (numeric, store-specific)."}},"required":["orderId","orderStateId"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["airtableGetRecord","airtableSearchRecords","airtableCreateRecord","airtableUpdateRecord"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"airtableConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getRecord","searchRecords","createRecord","updateRecord"]},"getRecord":{"type":"object","properties":{"by":{"type":"string","enum":["phone","id"],"description":"Look up by mapped phone field, or by Airtable record id"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchRecords":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"createRecord":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["fields"]},"updateRecord":{"type":"object","properties":{"recordId":{"type":"string","minLength":1,"description":"Airtable record id (rec...) — supports templates"},"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["recordId","fields"]}},"required":["operation"],"example":{"operation":"getRecord","getRecord":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["jiraGetIssue","jiraSearchIssues","jiraCreateIssue","jiraUpdateIssue","jiraAddComment","jiraTransitionIssue"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"jiraConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getIssue","searchIssues","createIssue","updateIssue","addComment","transitionIssue"]},"getIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key, e.g. SUP-1234 — supports {{dynamicVariables.x}}"}},"required":["issueKey"]},"searchIssues":{"type":"object","properties":{"text":{"type":"string","description":"Free-text query — supports templates"},"jql":{"type":"string","description":"Raw JQL — overrides text when present"},"projectKey":{"type":"string","description":"Scope the search to a project key"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"createIssue":{"type":"object","properties":{"summary":{"type":"string","minLength":1,"description":"Issue summary — supports templates"},"description":{"type":"string","description":"Issue description — supports templates"},"projectKey":{"type":"string","description":"Project key — falls back to the connection default"},"issueType":{"type":"string","description":"Issue type name — falls back to the connection default"},"priority":{"type":"string","description":"Priority name (e.g. High)"},"assignee":{"type":"string","description":"Assign to a person by email or name — supports templates"}},"required":["summary"]},"updateIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key to update — supports templates"},"summary":{"type":"string","description":"New summary — supports templates"},"description":{"type":"string","description":"New description — supports templates"},"priority":{"type":"string","description":"New priority name"}},"required":["issueKey"]},"addComment":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"body":{"type":"string","minLength":1,"description":"Comment body — supports templates"}},"required":["issueKey","body"]},"transitionIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"status":{"type":"string","minLength":1,"description":"Target status name, e.g. \"In Progress\" — supports templates"}},"required":["issueKey","status"]}},"required":["operation"],"example":{"operation":"createIssue","createIssue":{"summary":"Callback requested by {{callerPhone}}","description":"{{transcript}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleChatSendMessage","googleChatSendToDefaultSpace","googleChatSendViaWebhook"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleChatConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["sendMessage","sendToDefaultSpace","sendViaWebhook"]},"sendMessage":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque Google Chat space resource (spaces/AAQA...) — set via UI picker"},"spaceDisplayName":{"type":"string","description":"Cached display name for the node summary"},"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string","description":"Optional thread key for in-thread replies"}},"required":["spaceName","body"]},"sendToDefaultSpace":{"type":"object","properties":{"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string"}},"required":["body"]},"sendViaWebhook":{"type":"object","properties":{"webhookId":{"type":"string","minLength":1,"description":"GoogleChatWebhook document id — set via UI picker"},"webhookLabel":{"type":"string","description":"Cached webhook label for the node summary"},"body":{"type":"string","minLength":1},"threadKey":{"type":"string"}},"required":["webhookId","body"]}},"required":["operation"],"example":{"operation":"sendToDefaultSpace","sendToDefaultSpace":{"body":"New lead from {{caller_name}} ({{caller_phone}})"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["searchContact"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"searchContactConfig":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Phone number to look up (template). Most reliable identifier: matched on the stored phone index, so +30/30/national forms all hit the same contact."},"email":{"type":"string","description":"Email address to look up (template). Matched case-insensitively on the main email and every listed email."},"name":{"type":"string","description":"Name to look up (template). Fuzzy: case- and accent-insensitive, Greek/Latin spellings and common inflections. May match several contacts."}},"example":{"phoneNumber":"{{call.phone_number}}","email":"","name":""}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["managedAgent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"managedAgentConfig":{"type":"object","properties":{"prompt":{"type":"string","maxLength":10000,"default":"","description":"System prompt rendered with {{transcript}}, {{call_summary}}, {{contact}}, {{extracted_entities}}"},"builtInTools":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}},"default":[],"description":"Full AgentTool configurations the LLM may call."},"apiTools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_]{1,40}$","description":"Tool name shown to the LLM; must be unique within the node"},"description":{"type":"string","minLength":10,"maxLength":500,"description":"How the LLM decides when to call this tool"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"default":[],"description":"Input schema for the LLM"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"description":"HTTP request configuration (URL, headers, method, body) — reused from function-call api runner","example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["name","description","apiConfig"]},"default":[],"description":"Inline API tools with name + description + HTTP config"},"mcpServers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the MCP server"},"description":{"type":"string","description":"Optional description"},"serverUrl":{"type":"string","format":"uri","description":"MCP server endpoint"},"transport":{"type":"string","enum":["http","sse"],"description":"Transport: http or sse"},"authType":{"type":"string","enum":["none","bearer","oauth"],"description":"Authentication mode"},"authValue":{"type":"string","description":"Token / credential value — encrypted at rest"},"enabledTools":{"type":"array","items":{"type":"string"},"description":"Whitelist of tools exposed to the LLM. Omit to expose every tool the server publishes."}},"required":["name","serverUrl","transport","authType"]},"default":[],"description":"MCP servers whose tools the LLM may call"},"models":{"type":"object","properties":{"primary":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"description":"Model used by the loop by default","example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"escalation":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Optional fallback model rerun on the whole session if primary failed/stuck. Must use the same provider as primary."}},"required":["primary"]},"limits":{"type":"object","properties":{"maxIterations":{"type":"integer","minimum":0,"maximum":50,"default":15,"description":"Hard cap on LLM turns per run. Set to 0 for no limit (cost cap still enforced)."},"maxCostUsd":{"type":"number","minimum":0,"maximum":0.5,"default":0.5,"description":"Hard cap on total cost (USD) per run. Range: 0 to 0.5."},"stuckDetection":{"type":"boolean","default":true,"description":"Bail if the model calls the same tool with the same args twice in a row"}},"default":{}},"routing":{"type":"object","properties":{"onSuccess":{"type":"string","description":"Next workflow node ID when the run completes successfully"},"onPartial":{"type":"string","description":"Next workflow node ID when the run completed but with partial results"},"onFailure":{"type":"string","description":"Next workflow node ID when the run failed"}},"default":{}},"dryRun":{"type":"boolean","default":false},"enableSubagents":{"type":"boolean","default":false},"maxConcurrentSubagents":{"type":"integer","minimum":1,"maximum":10,"default":5},"maxSubagentIterations":{"type":"integer","minimum":1,"maximum":20,"default":8},"knowledgeFileIds":{"type":"array","items":{"type":"string"},"default":[],"description":"Knowledge files the agent can search via search_knowledge. Empty list = no knowledge tool offered."},"knowledgeRerank":{"type":"object","properties":{"enabled":{"type":"boolean","default":true,"description":"Run the rerank pass. When off, top-K is taken directly from the raw retrieval score (faster but noisier context for the main agent)."},"model":{"type":"string","default":"gpt-5.6-luna","description":"Model used for the rerank pass. Should be small/cheap — its job is ranking, not reasoning. Same provider as the node's primary model."},"candidatesK":{"type":"integer","minimum":5,"maximum":200,"default":50,"description":"How many candidates to retrieve from Pinecone before reranking. Higher = better recall, more rerank tokens. 50 is the sweet spot."},"returnK":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"How many chunks to return after reranking. The main agent sees only these."}},"default":{}},"enableScraping":{"type":"boolean","default":false,"description":"When true, agent gets scrape_website(url) tool that fetches+summarises a page via ScraperService."},"workflowToolIds":{"type":"array","items":{"type":"string"},"default":[],"description":"IDs of during-call workflows the agent may call as tools. Only their duringCall triggers run; onCallEnd-triggered or managed-agent-containing workflows are rejected to prevent recursion."}},"example":{"prompt":"You are an order assistant. From the call transcript, identify the requested products, look them up, and create an order. Use the provided tools.","builtInTools":[],"apiTools":[],"mcpServers":[],"models":{"primary":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0}},"limits":{"maxIterations":15,"maxCostUsd":0.5,"stuckDetection":true},"routing":{"onSuccess":"node-success","onFailure":"node-create-ticket"},"dryRun":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"nodeType"}},"html":{"type":"string"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}]}},"required":["id","name","position","inputs","outputs"],"example":{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}},"description":"Action nodes in the flow"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"visibility":{"type":"string","enum":["private","resellerRead","resellerWrite","globalRead"],"description":"Workflow visibility and access control"},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"WorkFlowVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer; absent for workflows that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","visibility"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Handle Incoming Call","description":"Automated call handling flow","type":"flow","executeAt":"immediate","visibility":"private","trigger":{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}},"nodes":[{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"llmCompletionConfig","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"connections":[{"node":"2","input":"default","output":"default","label":"Continue"}],"files":[{"id":"file_123","filename":"welcome.wav","s3Id":"s3-file-123","displayUrl":"https://example.com/files/welcome.wav"}]}}},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}},"dataRetentionDays":{"type":"number"},"dataRetentionPolicy":{"type":"string","enum":["none","only-phone-number","transcript","all"]},"archiveRecordingForRetrieval":{"type":"boolean"},"requirePassingTestsToPublish":{"type":"boolean"},"coreProvidersOnly":{"type":"boolean"},"skipParametersNotUsedInPrompt":{"type":"boolean","description":"When true, parameters/variables not explicitly referenced in the prompt will not be appended as additional context"},"customerInstructions":{"type":"string"},"testCasesForCustomerInstructions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id of the test case"},"scenario":{"type":"string","description":"The scenario for the test case"},"idealOutcome":{"type":"string","description":"The ideal outcome for the test case"},"actualOutcomes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id of the actual outcome"},"agentEntity":{"type":"string","enum":["systemPrompt","forwardingInstructions","endCallSettings","skipTurn"]},"existingText":{"type":"string","description":"The existing text in the system prompt that will be replaced or modified"},"newText":{"type":"string","description":"The new text to add to the system prompt"},"actionType":{"type":"string","enum":["add","remove","replace"],"description":"The type of the instruction: add, remove, replace"},"reason":{"type":"string","description":"The reason for the instruction"},"applied":{"type":"boolean","description":"Whether the instruction has been applied"},"appliedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"callId":{"type":"string","description":"The ID of the call if the source is call"},"score":{"type":"number","minimum":1,"maximum":10,"description":"1 to 10 by how close was to ideal outcome"},"outcome":{"type":"string","description":"The outcome of the test case"}},"required":["agentEntity","score","outcome"],"description":"The actual outcome of the test case"},"description":"The actual outcomes of the test case"}},"required":["scenario","idealOutcome","actualOutcomes"],"description":"The test cases for the customer instructions"}},"aiDisclosure":{"type":"object","properties":{"enabled":{"type":"boolean","description":"When true, the platform ensures the first spoken greeting names AI / a digital assistant. Default is off. Leaving this off may leave the deployer non-compliant with Article 50(1) and 50(5) EU AI Act."},"disabledAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"disabledById":{"type":"string","description":"User id who turned the overlay off"},"disabledBy":{"type":"string","description":"User name who turned the overlay off"}}},"sensitiveData":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"types":{"type":"array","items":{"type":"string","enum":["amka","afm","personal_number","id_card","passport","gemi","cy_tic","iban","card","cvv","pin","email","phone"]}},"vaultRetentionDays":{"type":"integer","minimum":1,"maximum":365}}},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"AgentVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer. Set to v1 on create/copy; absent only on legacy agents that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name"],"example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support Agent","agentType":"prompt-based","systemPrompt":"You are a helpful customer support assistant. Always be polite and provide accurate information.","dynamicVariables":[{"name":"company_name","value":"{{company_name}}"}],"language":"en-US","secondaryLanguages":[{"language":"es-ES","type":"other_agent","agentId":"agent-123e4567-e89b-12d3-a456-426614174000","enabled":true,"defaultContries":["Greece","United States"]},{"language":"fr-FR","type":"other_voice","voiceConfig":{"voiceProvider":"elevenlabs","voiceId":"21m00Tcm4TlvDq8ikWAM"},"enabled":true,"defaultContries":["Greece","United States"]}],"knowledgeFileIds":["kb-123","kb-456"],"workflowsIds":["workflow-123","workflow-456"],"tools":[{"enabled":true,"name":"send_sms","prompt":"Send an SMS to the user","type":"system"}],"allowedToCopy":"sameCompany","passwordTries":3,"externalDial":1234567890,"internalDial":"4002","knowledgeFiles":[{"id":"kb-123","name":"Product Manual","description":"Complete product documentation"}],"workflows":[{"id":"workflow-123","name":"Send Email Notification","description":"Automated email notification workflow","triggers":[{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}}],"nodes":[],"files":[],"parameters":[{"name":"company_name","value":"{{company_name}}","type":"string","required":true,"aiGenerated":true}],"dataRetentionDays":30,"dataRetentionPolicy":"all"}]},"description":"Agent responsible for the campaign"},"voipPhones":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"The display name for the VoIP phone"},"username":{"type":"string","description":"The username for SIP authentication"},"domain":{"type":"string","description":"Domain of your VoIP provider's SIP server (e.g., sip.provider.com)"},"sipProxy":{"type":"string","description":"Outbound SIP proxy / SBC host that REGISTER and signaling are routed through (e.g., vpbx-sbc.provider.com)"},"login":{"type":"string","description":"The login credentials for the VoIP provider"},"password":{"type":"string","description":"The password for SIP authentication"},"phone":{"type":"string","description":"The phone number linked with this VoIP phone"},"ipAddressInput":{"type":"string","description":"The IP address of the VoIP provider server"},"port":{"type":"number","description":"The port number for SIP communication"},"verified":{"type":"boolean","description":"Whether the VoIP phone has been verified"},"channelsAvailable":{"type":"number","description":"Number of concurrent calls this phone can handle"},"country":{"type":"string","description":"The country where the VoIP phone is registered"},"state":{"type":"string","description":"The state/province where the VoIP phone is registered"},"price":{"type":"number","description":"The cost linked with this VoIP phone"},"expirationSeconds":{"type":"string","description":"Registration expiration time in seconds"},"grantedExpirationSeconds":{"type":"string","description":"Registrar-granted REGISTER lifetime in seconds (SIP operational; refresh cadence only)"},"registered":{"type":"boolean","description":"Whether the phone is currently registered"},"voipConnectionIds":{"type":"array","items":{"type":"string"},"description":"Array of VoIP connection IDs linked with this phone"},"voipConnections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for the VoIP connection"},"dial":{"type":"number","description":"Dial number or extension assigned to this connection"},"reason":{"type":"string","description":"Internal notes or purpose description for this connection"},"connectionType":{"type":"string","enum":["User","External","Agent"],"description":"Type of destination: 'Agent', 'User', or 'External'"},"agentId":{"type":"string","description":"ID of the AI agent this connection routes to (only for Agent type connections)"},"sipDomain":{"type":"string","description":"SIP domain for this connection."},"phone":{"type":"string","description":"External phone number this connection forwards to (only for External type connections)"},"userId":{"type":"string","description":"ID of the user this connection routes to (only for User type connections)"},"start":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily start time when this connection becomes available"},"end":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily end time when this connection becomes unavailable"},"canAgentTranscribe":{"type":"boolean","description":"Whether the agent can transcribe calls to this connection"},"canAgentRecord":{"type":"boolean","description":"Whether the agent can record calls to this connection"},"canAgentAnalyze":{"type":"boolean","description":"Whether the agent can analyze calls to this connection"},"canAgentSpeakWhenAsked":{"type":"boolean","description":"Whether the agent can speak when asked during calls to this connection"},"allDay":{"type":"boolean","description":"Whether this connection is available 24/7 (ignores start/end times when true)"},"syncWithGoogle":{"type":"boolean","description":"Whether availability is synchronized with Google Calendar"},"syncWithGoogleStatus":{"type":"string","enum":["open","closed"],"description":"Google Calendar sync mode: 'open' for free time availability, 'closed' for busy time unavailability"},"messageToUser":{"type":"string","description":"Custom message or announcement played before transferring calls to this connection"},"aiGeneratedMessage":{"type":"boolean","description":"Whether transfer messages are dynamically generated by AI based on call context"},"transcription_enabled":{"type":"boolean","description":"Whether real-time transcription is enabled for calls on this connection"},"agent":{"type":"object","properties":{"id":{"type":"string","description":"Agent's unique identifier"},"name":{"type":"string","description":"Agent's display name"}},"description":"Full agent details when connectionType is 'Agent' (populated from agents database)"},"user":{"type":"object","properties":{"id":{"type":"string","description":"User's unique identifier"},"name":{"type":"string","description":"User's full name"},"email":{"type":"string","description":"User's email address"},"defaultCompanyId":{"type":"string","description":"User's default company ID"},"picture":{"type":"string","description":"User's profile picture URL"},"emailVerified":{"type":"boolean","description":"Whether the user's email has been verified"},"lastConnectedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"isConnected":{"type":"boolean","description":"Whether the user is currently online/connected"}},"description":"Full user details when connectionType is 'User' (populated from users database)"},"username":{"type":"string","description":"SIP username for direct authentication (advanced configurations only)"},"password":{"type":"string","description":"SIP password for direct authentication (advanced configurations only)"},"ipAddress":{"type":"array","items":{"type":"string"},"description":"Whitelist of allowed IP addresses for security restrictions"},"extensionRegistrationIds":{"type":"array","items":{"type":"string"},"description":"IDs of the extension registrations linked with this connection"},"extensionRegistrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"voipConnectionId":{"type":"string","description":"ID of the VoIP Connection that owns this extension (legacy)"},"phoneExtensionId":{"type":"string","description":"ID of the Phone Extension that owns this extension"},"username":{"type":"string","description":"SIP username/extension that is registered"},"contactUri":{"type":"string","description":"Full SIP Contact URI for routing calls to this extension"},"remoteAddress":{"type":"string","description":"IP address of the registered SIP client"},"clientIp":{"type":"string","description":"Public client IP when known"},"remotePort":{"type":"number","description":"Port number of the registered SIP client"},"transport":{"type":"string","enum":["udp","tcp","tls","websocket"],"description":"Transport protocol: 'udp', 'tcp', 'tls' for SIP; 'websocket' for app clients"},"registeredAt":{"type":"string","format":"date-time","description":"Timestamp when this extension was registered (ISO 8601 format)"},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp when this registration will expire (ISO 8601 format)"},"expires":{"type":"number","description":"Number of seconds until expiration (decreases over time)"},"userAgent":{"type":"string","description":"SIP User-Agent identifying the client software"},"callId":{"type":"string","description":"SIP Call-ID from the REGISTER request"},"bindingSource":{"type":"string","enum":["register","invite"],"description":"'register' = the phone sent a REGISTER and can be rung; 'invite' = stand-in written from an authenticated outbound INVITE, used only for that call's in-dialog requests and never for ringing the phone"},"consecutiveInviteFailures":{"type":"integer","description":"Liveness skip-list counter. Bumped on 5xx/timeout from fork-INVITEs, reset on 200 OK. When ≥3 and `lastInviteFailureAt` is within the last 5 minutes, the registration is skipped by routing."},"lastInviteFailureAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"voipConnection":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"agentId":{"type":"string"},"userId":{"type":"string"},"connectionType":{"type":"string"}},"description":"Legacy VoIP Connection — only populated for pre-migration rows."},"userEndpoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"number":{"type":"string"},"status":{"type":"string"}},"description":"Populated UserEndpoint this registration belongs to."}},"required":["id","createdAt","active","createdBy","createdById","companyId","username","contactUri","remoteAddress","remotePort","transport","registeredAt","expiresAt","expires"],"description":"Extension registration details including contact information and expiration status","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","voipConnectionId":"507f1f77bcf86cd799439011","username":"1001","contactUri":"sip:1001@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300,"userAgent":"Zoiper 5.5.10","callId":"abc123@192.168.1.100","voipConnection":{"id":"507f1f77bcf86cd799439011","name":"Customer Support","agentId":"507f1f77bcf86cd799439012","connectionType":"Agent"}}},"description":"Active SIP device registrations for this connection (virtual populate from ExtensionRegistration collection, filtered to show only non-expired registrations). Each entry represents a physical device (phone, softphone, etc.) currently registered with this extension."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","connectionType","syncWithGoogle","syncWithGoogleStatus"],"description":"Response schema for VoIP connection including complete configuration, company metadata, and linked agent or user details","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support","dial":1,"reason":"General customer support inquiries","connectionType":"Agent","agentId":"507f1f77bcf86cd799439011","phone":"+1234567890","userId":"507f1f77bcf86cd799439012","start":{"hours":9,"minutes":0},"end":{"hours":17,"minutes":0},"canAgentTranscribe":true,"canAgentRecord":true,"canAgentAnalyze":true,"canAgentSpeakWhenAsked":false,"allDay":false,"syncWithGoogle":true,"syncWithGoogleStatus":"open","messageToUser":"Welcome to customer support!","aiGeneratedMessage":false,"agent":{"id":"507f1f77bcf86cd799439011","name":"John Doe","email":"john@example.com"},"user":{"id":"507f1f77bcf86cd799439012","name":"Jane Smith","email":"jane@example.com"},"registrations":[{"id":"507f1f77bcf86cd799439013","username":"customer_support","contactUri":"sip:customer_support@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300}]}},"description":"Array of VoIP connection objects"},"allowedIp":{"type":"string","description":"Allowed IP address for this VoIP phone"},"webhookUrl":{"type":"string","description":"URL for webhook notifications"},"inactiveFrom":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"source":{"type":"string","enum":["system","custom"],"description":"Source of the VoIP phone (system or custom)"},"privateServers":{"type":"array","items":{"type":"string"},"description":"List of private server addresses"},"preferredCodec":{"type":"string","enum":["PCMA","PCMU"],"description":"Preferred audio codec for calls"},"yubotoResponseCode":{"type":"number","description":"Response code from Yuboto service"},"yubotoResponseMessage":{"type":"string","description":"Response message from Yuboto service"},"transport":{"type":"string","enum":["tls","udp","tcp"],"description":"Transport protocol for the VoIP phone"},"pickUpDelay":{"type":"integer","description":"Pick up delay in seconds"},"lastRegisteredAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contactHost":{"type":"string","enum":["phone_id","company_id","ip"],"description":"Host advertised in our SIP Contact on cloud trunks: phone_id (default, <voipPhoneId>.sip.voicelogica.ai — routes inbound to the exact line), company_id, or ip (for proxies that mishandle a hostname in Contact). Ignored for edge/wireguard phones."},"tunnelType":{"type":"string","enum":["none","zerotier","ssh","wireguard"],"description":"Type of network tunnel to use for NAT traversal (none for direct connection, zerotier for easy setup, ssh for existing access, wireguard for performance)"},"edgeDeviceId":{"type":"string","description":"Bound edge device (deviceId) when tunnelType is wireguard"},"tunnelConnected":{"type":"boolean","description":"DEPRECATED - always false, nothing updates it. Do NOT use it to judge tunnel health: for edge phones the real WireGuard state is the bound device's `tunnelUp` (GET /admin/edge-devices), and a phone's live health is `registered` + a recent `lastRegisteredAt`."},"tunnelLastConnectedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"zerotierNetworkId":{"type":"string","description":"ZeroTier network ID to join for accessing this PBX (16-character hex string from my.zerotier.com)"},"zerotierPeerIp":{"type":"string","description":"ZeroTier virtual IP address of the PBX (e.g., 10.147.17.100)"},"sshTunnelHost":{"type":"string","description":"SSH gateway hostname/IP that can reach the PBX"},"sshTunnelPort":{"type":"integer","minimum":1,"maximum":65535,"description":"SSH gateway port (default: 22)"},"sshTunnelUsername":{"type":"string","description":"SSH username for tunnel authentication"},"sshTunnelPassword":{"type":"string","description":"SSH password (or use sshTunnelPrivateKey instead for better security)"},"sshTunnelPrivateKey":{"type":"string","description":"SSH private key for authentication (PEM format)"},"wireguardConfigPath":{"type":"string","description":"Path to WireGuard configuration file (e.g., /etc/wireguard/client-pbx.conf)"},"wireguardInterfaceName":{"type":"string","description":"WireGuard interface name (e.g., wg0)"},"allowedCallerIds":{"type":"array","items":{"type":"string"},"description":"List of additional phone numbers (DIDs) accepted for incoming calls on this trunk"},"blockInternationalCalls":{"type":"boolean","description":"When true, outbound calls and transfers on this trunk to explicitly international numbers outside Greece and Cyprus are refused"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","username","login","password","phone","ipAddressInput","port","verified","channelsAvailable","expirationSeconds","allowedIp","preferredCodec"],"description":"Response schema for VoIP phone data including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Main Office Phone","username":"sipuser123","login":"sipuser123","password":"securepassword123","phone":"+1234567890","ipAddressInput":"192.168.1.100","port":5060,"verified":true,"channelsAvailable":10,"country":"United States","state":"California","price":25.99,"expirationSeconds":"3600","registered":true,"voipConnectionIds":["conn_1","conn_2"],"allowedIp":"192.168.1.0/24","webhookUrl":"https://webhook.example.com/voip","inactiveFrom":"2024-12-31T00:00:00.000Z","source":"custom","privateServers":["192.168.1.101","192.168.1.102"],"preferredCodec":"PCMA","yubotoResponseCode":200,"yubotoResponseMessage":"Success","transport":"udp","pickUpDelay":10}},"description":"VoIP phones used for the campaign (legacy)"},"sipTrunks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for this SIP trunk"},"host":{"type":"string","description":"Remote SIP host, FQDN, or IP"},"port":{"type":"integer","description":"Remote SIP port"},"transport":{"type":"string","enum":["udp","tcp","tls"],"description":"SIP transport (udp, tcp, tls)"},"sipTrunkRole":{"type":"string","enum":["provider_trunk","remote_pbx_extension","customer_pbx_trunk"],"default":"provider_trunk","description":"Business role for this SIP trunk"},"source":{"type":"string","enum":["system","custom"],"default":"custom","description":"Who provisioned this trunk: 'system' (VL free DID) or 'custom' (customer-configured)"},"provider":{"type":"string","enum":["msteams"],"description":"Managed peer preset ('msteams' = Microsoft Teams Direct Routing; peer fields are server-controlled). The customer pairs <trunkId>.sip.voicelogica.ai as the SBC in their Microsoft tenant."},"sipDomain":{"type":"string","description":"Incoming PBX trunk SIP domain slug; render as <slug>.sip.voicelogica.ai"},"supportsInbound":{"type":"boolean","default":true,"description":"Whether this provider trunk can receive inbound calls"},"supportsOutbound":{"type":"boolean","default":true,"description":"Whether this provider trunk can originate outbound calls"},"blockInternationalCalls":{"type":"boolean","description":"When true, outbound calls and transfers on this trunk to explicitly international numbers (+ / 00 prefix) outside Greece and Cyprus are refused"},"outsideLinePrefix":{"type":"string","description":"PBX outside-line digit(s) (usually '0'): stripped from inbound caller numbers, added to outbound dialed numbers"},"inboundAuthType":{"type":"string","enum":["ip_auth","registration","none"],"description":"Inbound authentication mode"},"outboundAuthType":{"type":"string","enum":["registration","ip_auth","none"],"description":"Outbound authentication mode"},"username":{"type":"string","description":"Outbound SIP username when using registration or digest"},"password":{"type":"string","description":"Outbound SIP password when using registration or digest"},"authId":{"type":"string","description":"SIP auth ID / login ID for digest authentication"},"ipWhitelist":{"type":"array","items":{"type":"string"},"description":"Trusted static source IPs or CIDR ranges for inbound SIP"},"allowedRtpIps":{"type":"array","items":{"type":"string"},"description":"Additional RTP source IPs (same port) for split-edge media"},"privateServers":{"type":"array","items":{"type":"string"},"description":"Admin-only RTP server IPs this trunk must use (empty = public pool)"},"domain":{"type":"string","description":"SIP domain / realm"},"fromDomain":{"type":"string","description":"From header domain override"},"outboundProxy":{"type":"string","description":"Outbound SIP proxy if configured"},"sipProxy":{"type":"string","description":"Alias for outboundProxy; outbound SIP proxy if configured"},"defaultPhoneNumber":{"type":"string","description":"Default phone number for this trunk; used in Refer-To for agent/PIN transfers"},"codecs":{"type":"array","items":{"type":"string","enum":["pcmu","pcma","g722","opus","telephone-event"]},"description":"Allowed codecs for this trunk"},"enabled":{"type":"boolean","description":"Whether this trunk is enabled for routing"},"allowOriginationThroughRemotePbx":{"type":"boolean","default":false,"description":"Whether remote PBX extension trunks may originate through the remote PBX"},"staticDestinationHost":{"type":"string","description":"Static PBX host/IP for IP-auth incoming PBX trunks that do not REGISTER"},"staticDestinationPort":{"type":"integer","description":"Static PBX SIP port for IP-auth incoming PBX trunks that do not REGISTER"},"maxChannels":{"type":"integer","nullable":true,"description":"Maximum concurrent calls allowed on this trunk (null = unlimited)"},"pickUpDelay":{"type":"integer","default":0,"description":"Seconds the inbound call rings before the AI answers (0 = immediately)"},"registrationExpiresSeconds":{"type":"integer","default":300,"description":"Outbound REGISTER Expires interval (60-86400s)"},"grantedRegistrationExpiresSeconds":{"type":"integer","minimum":60,"maximum":86400,"description":"Registrar 423 Min-Expires floor (SIP operational; refresh cadence / wire Expires only — user registrationExpiresSeconds is unchanged)"},"registrarBindingExpiresSeconds":{"type":"integer","minimum":60,"maximum":86400,"description":"Registrar 200 Expires header when shorter than we requested (refresh/stale only; never Contact expires countdown)"},"otherRegistrations":{"type":"array","items":{"type":"string"},"description":"Edge trunks: other devices registered on the same carrier account (host:port), per the registrar; they ring too and can answer calls first"},"registrationRefreshSeconds":{"type":"integer","minimum":1,"maximum":86400,"description":"Computed REGISTER refresh interval in seconds (read-only; not stored)"},"srtpEnabled":{"type":"boolean","default":false,"description":"Whether this trunk offers SDES SRTP on outbound INVITEs (peer can answer with matching crypto or reject with 488 for plain-RTP retry)"},"registered":{"type":"boolean","description":"Whether the trunk is currently registered (maintained by the SIP stack for registration modes)"},"lastRegisteredAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastResolvedPeerIp":{"type":"string","description":"Last DNS-resolved peer IP (system-written)"},"destinationType":{"type":"string","enum":["user","user_group","ai_agent","external_number","external_bridge","conference_room"],"description":"Type of destination used by the inbound route"},"destinationId":{"type":"string","description":"Default inbound destination entity id"},"webhookUrl":{"type":"string","description":"Pre-answer CALL_INBOUND webhook URL (empty string when auto-disabled after repeated delivery failures)"},"tunnelType":{"type":"string","enum":["none","wireguard"],"default":"none","description":"NAT traversal: none or wireguard edge relay"},"contactHost":{"type":"string","enum":["phone_id","company_id","ip"],"description":"Host in our SIP Contact: phone_id (default), company_id, or ip (only for a proxy that mishandles a hostname). Ignored on edge trunks."},"edgeDeviceId":{"type":"string","description":"Bound edge device id when tunnelType is wireguard"},"trunkNumberCount":{"type":"integer","default":0,"description":"Total trunk numbers attached to this trunk"},"inboundTrunkNumberCount":{"type":"integer","default":0,"description":"Trunk numbers enabled for inbound routing"},"outboundCallerIdTrunkNumberCount":{"type":"integer","default":0,"description":"Trunk numbers enabled as outbound caller IDs"},"hasInboundTrunkNumbers":{"type":"boolean","default":false,"description":"True when this trunk has at least one inbound-enabled trunk number"},"inboundPeers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"sipTrunkId":{"type":"string","description":"SIP trunk this peer registered against"},"remoteAddress":{"type":"string","description":"Source IP observed for REGISTER traffic"},"remotePort":{"type":"integer","description":"UDP/TCP/TLS source port"},"transport":{"type":"string","enum":["udp","tcp","tls"],"description":"Transport used toward the peer"},"contactUri":{"type":"string","description":"Parsed Contact URI from REGISTER"},"fromUser":{"type":"string","description":"Username from REGISTER From header when available"},"registeredAt":{"type":"string","format":"date-time","description":"When we last acknowledged a successful REGISTER"},"expiresAt":{"type":"string","format":"date-time","description":"When this binding lapses unless refreshed by the peer"}},"required":["id","createdAt","active","createdBy","createdById","companyId","sipTrunkId","remoteAddress","remotePort","transport","contactUri","registeredAt","expiresAt"],"description":"Inbound peer registration — a carrier/PBX REGISTERed toward us on this tenant trunk. Survives app restarts; cleared when REGISTER expires or unregister is observed.","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","sipTrunkId":"507f1f77bcf86cd799439022","remoteAddress":"203.0.113.44","remotePort":5060,"transport":"udp","contactUri":"sip:user@carrier.example","fromUser":"user","registeredAt":"2026-05-01T10:00:00.000Z","expiresAt":"2026-05-01T10:05:00.000Z"}},"default":[],"description":"Carrier/PBX peers currently REGISTERed toward this trunk (non-expired; from durable store)"},"guidance":{"type":"string","description":"Connection outcome explanation, returned when the trunk is created"},"connectionInfo":{"type":"array","items":{"type":"string"},"description":"Key connection values as \"label: value\" lines (SBC address, SIP domain, platform signaling IP…), returned when the trunk is created"},"nextSteps":{"type":"array","items":{"type":"string"},"description":"Kind-specific steps to finish connecting this trunk (e.g. the SBC address to pair for Teams, the SIP domain to point a PBX at), returned when the trunk is created"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","port","transport","inboundAuthType","outboundAuthType","ipWhitelist","codecs","enabled","registered"],"description":"Response schema for a SIP trunk including company metadata, audit fields, and registration state","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Carrier A","host":"sip.carrier.example","port":5060,"transport":"udp","sipTrunkRole":"provider_trunk","source":"custom","supportsInbound":true,"supportsOutbound":true,"inboundAuthType":"ip_auth","outboundAuthType":"registration","username":"user","password":"secret","ipWhitelist":["203.0.113.10"],"domain":"carrier.example","sipProxy":"vpbx-sbc.carrier.example","defaultPhoneNumber":"2192192051","codecs":["pcmu","pcma","telephone-event"],"enabled":true,"allowOriginationThroughRemotePbx":false,"registered":true,"lastRegisteredAt":"2024-01-15T09:00:00.000Z","registrationExpiresSeconds":300,"registrationRefreshSeconds":240,"destinationType":"ai_agent","destinationId":"507f1f77bcf86cd799439022","trunkNumberCount":2,"inboundTrunkNumberCount":1,"outboundCallerIdTrunkNumberCount":2,"hasInboundTrunkNumbers":true,"inboundPeers":[]}},"description":"SIP trunks used for the campaign"},"extensionNumber":{"type":"string","description":"Autogenerated 2–3 digit extension users dial to join the campaign"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name"],"example":{"id":"123","companyId":"123","name":"Q4 Sales Campaign","description":"Outbound sales campaign for Q4 revenue generation","type":"phone","status":"active","retries":3,"retryDelayMinutes":30,"maximumConcurrentCalls":10,"notificationSettings":{"enabled":true,"emails":["test@example.com"],"sendAtHour":10}}}}}},"400":{"description":"Bad request - Invalid campaign configuration","content":{"application/json":{}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Name of the campaign"},"description":{"type":"string","description":"Description of the campaign purpose and goals"},"type":{"type":"string","enum":["email","phone","sms"],"description":"Primary channel type for the campaign"},"purpose":{"type":"string","enum":["appointment","lead_qualification","event_invite","payment_collection","custom"],"description":"What the campaign is trying to achieve. Non-custom purposes seed campaign-level analysis fields and call instructions; \"custom\" (default) leaves everything as-is"},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Campaign-level analysis fields, merged with the agent's own analysis properties for calls of this campaign (campaign wins on name collision)"},"stages":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["success"]}},"required":["name","description","nextAction"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["failed"]}},"required":["name","description","nextAction"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["other"]}},"required":["name","description","nextAction"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["retry"]},"maxRetries":{"type":"integer","minimum":1,"maximum":10,"description":"Calls on this stage (1–10), counting the call that put the lead there: 5 = up to 4 more calls, 1 = no call-back"},"retryIntervalMinutes":{"type":"integer","minimum":30,"maximum":10080,"description":"Minutes to wait before the next attempt (min 30)"}},"required":["name","description","nextAction","maxRetries","retryIntervalMinutes"]}],"discriminator":{"propertyName":"nextAction"}},"maxItems":50,"description":"Stages the AI classifies the lead into after an attempt. Finished stages (success / failed / other) close the lead; retry queues another attempt on the campaign channel"},"maxRetriesFollowUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage","nullable":true},"promptSection":{"type":"string","maxLength":5000,"description":"Campaign call instructions injected into the agent context at the start of every campaign call"},"appointmentServiceKeys":{"type":"array","items":{"type":"string"},"description":"Appointment campaigns only: the agent services (serviceKey, from appointmentSettings.services) this campaign books. Left empty, a lead counts as already booked when ANY upcoming calendar event carries their phone number or email. With services picked, the event must ALSO name one of them — an upcoming event with only the phone number means a different service, so the lead is still called. Ignored for other goals."},"dynamicWelcomeMessage":{"type":"boolean","description":"When true, campaign calls open with an AI-generated greeting built from the campaign goal and lead context instead of the agent's fixed welcome message. Explicit opt-in: each call is then billed with a minimum duration of 10 seconds, even if it ends unanswered"},"welcomeMessage":{"type":"string","maxLength":2000,"description":"Static opening spoken on every campaign call. Used only when dynamicWelcomeMessage is not true. Empty means the agent welcome"},"acceptDynamicVariables":{"type":"boolean","description":"When true (default if omitted), extra columns on a lead list become dynamicVariables automatically. When false, only leadColumns (plus phone) are accepted as extra lead fields"},"leadColumns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1},"type":{"type":"string","enum":["string","number","boolean","date"]}},"required":["name","type"]},"description":"Static extra lead columns when acceptDynamicVariables is false. Echoed back when the toggle is on so a later switch-off keeps the schema"},"status":{"type":"string","enum":["draft","active","paused","completed"],"description":"Current status of the campaign"},"retries":{"type":"integer","minimum":0,"maximum":10,"description":"Number of retries for the campaign (0-10; defaults to 3)"},"maximumConcurrentCalls":{"type":"number","minimum":1,"maximum":100,"description":"Maximum number of concurrent calls for the campaign (max 100)"},"retryDelayMinutes":{"type":"integer","minimum":60,"maximum":40320,"description":"Delay between retry attempts in minutes (60-40320; defaults to 240 = 4 hours)"},"schedule":{"type":"object","properties":{"days":{"type":"array","items":{"type":"object","properties":{"runFromTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23},"minutes":{"type":"number","minimum":0,"maximum":59}},"required":["hours","minutes"]},"runToTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23},"minutes":{"type":"number","minimum":0,"maximum":59}},"required":["hours","minutes"]},"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]}},"required":["runFromTime","runToTime","day"]},"description":"Days of the week and hours of the day to run the campaign"},"timeZone":{"type":"string","description":"IANA time zone, e.g. Europe/Athens"},"runEverySeconds":{"oneOf":[{"type":"number","enum":[60]},{"type":"number","enum":[300]},{"type":"number","enum":[900]},{"type":"number","enum":[1800]},{"type":"number","enum":[3600]},{"type":"number","enum":[7200]},{"type":"number","enum":[14400]},{"type":"number","enum":[28800]},{"type":"number","enum":[57600]},{"type":"number","enum":[86400]}],"description":"How often the campaign checks for leads to call, in seconds: 60, 300, 900, 1800, 3600, 7200, 14400, 28800, 57600 or 86400. Use 60 unless asked otherwise."}},"required":["timeZone"],"description":"Campaign scheduling configuration"},"agentId":{"type":"string","description":"ID of the agent responsible for the campaign"},"sipTrunkIds":{"type":"array","items":{"type":"string"},"description":"SIP trunks to dial out from. Get IDs from POST /phones/sip-trunks/query. Required to go live unless verifiedCallerId is set."},"verifiedCallerId":{"type":"string","description":"Verified phone number used as caller ID when dialing on the company trunk"},"defaultCallerIds":{"type":"array","items":{"type":"string","maxLength":20},"description":"Pool of numbers presented to the people being called, for every lead that does not carry its own callerId. Each entry must be a number the campaign SIP trunks own (the trunk default number or an inbound trunk number / DID). One entry = every lead sees that number; several = the pool is spread across leads, each lead keeping the same number across its retries. Empty = the trunk decides, as before"},"notificationSettings":{"type":"object","properties":{"enabled":{"type":"boolean"},"emails":{"type":"array","items":{"type":"string","format":"email"}},"lastSentAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"description":"Notifications configuration"},"lastRunAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"allowedPhoneNumbers":{"type":"array","items":{"type":"string"},"description":"Array of phone numbers that are allowed to be called"},"defaultCampaign":{"type":"boolean","description":"Whether this is the default campaign for the company"},"processingNow":{"type":"boolean","description":"Whether the campaign is currently being processed by the job service"},"processingNowSince":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"userSettings":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":50},"maxItems":100,"default":[],"description":"Company users who may dial into this campaign and take leads"},"dispatchStrategy":{"type":"string","enum":["random","least_answered","round_robin"],"default":"random","description":"How the next lead is given to a waiting user: random, fewest leads so far this session (least_answered), or longest wait (round_robin)"},"overflowToAi":{"type":"boolean","default":true,"description":"If a live lead cannot attach to an online assigned user, send it to the campaign AI instead of hold music. Default true. Campaigns with assigned users do not dial unless at least one of those users is online."},"wrapUpSeconds":{"type":"integer","minimum":0,"maximum":300,"default":5,"description":"Seconds after a lead hangup before the user is eligible for the next lead"},"restrictDialIn":{"type":"boolean","default":true,"description":"When true, only listed userIds may dial the campaign extension"}},"description":"Human users who dial into the campaign, how leads are dispatched to them, and whether unanswered leads overflow to AI"}},"required":["name"],"description":"Request schema for creating or updating a campaign","example":{"name":"Q4 Sales Campaign","description":"Outbound sales campaign for Q4 revenue generation","type":"phone","status":"draft","agentId":"507f1f77bcf86cd799439012","sipTrunkIds":["507f1f77bcf86cd799439011"],"retries":3,"retryDelayMinutes":240,"maximumConcurrentCalls":5,"schedule":{"days":[{"day":"monday","runFromTime":{"hours":9,"minutes":0},"runToTime":{"hours":17,"minutes":0}},{"day":"tuesday","runFromTime":{"hours":9,"minutes":0},"runToTime":{"hours":17,"minutes":0}}],"timeZone":"Europe/Athens","runEverySeconds":60}}},"example":{"name":"Q4 Sales Campaign","description":"Outbound sales campaign for Q4 revenue generation","type":"phone","status":"draft","agentId":"507f1f77bcf86cd799439012","sipTrunkIds":["507f1f77bcf86cd799439011"],"retries":3,"retryDelayMinutes":240,"maximumConcurrentCalls":5,"schedule":{"days":[{"day":"monday","runFromTime":{"hours":9,"minutes":0},"runToTime":{"hours":17,"minutes":0}},{"day":"tuesday","runFromTime":{"hours":9,"minutes":0},"runToTime":{"hours":17,"minutes":0}}],"timeZone":"Europe/Athens","runEverySeconds":60}}}}},"security":[{"apiKey":[]}],"tags":["Agentic - Campaigns"]}},"/api/v1/agentic/campaigns/:id":{"put":{"summary":"Update campaign configuration and settings","description":"Update an existing campaign's configuration. You can modify:\n\n- **Campaign details**: Name, description, status\n- **Scheduling**: Business hours, frequency, timezone\n- **Call settings**: Retry attempts, concurrent call limits\n- **Agent assignment**: Change the AI agent handling calls\n- **SIP trunks**: Update `sipTrunkIds` used for outbound calls\n- **Notifications**: Email notification settings\n\n**Common Use Cases:**\n- Pause a running campaign by setting `status: \"paused\"`\n- Adjust concurrent call limits during peak hours\n- Update schedule to match business hours\n- Change AI agent to test different conversation flows","responses":{"200":{"description":"Campaign updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","minLength":1,"description":"Name of the campaign"},"description":{"type":"string","description":"Description of the campaign purpose and goals"},"type":{"type":"string","enum":["email","phone","sms"],"description":"Primary channel type for the campaign"},"purpose":{"type":"string","enum":["appointment","lead_qualification","event_invite","payment_collection","custom"],"description":"What the campaign is trying to achieve. Non-custom purposes seed campaign-level analysis fields and call instructions; \"custom\" (default) leaves everything as-is"},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Campaign-level analysis fields, merged with the agent's own analysis properties for calls of this campaign (campaign wins on name collision)"},"stages":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["success"]}},"required":["name","description","nextAction"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["failed"]}},"required":["name","description","nextAction"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["other"]}},"required":["name","description","nextAction"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["retry"]},"maxRetries":{"type":"integer","minimum":1,"maximum":10,"description":"Calls on this stage (1–10), counting the call that put the lead there: 5 = up to 4 more calls, 1 = no call-back"},"retryIntervalMinutes":{"type":"integer","minimum":30,"maximum":10080,"description":"Minutes to wait before the next attempt (min 30)"}},"required":["name","description","nextAction","maxRetries","retryIntervalMinutes"]}],"discriminator":{"propertyName":"nextAction"}},"maxItems":50,"description":"Stages the AI classifies the lead into after an attempt. Finished stages (success / failed / other) close the lead; retry queues another attempt on the campaign channel"},"maxRetriesFollowUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage","nullable":true},"promptSection":{"type":"string","maxLength":5000,"description":"Campaign call instructions injected into the agent context at the start of every campaign call"},"appointmentServiceKeys":{"type":"array","items":{"type":"string"},"description":"Appointment campaigns only: the agent services (serviceKey, from appointmentSettings.services) this campaign books. Left empty, a lead counts as already booked when ANY upcoming calendar event carries their phone number or email. With services picked, the event must ALSO name one of them — an upcoming event with only the phone number means a different service, so the lead is still called. Ignored for other goals."},"dynamicWelcomeMessage":{"type":"boolean","description":"When true, campaign calls open with an AI-generated greeting built from the campaign goal and lead context instead of the agent's fixed welcome message. Explicit opt-in: each call is then billed with a minimum duration of 10 seconds, even if it ends unanswered"},"welcomeMessage":{"type":"string","maxLength":2000,"description":"Static opening spoken on every campaign call. Used only when dynamicWelcomeMessage is not true. Empty means the agent welcome"},"acceptDynamicVariables":{"type":"boolean","description":"When true (default if omitted), extra columns on a lead list become dynamicVariables automatically. When false, only leadColumns (plus phone) are accepted as extra lead fields"},"leadColumns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1},"type":{"type":"string","enum":["string","number","boolean","date"]}},"required":["name","type"]},"description":"Static extra lead columns when acceptDynamicVariables is false. Echoed back when the toggle is on so a later switch-off keeps the schema"},"status":{"type":"string","enum":["draft","active","paused","completed"],"description":"Current status of the campaign"},"retries":{"type":"integer","minimum":0,"maximum":10,"description":"Number of retries for the campaign (0-10; defaults to 3)"},"maximumConcurrentCalls":{"type":"number","minimum":1,"maximum":100,"description":"Maximum number of concurrent calls for the campaign (max 100)"},"retryDelayMinutes":{"type":"integer","minimum":60,"maximum":40320,"description":"Delay between retry attempts in minutes (60-40320; defaults to 240 = 4 hours)"},"schedule":{"type":"object","properties":{"days":{"type":"array","items":{"type":"object","properties":{"runFromTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23},"minutes":{"type":"number","minimum":0,"maximum":59}},"required":["hours","minutes"]},"runToTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23},"minutes":{"type":"number","minimum":0,"maximum":59}},"required":["hours","minutes"]},"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]}},"required":["runFromTime","runToTime","day"]},"description":"Days of the week and hours of the day to run the campaign"},"timeZone":{"type":"string","description":"IANA time zone, e.g. Europe/Athens"},"runEverySeconds":{"oneOf":[{"type":"number","enum":[60]},{"type":"number","enum":[300]},{"type":"number","enum":[900]},{"type":"number","enum":[1800]},{"type":"number","enum":[3600]},{"type":"number","enum":[7200]},{"type":"number","enum":[14400]},{"type":"number","enum":[28800]},{"type":"number","enum":[57600]},{"type":"number","enum":[86400]}],"description":"How often the campaign checks for leads to call, in seconds: 60, 300, 900, 1800, 3600, 7200, 14400, 28800, 57600 or 86400. Use 60 unless asked otherwise."}},"required":["timeZone"],"description":"Campaign scheduling configuration"},"agentId":{"type":"string","description":"ID of the agent responsible for the campaign"},"voipPhoneIds":{"type":"array","items":{"type":"string"},"description":"Legacy VoIP phone IDs. Prefer sipTrunkIds."},"sipTrunkIds":{"type":"array","items":{"type":"string"},"description":"SIP trunks to dial out from. Get IDs from POST /phones/sip-trunks/query. Required to go live unless verifiedCallerId is set."},"verifiedCallerId":{"type":"string","description":"Verified phone number used as caller ID when dialing on the company trunk"},"defaultCallerIds":{"type":"array","items":{"type":"string"},"description":"Pool of numbers presented to the people being called, for leads without their own callerId"},"notificationSettings":{"type":"object","properties":{"enabled":{"type":"boolean"},"emails":{"type":"array","items":{"type":"string","format":"email"}},"lastSentAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"description":"Notifications configuration"},"lastRunAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"allowedPhoneNumbers":{"type":"array","items":{"type":"string"},"description":"Array of phone numbers that are allowed to be called"},"defaultCampaign":{"type":"boolean","description":"Whether this is the default campaign for the company"},"processingNow":{"type":"boolean","description":"Whether the campaign is currently being processed by the job service"},"processingNowSince":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"userSettings":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":50},"maxItems":100,"default":[],"description":"Company users who may dial into this campaign and take leads"},"dispatchStrategy":{"type":"string","enum":["random","least_answered","round_robin"],"default":"random","description":"How the next lead is given to a waiting user: random, fewest leads so far this session (least_answered), or longest wait (round_robin)"},"overflowToAi":{"type":"boolean","default":true,"description":"If a live lead cannot attach to an online assigned user, send it to the campaign AI instead of hold music. Default true. Campaigns with assigned users do not dial unless at least one of those users is online."},"wrapUpSeconds":{"type":"integer","minimum":0,"maximum":300,"default":5,"description":"Seconds after a lead hangup before the user is eligible for the next lead"},"restrictDialIn":{"type":"boolean","default":true,"description":"When true, only listed userIds may dial the campaign extension"},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"User id"},"name":{"type":"string","description":"Display name"},"email":{"type":"string","description":"Email"},"phoneNo":{"type":"string","description":"Phone number"}},"required":["id","name"]},"description":"Hydrated users for userIds"}},"description":"Assigned users, dispatch strategy, and AI overflow"},"agent":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string"},"agentType":{"type":"string","enum":["prompt-based","analysis-agent","ai-assistant","node-based"],"example":"prompt-based","description":"The type of agent architecture that determines its capabilities and behavior. `prompt-based`: Standard conversational agent that can answer calls, transfer calls, handle emails, book appointments, and execute workflows. Best for general-purpose use cases. `analysis-agent`: Specialized agent for call analysis only. Used to analyze calls after they have been transferred to humans. Monitors and extracts insights from ongoing calls. See: https://docs.voicelogica.ai/transfer-calls/introduction `ai-assistant`: Personal AI assistant/voicemail. Designed ONLY for individual use as your own AI voicemail or personal assistant. Handles calls when you are unavailable. `node-based`: Advanced agent with visual flow builder. Supports complex branching logic, conditional routing, and multi-step reasoning. Best for sophisticated conversational workflows."},"systemPrompt":{"type":"string"},"dynamicVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the dynamic variable"},"value":{"type":"string","description":"The value of the dynamic variable"}},"required":["name","value"]}},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Locale code"},"secondaryLanguages":{"type":"array","items":{"type":"object","properties":{"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"The language of the secondary language"},"type":{"type":"string","enum":["other_agent","other_voice"],"description":"The type of the secondary language"},"agentId":{"type":"string","description":"The ID of the agent that the secondary language is for"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"enabled":{"type":"boolean","description":"Whether the secondary language is enabled"},"defaultContries":{"type":"array","items":{"type":"string","enum":["Afghanistan","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Bouvet Island","Brazil","British Indian Ocean Territory","Brunei Darussalam","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","China","Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo","Congo, The Democratic Republic of the","Cook Islands","Costa Rica","Cote D'Ivoire","Croatia","Cuba","Cyprus","Czech Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Falkland Islands (Malvinas)","Faroe Islands","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Heard Island and Mcdonald Islands","Holy See (Vatican City State)","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran, Islamic Republic Of","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kuwait","Kyrgyzstan","Lao People\"S Democratic Republic","Lao People's Democratic Republic","Latvia","Lebanon","Lesotho","Liberia","Libyan Arab Jamahiriya","Liechtenstein","Lithuania","Luxembourg","Macao","Macedonia, The Former Yugoslav Republic of","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia, Federated States of","Moldova, Republic of","Monaco","Mongolia","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands","Netherlands Antilles","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territory, Occupied","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn","Poland","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saint Helena","Saint Kitts and Nevis","Saint Lucia","Saint Pierre and Miquelon","Saint Vincent and the Grenadines","Samoa","San Marino","Sao Tome and Principe","Saudi Arabia","Senegal","Serbia and Montenegro","Seychelles","Sierra Leone","Singapore","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia and the South Sandwich Islands","Spain","Sri Lanka","Sudan","Suriname","Svalbard and Jan Mayen","Swaziland","Sweden","Switzerland","Syrian Arab Republic","Taiwan, Province of China","Tajikistan","Tanzania, United Republic of","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey","Turkmenistan","Turks and Caicos Islands","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States Minor Outlying Islands","United States","Uruguay","Uzbekistan","Vanuatu","Venezuela","Virgin Islands, British","Virgin Islands, U.S.","Wallis and Futuna","Western Sahara","Yemen","Zambia","Zimbabwe","Unknown or Invalid Region","Russia"],"description":"Country name"},"description":"The default countries for the secondary language"}},"required":["language","type"]}},"knowledgeFileIds":{"type":"array","items":{"type":"string"}},"workflowsIds":{"type":"array","items":{"type":"string"}},"allowedToCopy":{"type":"string","enum":["sameCompany","public","publicWithPassword","private"]},"navigateToNodeTool":{"type":"boolean","description":"Whether the agent can navigate to a specific node tool based on instructions"},"syncWithContacts":{"type":"boolean"},"agentEmailSettings":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"systemPrompt":{"type":"string"},"functionCallIds":{"type":"array","items":{"type":"string"}},"mailboxIds":{"type":"array","items":{"type":"string"},"description":"Mailboxes exclusively assigned to this agent for inbound mail conversations"},"ccOptions":{"type":"array","items":{"type":"string"}},"evaluationSettings":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"methodsEnabled":{"type":"object","properties":{"createDraft":{"type":"boolean"},"reply":{"type":"boolean"},"training":{"type":"boolean"}}},"processEmailPrompt":{"type":"string"},"trainingEvaluationPrompt":{"type":"string"},"completeWhenNoReplyNeeded":{"type":"boolean","description":"When true, newsletters/receipts/no-reply are marked closed (completed). Default true."}},"example":{"methodsEnabled":{"createDraft":true,"reply":true,"training":false},"processEmailPrompt":"Keep replies short and professional.","trainingEvaluationPrompt":"Evaluate this email for training purposes.","completeWhenNoReplyNeeded":true}},"displayBusinessDetails":{"type":"object","properties":{"name":{"type":"boolean"},"address":{"type":"boolean"},"website":{"type":"boolean"},"email":{"type":"boolean"},"phone":{"type":"boolean"},"operatingHours":{"type":"boolean"},"isOpenNow":{"type":"boolean"},"utcOffset":{"type":"boolean"},"wheelchairAccessibleEntrance":{"type":"boolean"}},"example":{"name":true,"address":true,"website":true,"email":true,"phone":true,"operatingHours":true,"isOpenNow":true,"utcOffset":true,"wheelchairAccessibleEntrance":false}},"authorizationConfig":{"type":"object","properties":{"smsEnabled":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"emailEnabled":{"type":"boolean"},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"example":{"smsEnabled":true,"emailEnabled":true}},"contactData":{"type":"object","properties":{"enabled":{"type":"boolean"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["enabled"],"example":{"enabled":true}},"functionCalls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"description":{"type":"string","description":"Description of the function call"},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"description":"Condition blocks for execution logic"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"],"description":"When to execute the function call"},"confirmationMethodConfig":{"type":"object","properties":{"confirmationRequired":{"type":"boolean"},"secondsToWait":{"type":"number","minimum":10},"wordMatch":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"array","items":{"type":"string"}}},"required":["required","value"]},"aiGuidance":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]},"dtmf":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]}},"required":["confirmationRequired","secondsToWait"],"description":"Configuration for user confirmation"},"messageToUserBeforeAction":{"type":"string","description":"Message to show user before executing the action"},"messageToUserAfterAction":{"type":"string","description":"Message to show user after executing the action"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"functions":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"number"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"]},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"action":{"type":"string","enum":["emailConfig","apiCall","sendSms","createEvent","sendPhoneCall","forwardCall","googleSearch","sendMessage","endCallConfig","googleSheetConfig","googleDocConfig","llmCompletion","hubspotConfig","aiResponse","transferCall","afmSearch","codeExecution"]},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}},"forwardCallConfig":{"type":"object","properties":{"voipConnectionId":{"type":"string","minLength":24}},"required":["voipConnectionId"],"example":{"voipConnectionId":"507f1f77bcf86cd799439011"}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}},"sendMessageConfig":{"type":"object","properties":{"messageToUser":{"type":"string","minLength":1}},"required":["messageToUser"],"example":{"messageToUser":"Your order has been shipped!"}},"endCallConfig":{"type":"object","properties":{"reason":{"type":"string","minLength":2}},"required":["reason"],"example":{"reason":"User requested to end the call"}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["sequence","action"]},"description":"Internal actions to execute"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","parameters","functions"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Send Email Notification","description":"Sends an email notification to the user","conditionBlocks":[],"executeAt":"immediate","messageToUserBeforeAction":"I will send you an email notification.","messageToUserAfterAction":"Email notification sent successfully!","fileIds":["file_123","file_456"],"files":[{"id":"file_123","filename":"document.pdf","s3Id":"s3-file-123","displayUrl":"https://example.com/files/document.pdf"}],"parameters":[{"id":"param_1","name":"Email Address","description":"Recipient email address","type":"string","required":true}],"functions":[{"id":"func_1","name":"Send Email","type":"email","config":{"to":"{{emailAddress}}","subject":"Notification","body":"This is a notification email."}}]}}}},"example":{"model":{"completionProvider":"openai","model":"gpt-4o-mini","temperature":0.5,"maxCompletionTokens":500},"systemPrompt":"You are a helpful email assistant. Always be professional and courteous.","functionCalls":[{"id":"fc-123","name":"Send Email","description":"Send an email to the specified recipient"}],"powerUps":["appointment-booking"],"displayBusinessDetails":{"name":true,"address":true,"website":true,"email":true,"phone":true,"operatingHours":true,"isOpenNow":true,"utcOffset":true,"wheelchairAccessibleEntrance":false}}},"agentPhoneSettings":{"type":"object","properties":{"interimGeneration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to generate interim generation while user is speaking"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to trigger interim generation"},"prompt":{"type":"string","description":"The prompt to use when generating interim generation"},"minimumWordsForFullResponse":{"type":"number","description":"The minimum number of words for a full response"}},"description":"Configuration for interim generation"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"AI model configuration for the agent"},"sendSms":{"type":"boolean","description":"Whether to send SMS"},"blockInterruptionWhileAiIsGenerating":{"type":"boolean","description":"Whether to block interruption while AI is generating"},"senderId":{"type":"string","description":"The ID of the sender to use for SMS"},"allowHumanToInterruptAiOnFirstMessage":{"type":"boolean","description":"Whether to allow human to interrupt AI on the first message"},"ssml":{"type":"boolean","description":"Whether to use SSML (Speech Synthesis Markup Language) for voice synthesis"},"skipTurnEnabled":{"type":"boolean","description":"Whether to skip turn during the call"},"skipTurnPrompt":{"type":"string","description":"The prompt to use when skipping turn during the call"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"timesToNudgeBeforeHungup":{"type":"number","minimum":0,"maximum":3,"description":"Number of times to nudge the user before hanging up the call (1-3)"},"nudgeIntervalSeconds":{"type":"number","minimum":0,"maximum":60,"description":"Interval in seconds between nudges when user is silent (0-60 seconds)"},"nudgePrompt":{"type":"string","description":"The prompt to use when nudging the user"},"actionsAfterNudge":{"type":"array","items":{"type":"string","enum":["hangup","forward"]},"maxItems":2,"description":"Actions after nudge when silence threshold is reached (hangup, forward, or both)"},"systemPrompt":{"type":"string","description":"The system prompt that defines the agent's behavior and personality"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"phoneFirstMessageAiGenerated":{"type":"boolean","description":"Whether the first message should be AI-generated or use a predefined message"},"updateAdaptationPhrasesOnSystemPromptChange":{"type":"boolean","description":"Whether to update adaptation phrases when system prompt changes"},"phoneFirstMessage":{"type":"string","description":"The first message to say when the call connects"},"phoneFirstMessageOffHours":{"type":"string","description":"Welcome message when the business is closed; if empty, the normal first message is used"},"endCallAfterOffHoursWelcomeMessage":{"type":"boolean","description":"When the business is closed and the off-hours welcome message plays, hang up as soon as it finishes instead of continuing the conversation"},"transcriptionConfig":{"type":"object","properties":{"transcriptionProvider":{"type":"string","enum":["microsoft","google","fireworks","speechmatics","openai","assemblyai","deepgram","google_v1","google_v2","elevenlabs","voicelogica","soniox"],"description":"The transcription service provider to use for speech-to-text"},"silenceDurationMs":{"type":"number","minimum":500,"description":"Duration of silence in milliseconds before considering the user finished speaking"},"adaptationPhraseSetIds":{"type":"array","items":{"type":"string"},"description":"IDs of adaptation phrase sets to improve transcription accuracy"},"transcriptionVoiceMailPhrases":{"type":"array","items":{"type":"string"},"description":"Phrases that indicate the call has reached a voicemail system"},"waitForFullTranscription":{"type":"boolean","description":"Whether to wait for complete transcription before processing"},"enhanced":{"type":"boolean","description":"Whether to use enhanced transcription models for better accuracy"},"audioEnhancement":{"type":"boolean","description":"Whether to run ai-coustics speech enhancement (noise/background-speech suppression) on caller audio before transcription"},"audioEnhancementLevel":{"type":"number","minimum":0,"maximum":1,"description":"How aggressively the ai-coustics model suppresses noise (0.0-1.0). Uses the model default when omitted"},"endpointSensitivity":{"type":"number","minimum":-1,"maximum":1,"nullable":true,"description":"Soniox only: how aggressively endpoints are detected (-1.0 to 1.0). Higher = faster end-of-turn but more risk of cutting the caller off mid-sentence. Platform default 0.3"},"maxEndpointDelayMs":{"type":"number","minimum":500,"maximum":3000,"nullable":true,"description":"Soniox only: hard cap on how long Soniox may wait for an endpoint after speech ends (500-3000ms). Platform default 1500"},"endpointLatencyAdjustmentLevel":{"type":"integer","minimum":0,"maximum":3,"nullable":true,"description":"Soniox only: endpoint latency reduction level 0-3 (3 = most aggressive). Platform default 3"},"speculativeFinalize":{"type":"boolean","nullable":true,"description":"Soniox only: at the speculative quiet moment, request finalize() to flush pending tokens into the candidate before the endpoint. Platform default from admin settings"},"singleUtterance":{"type":"boolean","description":"Whether to process speech as single utterances"},"openAiModel":{"type":"string","enum":["whisper-1","gpt-transcribe","gpt-4o-transcribe","gpt-4o-mini-transcribe","gpt-4o-transcribe-diarize"],"description":"OpenAI model to use for transcription"},"prompt":{"type":"string","description":"Custom prompt used for transcription processing"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to focus on during transcription"},"initializationMethod":{"type":"string","enum":["on_call_start","on_human_join"],"description":"Method to initialize the transcription service"},"adaptationPhraseSets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the adaptation phrase set"},"description":{"type":"string","nullable":true,"description":"The description of the phrase set"},"phraseSetId":{"type":"string","description":"The phrase set id"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Locale code"},"phrases":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Phrase value"},"boost":{"type":"number","minimum":1,"maximum":20,"description":"Boost value (1-20)"}},"required":["value","boost"]},"nullable":true,"description":"The phrases of the set"},"boost":{"type":"number","minimum":1,"maximum":20,"nullable":true,"description":"Boost value (1-20)"},"apiEnabled":{"type":"boolean","nullable":true,"description":"Whether API is enabled"},"apiUrl":{"type":"string","nullable":true,"description":"API URL"},"apiKey":{"type":"string","nullable":true,"description":"API key"},"lastPulledAt":{"type":"string","format":"date-time","description":"The last pulled at date of the phrase set","nullable":true}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","phraseSetId","language"],"description":"Response schema for adaptation phrase set including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Greetings","description":"Common customer greeting phrases","phraseSetId":"greetings_001","language":"en-US","phrases":[{"value":"Hello","boost":5},{"value":"Hi there","boost":3},{"value":"Good morning","boost":4}],"boost":5,"apiEnabled":true,"apiUrl":"https://api.example.com/phrases","apiKey":"api_key_123","lastPulledAt":"2024-01-15T10:30:00.000Z"}},"description":"Adaptation phrase sets used for transcription"}},"required":["transcriptionProvider"],"description":"Configuration for speech-to-text transcription settings","example":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"waitForFullTranscription":false,"openAiModel":"whisper-1"}},"standbyConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable standby (sleep/wake) for this agent"},"wakePhrases":{"type":"array","items":{"type":"string","minLength":2,"maxLength":50},"maxItems":5,"description":"Phrases that wake the agent. On human-to-human calls the agent stays asleep until one is heard; on normal AI calls a wake phrase brings it back after it was told to sleep. Both parties hear the response."},"sleepPhrases":{"type":"array","items":{"type":"string","minLength":2,"maxLength":50},"maxItems":5,"default":[],"description":"Phrases that put the agent into standby — it stops responding entirely until woken (distinct from skip-turn). Mainly used on normal AI calls."}},"required":["enabled","wakePhrases"],"description":"Standby (sleep/wake) configuration","example":{"enabled":true,"wakePhrases":["logica"],"sleepPhrases":["go to sleep"]}},"voipConnectionIds":{"type":"array","items":{"type":"string"},"description":"@deprecated Legacy VoIP connection IDs. Use transferSettings.availableTransferDestinations + SipTrunk / UserEndpoint / UserGroup. Kept for backward-compat reads until the migration script lands."},"connectDynamically":{"type":"boolean","description":"Whether to connect the user to the appropriate AI or Human Agent dynamically based on the system prompt"},"firstMessageSenderOnOutgoingCall":{"type":"string","enum":["agent","user"],"description":"Who should send the first message on outgoing calls"},"endCallConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable automatic call ending. When enabled, the agent can end calls based on configured reasons"},"messageToClient":{"type":"string","description":"The message the agent will say to the client before ending the call. This is used when aiGenerated is false"},"aiGenerated":{"type":"boolean","description":"When true, the agent will generate a contextual goodbye message. When false, it uses the fixed messageToClient"},"maximumTimeEnabled":{"type":"boolean","description":"Enable automatic call termination after reaching the maximum time limit"},"maximumTimeCallInSeconds":{"type":"number","minimum":1,"description":"Maximum allowed call duration in seconds. Calls will automatically end when this limit is reached (e.g., 300 for 5 minutes)"},"endCallReasons":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","description":"The specific condition or reason when the agent should end the call (e.g., \"customer doesnt want anything else\", \"issue resolved\", \"transferred to human\")"},"aiGenerated":{"type":"boolean","description":"When true, the AI generates a contextual goodbye message. When false, uses a fixed message"},"prompt":{"type":"string","description":"Template or instruction for the AI to generate the goodbye message. Used when aiGenerated is true to guide the tone and content"},"maxInterruptions":{"type":"integer","minimum":0,"maximum":5,"description":"How many times the caller may interrupt the goodbye and keep the call alive before the hangup becomes final. 0 hangs up at once even if the caller speaks. Defaults to 1"}},"required":["reason","aiGenerated"],"example":{"reason":"completed","aiGenerated":true,"prompt":"Thank you for calling. Have a great day!"}},"description":"Detailed end call configurations with specific reasons and custom prompts. Each reason defines when the agent should end the call and what to say"}},"description":"Configuration for automatic call ending behavior","example":{"enabled":true,"aiGenerated":true,"maximumTimeEnabled":true,"maximumTimeCallInSeconds":300,"endCallReasons":[{"reason":"when customer doesnt want anything else","messageToClient":"Thank you for calling. If you need anything else, please call back.","aiGenerated":true}]}},"afterCallFunctionCallIds":{"type":"array","items":{"type":"string"},"description":"IDs of function calls to execute after the call ends"},"postCallAnalysisConfig":{"type":"object","properties":{"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"AI model to use for post-call analysis"},"minimumDuration":{"type":"number","description":"Minimum duration in seconds to generate post-call analysis & summary"},"summaryEnabled":{"type":"boolean","description":"Whether to generate summary"},"summaryPrompt":{"type":"string","maxLength":5000,"description":"Custom prompt for generating call summary"},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties to extract and analyze from the call"},"allowedAutoTaskKinds":{"type":"array","items":{"type":"string","enum":["todo","call","meeting","reminder","callback"]},"description":"Task kinds the AI may auto-create at the end of the call. Human↔AI calls only allow \"callback\"; human↔human (transferred) calls allow the others. Empty = the AI creates no tasks post-call."},"analysisPrompt":{"type":"string","description":"Custom prompt for call analysis"},"emails":{"type":"array","items":{"type":"string","format":"email"},"description":"Email addresses to send post-call analysis to"},"phoneNumbers":{"type":"array","items":{"type":"string"},"description":"Phone numbers to send post-call analysis to"},"webhookHeaders":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The key of the webhook header"},"value":{"type":"string","description":"The value of the webhook header"}},"required":["key","value"]},"description":"Webhook headers to send with the post-call analysis data"},"webhookUrl":{"type":"string","format":"uri","description":"Webhook URL to send post-call analysis data to"},"webhookUseProtectedValues":{"type":"boolean","description":"When the agent protects sensitive data: send the REAL values (ΑΦΜ, ΑΜΚΑ, IBAN, …) to this webhook instead of the placeholders. Off by default; every send is audited. Only members who may reveal sensitive data can turn it on."},"analysisSmsConfig":{"type":"object","properties":{"sendSmsCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"smsPromptEvaluation":{"type":"string","description":"Prompt to evaluate if sms should be sent"},"smsMessage":{"type":"string","description":"Custom sms message to send"},"minimumDuration":{"type":"number","description":"Minimum duration in minutes to send sms"},"sendSmsFromCallerId":{"type":"boolean","description":"Whether to send the SMS using the caller ID (company phone number) that made the call as the sender"}},"required":["sendSmsCondition"],"description":"Configuration for sms content"},"telegramChats":{"type":"array","items":{"type":"string"},"description":"Telegram chat ids that receive the post-call alert. Ids come from the reachable-chat registry (GET /telegram/chats) — a bot may only message a chat that contacted it first, so arbitrary ids cannot be typed in."},"analysisTelegramConfig":{"type":"object","properties":{"sendTelegramCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"telegramPromptEvaluation":{"type":"string","description":"Prompt to evaluate if a Telegram message should be sent (and, with evaluate_condition_and_recipients, which chats)"},"telegramMessage":{"type":"string","description":"Custom Telegram message to send"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds before a Telegram alert is sent"}},"required":["sendTelegramCondition"],"description":"Configuration for the Telegram alert"},"viberChannelIds":{"type":"array","items":{"type":"string"},"description":"Connected Viber Channels (ids from the Viber Channels list) that receive the post-call alert"},"analysisViberChannelConfig":{"type":"object","properties":{"sendViberChannelCondition":{"type":"string","enum":["always","evaluate_condition","never"]},"viberChannelPromptEvaluation":{"type":"string","description":"Prompt to evaluate whether the Viber Channel alert should be posted"},"viberChannelMessage":{"type":"string","description":"Custom Viber Channel message (defaults to the call summary). Takes {{placeholders}}: any analysis property ({{client_name}}), {{summary}}, {{analysis_fields}} (every analysis property as \"Label: value\"), {{phone_number}}"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds before a Viber Channel alert is posted"}},"required":["sendViberChannelCondition"],"description":"Configuration for the Viber Channel alert"},"analysisEmailConfig":{"type":"object","properties":{"dailyDigest":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Send one summary email a day instead of one per call. With a condition prompt, calls that pass it are still emailed at once (urgent); the rest go in the summary."},"alsoEachCall":{"type":"boolean","description":"Also send the normal email after each call, on top of the daily summary. Default false."},"sendTime":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Local time (company timezone) to send the summary, HH:mm. Default 20:00. It covers the 24 hours before."},"lastSentAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"required":["enabled"],"description":"Daily summary email instead of one email per call"},"includeInEmail":{"type":"object","properties":{"callUrl":{"type":"boolean","description":"Whether to include call URL in email"},"summary":{"type":"boolean","description":"Whether to include call summary in email"},"analysisProperties":{"type":"boolean","description":"Whether to include analyzed properties in email"},"dynamicVariables":{"type":"boolean","description":"Whether to include collected / dynamic variables (e.g. widget form fields) in email"},"recording":{"type":"boolean","description":"Whether to include call recording in email"},"transcription":{"type":"boolean","description":"Whether to include call transcription in email"}},"description":"Configuration for email content"},"sendEmailCondition":{"type":"string","enum":["always","evaluate_condition","evaluate_condition_and_recipients","never"]},"emailPromptEvaluation":{"type":"string","description":"Prompt to evaluate if email should be sent"},"emailSubject":{"type":"string","description":"Custom email subject to send"},"minimumDuration":{"type":"number","description":"Minimum call duration in seconds to send email (voice / websocket calls)"},"minimumVisitorMessages":{"type":"integer","minimum":0,"description":"Minimum visitor (Contact/User) messages required to send email for chat / message sessions"}},"required":["sendEmailCondition"],"description":"Configuration for email content"},"excludePhoneNumbers":{"type":"array","items":{"type":"string"},"description":"Caller phone numbers excluded from post-call processing. This suppresses the whole post-call pipeline for that number, not just the notification: no summary is generated, and because caller memory is built from stored summaries, an excluded number also loses memory of its previous calls. Use it for internal test lines, never for a customer you still want remembered."},"evaluationConfig":{"type":"object","properties":{"issuesEnabled":{"type":"boolean","description":"Run the QA/issue lens (defaults on)"},"opportunitiesEnabled":{"type":"boolean","description":"Run the opportunity-mining lens (defaults off; sellable)"},"audioAnalysisEnabled":{"type":"boolean","description":"Re-transcribe the recording for WER and flag awkward pauses (defaults on)"},"errorAlertsEnabled":{"type":"boolean","description":"Email Voice Logica (alerts@) when a call has session errors — never the customer (defaults on)"},"customFocus":{"type":"string","maxLength":2000,"nullable":true,"description":"Free-text \"what matters most\" steering for the judge"},"customCriteria":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"maxItems":5,"description":"Named checks the judge evaluates"},"judgeModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Plan-gated client choice of evaluation model; falls back to the admin A/B pool"},"remediation":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow the evaluator to act post-call (alert business + VL admin for risky/unfixable misses)"},"autoSendToCustomer":{"type":"boolean","description":"Permit auto-sending the drafted follow-up to the caller for SAFE misses (hybrid auto-action)"},"mode":{"type":"string","enum":["alert","managed_agent"],"description":"\"alert\" = detect+notify (+ safe auto-message); \"managed_agent\" = a guard-railed agent re-runs the missed tools using the live toolset, then alerts for what it could not do"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Per-agent override for the remediation agent's primary model (plan-gated)"},"escalationModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Per-agent override for the smarter model the remediation agent escalates to (plan-gated)"}},"description":"Post-call remediation policy — hybrid: safe auto-actions + human alerts for risky"}},"description":"Admin-only post-call evaluation configuration"}},"description":"Configuration for post-call analysis and reporting","example":{"analysisPrompt":"Analyze this call for customer satisfaction and key points discussed.","summaryPrompt":"Provide a concise summary of this call.","emails":["analyst@company.com"],"analysisSmsConfig":{"sendSmsCondition":"always","smsPromptEvaluation":"","smsMessage":"{{phone_number}} {{viewUrl}}","minimumDuration":10,"sendSmsFromCallerId":false},"analysisEmailConfig":{"sendEmailCondition":"always","emailPromptEvaluation":"","emailSubject":"Voice Logica AI- Call analysis: {{caller}} {{date}}","includeInEmail":{"callUrl":true,"summary":true,"analysisProperties":true,"dynamicVariables":true,"recording":true,"transcription":true},"minimumDuration":10,"minimumVisitorMessages":1}}},"sendDmtf":{"type":"boolean","description":"Whether to send DTMF tones during the call (will be active for 40 seconds)"},"dtmfTimeout":{"type":"number","minimum":1,"maximum":60,"description":"Timeout for DTMF input in seconds (1-60 seconds)"},"dtmfKeyToTrigger":{"type":"string","enum":["dtmf-timeout","#","*"],"description":"Keys to trigger the workflow"},"secondsRingingUntilAnswer":{"type":"number","minimum":1,"maximum":60,"description":"Number of seconds to ring before considering the call unanswered (1-60 seconds)"},"volumeThreshold":{"type":"number","minimum":0,"maximum":1,"description":"Audio volume threshold for detecting speech (0.0 to 1.0)"},"saveRecording":{"type":"boolean","description":"Whether to save call recordings"},"saveRecordingGoogleDrive":{"type":"boolean","description":"Whether to save call recordings to Google Drive"},"topNknowledgeQuestionsInPrompt":{"type":"number","minimum":1,"maximum":20,"description":"DEPRECATED — not read by the prompt path; use nKnowledgeFilesQuery"},"nKnowledgeFilesQuery":{"type":"number","minimum":1,"maximum":10,"description":"Number of knowledge files to query for context (max 10)"},"selectiveKnowledgeLookup":{"type":"boolean","description":"When enabled, the AI uses a tool to selectively query specific knowledge files instead of searching all files on every message"},"generateKnowledgeFromTransferredCalls":{"type":"boolean","description":"When enabled, transferred calls are analysed post-transfer and any valuable Q&A insights are added to a private per-agent knowledge file, which is then loaded automatically on future calls."},"recordUnansweredQuestions":{"type":"boolean","description":"When enabled, every finished call is analysed for questions the agent could not answer. Each is stored on the agent’s private knowledge file with no answer and a count of how many calls have asked it, so the gaps can be answered in order of demand. These entries are never retrievable until someone writes the answer."},"unansweredQuestionTargets":{"type":"array","items":{"type":"string","enum":["agent","company"]},"description":"Where captured unanswered questions are stored. 'agent' keeps them on this agent's own file; 'company' puts them on a shared file every agent in the company reads. Select both to have each question routed to one or the other. Defaults to ['agent']."},"unansweredRoutingPrompt":{"type":"string","maxLength":1000,"description":"Only used when BOTH targets are selected: your own rule for which questions belong to the company file and which to this agent. Leave empty to use the default — business-wide facts go to the company, anything tied to what this agent handles stays with the agent."},"maxTimeMemory":{"type":"number","description":"Maximum time in seconds to keep conversation context in memory"},"maxInteractionsMemory":{"type":"number","minimum":0,"maximum":20,"description":"Maximum number of interactions to keep in conversation memory (max 20)"},"droppedCallResumeSeconds":{"type":"number","minimum":0,"maximum":86400,"description":"How long a returning caller or chat visitor (same number / same email) gets the LAST session's messages and AI dialogue on the new call. Memory must be on. The previous session's summary is not injected — the full last conversation is already there. Defaults to 600 (10 minutes). Max 86400 (1 day). Set 0 to always start fresh."},"droppedCallResumeMaxTurns":{"type":"number","minimum":1,"maximum":40,"description":"Optional cap on how many trailing spoken turns of the dropped call to carry over. Leave unset — the default — to carry the ENTIRE conversation, which is what keeps resolved data such as product codes and the identified customer available so the caller is never asked for them twice. Only set this if chained resumes (a caller dropping repeatedly on a bad line) grow the context too far."},"transferType":{"type":"string","enum":["warm","cold"],"description":"Type of call transfer: warm (with context) or cold (without context)"},"transferHoldSoundFileId":{"type":"string","description":"The custom sound to play when the call is transferred"},"transferHoldSound":{"type":"string","enum":["none","coffee_shop","call_center","office","soft_piano","lounge","waiting_room","custom"],"description":"The sounds to play when the call is transferred"},"transferSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Master switch for the agent's transfer capability. When false the AI is not given any transfer tool (forward_call / connect_dynamically) and the available-destinations prompt block is suppressed — but every other field on this object is preserved so the admin can re-enable it without losing config. Treated as true when undefined, for backward compatibility with agents created before this flag existed."},"transferMode":{"type":"string","enum":["blind","warm","attended"],"description":"Transfer mode: blind (immediate REFER), warm (consult + media merge), attended (SIP hold + consult + REFER/Replaces)."},"blindTransfer":{"type":"boolean","description":"Deprecated — use transferMode. Kept for legacy read compat only."},"announceTransferReason":{"type":"boolean","description":"Whether to announce the transfer reason to the person we are transferring the call to."},"transferCallBasedOnPromptInstructions":{"type":"boolean","description":"Whether to dynamically generate the transfer based on the prompt instructions."},"promptForTransferReason":{"type":"string","description":"The prompt to use when dynamically generating the transfer reason."},"analyzeTransferredCall":{"type":"boolean","description":"Whether to analyze the transferred call."},"blockTransferWhenCompanyIsClosed":{"type":"boolean","description":"Whether to block the transfer when the company is closed."},"agentIdToAnalyzeTransferredCall":{"type":"string","description":"The agent ID to analyze the transferred call."},"showCallerId":{"type":"boolean","description":"Whether to show the original caller ID to the person we are transferring the call to Or the current phone number."},"secondsToWaitForCallerToAnswer":{"type":"number","minimum":0,"maximum":60,"description":"The number of seconds to wait for the caller to answer the call."},"availableTransferDestinations":{"type":"array","items":{"type":"object","properties":{"destinationType":{"type":"string","enum":["UserEndpoint","UserGroup","External","Agent"],"description":"Kind of destination — UserEndpoint, UserGroup, External, or Agent."},"destinationId":{"type":"string","minLength":1,"maxLength":100,"description":"Target id (UserEndpoint id, UserGroup id, Agent id) or for External the phone number to dial."},"mode":{"type":"string","enum":["inherit","refer","attended"],"description":"Per-destination dispatch override: `refer` (blind, send SIP REFER), `attended` (place outbound INVITE, bridge on pickup), or `inherit` (use the agent-level blindTransfer flag). Omitted is treated as `inherit`. Internal AGENT destinations ignore this field — they always go through the agent-handoff path once it ships."},"reasonToConnect":{"type":"string","maxLength":500,"description":"When to connect the caller to this destination (e.g. \"when they ask for Dimitris\"). Injected into the live-call transfer catalog."}},"required":["destinationType","destinationId"],"description":"Whitelisted transfer destination available to this agent."},"maxItems":200,"description":"Explicit whitelist of destinations this agent may transfer to. Ignored when allowAllAvailableDestinations is true."},"allowAllAvailableDestinations":{"type":"boolean","description":"When true the agent may transfer a phone call to any enabled UserEndpoint or UserGroup (ringing that user's devices when they have SIP / app / mobile). Chat handoff uses company users. When false, only entries in availableTransferDestinations are offered."},"transferToExternalNumbers":{"type":"boolean","description":"When true the agent may transfer to external phone numbers."},"transferTimeLimitEnabled":{"type":"boolean","description":"Enable automatic transfer after the call reaches the configured time limit."},"transferTimeLimitInSeconds":{"type":"number","minimum":1,"description":"Call duration in seconds after which the agent automatically transfers the call (e.g. 120 for 2 minutes)."},"transferTimeLimitPrompt":{"type":"string","description":"Routing instructions for the automatic time-limit transfer: the destination (phone number, extension or agent ID) and what to tell the caller. Used with connect_dynamically when the time limit is reached."},"maxTransferAttemptsPerCall":{"type":"integer","minimum":1,"maximum":20,"nullable":true,"description":"Opt-in cap on transfer attempts in one call. Once reached, further transfers are refused and the agent takes a message. Unset = unlimited."}},"description":"Configuration for transfer settings","example":{"enabled":true,"announceTransferReason":false,"analyzeTransferredCall":false,"agentIdToAnalyzeTransferredCall":"","transferCallBasedOnPromptInstructions":false,"promptForTransferReason":"Forward to 100 for accounting. For sales, forward to 101. For support, forward to 102.","transferMode":"warm","showCallerId":false,"secondsToWaitForCallerToAnswer":40,"allowAllAvailableDestinations":false,"availableTransferDestinations":[],"transferToExternalNumbers":true}},"enableCallBackAtRequestedTime":{"type":"boolean","description":"Whether to enable callback functionality when users request to be called back at a later date/time"},"callBackIfCallDropsPrompt":{"type":"string","description":"Custom prompt to use when initiating a callback if the call drops"},"skroutzSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether Skroutz is enabled"},"topNSkroutzProductsInPrompt":{"type":"number","description":"Number of Skroutz products to include in the prompt"},"nSkroutzProductsQuery":{"type":"number","description":"Number of Skroutz products to query"},"minProductCodeLength":{"type":"integer","minimum":1,"maximum":20,"description":"Minimum normalized digit length for an utterance to be treated as a product code in the autonomous Skroutz lookup. Defaults to 4 when unset."},"webhookUrl":{"type":"string","format":"uri","description":"Webhook URL to send Skroutz products to"},"webhookHeaders":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The key of the webhook header"},"value":{"type":"string","description":"The value of the webhook header"}},"required":["key","value"]},"description":"Webhook headers to send with the Skroutz products data"}},"required":["enabled","topNSkroutzProductsInPrompt","nSkroutzProductsQuery"],"description":"Configuration for Skroutz settings","example":{"enabled":true,"topNSkroutzProductsInPrompt":3,"nSkroutzProductsQuery":5,"webhookUrl":"https://webhook.site/123e4567-e89b-12d3-a456-426614174000","webhookHeaders":[{"key":"Content-Type","value":"application/json"}]}},"voiceMailPhoneNumber":{"type":"string","description":"Phone numbers to attach voice mail to"},"voipConnections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for the VoIP connection"},"dial":{"type":"number","description":"Dial number or extension assigned to this connection"},"reason":{"type":"string","description":"Internal notes or purpose description for this connection"},"connectionType":{"type":"string","enum":["User","External","Agent"],"description":"Type of destination: 'Agent', 'User', or 'External'"},"agentId":{"type":"string","description":"ID of the AI agent this connection routes to (only for Agent type connections)"},"sipDomain":{"type":"string","description":"SIP domain for this connection."},"phone":{"type":"string","description":"External phone number this connection forwards to (only for External type connections)"},"userId":{"type":"string","description":"ID of the user this connection routes to (only for User type connections)"},"start":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily start time when this connection becomes available"},"end":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily end time when this connection becomes unavailable"},"canAgentTranscribe":{"type":"boolean","description":"Whether the agent can transcribe calls to this connection"},"canAgentRecord":{"type":"boolean","description":"Whether the agent can record calls to this connection"},"canAgentAnalyze":{"type":"boolean","description":"Whether the agent can analyze calls to this connection"},"canAgentSpeakWhenAsked":{"type":"boolean","description":"Whether the agent can speak when asked during calls to this connection"},"allDay":{"type":"boolean","description":"Whether this connection is available 24/7 (ignores start/end times when true)"},"syncWithGoogle":{"type":"boolean","description":"Whether availability is synchronized with Google Calendar"},"syncWithGoogleStatus":{"type":"string","enum":["open","closed"],"description":"Google Calendar sync mode: 'open' for free time availability, 'closed' for busy time unavailability"},"messageToUser":{"type":"string","description":"Custom message or announcement played before transferring calls to this connection"},"aiGeneratedMessage":{"type":"boolean","description":"Whether transfer messages are dynamically generated by AI based on call context"},"transcription_enabled":{"type":"boolean","description":"Whether real-time transcription is enabled for calls on this connection"},"agent":{"type":"object","properties":{"id":{"type":"string","description":"Agent's unique identifier"},"name":{"type":"string","description":"Agent's display name"}},"description":"Full agent details when connectionType is 'Agent' (populated from agents database)"},"user":{"type":"object","properties":{"id":{"type":"string","description":"User's unique identifier"},"name":{"type":"string","description":"User's full name"},"email":{"type":"string","description":"User's email address"},"defaultCompanyId":{"type":"string","description":"User's default company ID"},"picture":{"type":"string","description":"User's profile picture URL"},"emailVerified":{"type":"boolean","description":"Whether the user's email has been verified"},"lastConnectedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"isConnected":{"type":"boolean","description":"Whether the user is currently online/connected"}},"description":"Full user details when connectionType is 'User' (populated from users database)"},"username":{"type":"string","description":"SIP username for direct authentication (advanced configurations only)"},"password":{"type":"string","description":"SIP password for direct authentication (advanced configurations only)"},"ipAddress":{"type":"array","items":{"type":"string"},"description":"Whitelist of allowed IP addresses for security restrictions"},"extensionRegistrationIds":{"type":"array","items":{"type":"string"},"description":"IDs of the extension registrations linked with this connection"},"extensionRegistrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"voipConnectionId":{"type":"string","description":"ID of the VoIP Connection that owns this extension (legacy)"},"phoneExtensionId":{"type":"string","description":"ID of the Phone Extension that owns this extension"},"username":{"type":"string","description":"SIP username/extension that is registered"},"contactUri":{"type":"string","description":"Full SIP Contact URI for routing calls to this extension"},"remoteAddress":{"type":"string","description":"IP address of the registered SIP client"},"clientIp":{"type":"string","description":"Public client IP when known"},"remotePort":{"type":"number","description":"Port number of the registered SIP client"},"transport":{"type":"string","enum":["udp","tcp","tls","websocket"],"description":"Transport protocol: 'udp', 'tcp', 'tls' for SIP; 'websocket' for app clients"},"registeredAt":{"type":"string","format":"date-time","description":"Timestamp when this extension was registered (ISO 8601 format)"},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp when this registration will expire (ISO 8601 format)"},"expires":{"type":"number","description":"Number of seconds until expiration (decreases over time)"},"userAgent":{"type":"string","description":"SIP User-Agent identifying the client software"},"callId":{"type":"string","description":"SIP Call-ID from the REGISTER request"},"bindingSource":{"type":"string","enum":["register","invite"],"description":"'register' = the phone sent a REGISTER and can be rung; 'invite' = stand-in written from an authenticated outbound INVITE, used only for that call's in-dialog requests and never for ringing the phone"},"consecutiveInviteFailures":{"type":"integer","description":"Liveness skip-list counter. Bumped on 5xx/timeout from fork-INVITEs, reset on 200 OK. When ≥3 and `lastInviteFailureAt` is within the last 5 minutes, the registration is skipped by routing."},"lastInviteFailureAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"voipConnection":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"agentId":{"type":"string"},"userId":{"type":"string"},"connectionType":{"type":"string"}},"description":"Legacy VoIP Connection — only populated for pre-migration rows."},"userEndpoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"number":{"type":"string"},"status":{"type":"string"}},"description":"Populated UserEndpoint this registration belongs to."}},"required":["id","createdAt","active","createdBy","createdById","companyId","username","contactUri","remoteAddress","remotePort","transport","registeredAt","expiresAt","expires"],"description":"Extension registration details including contact information and expiration status","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","voipConnectionId":"507f1f77bcf86cd799439011","username":"1001","contactUri":"sip:1001@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300,"userAgent":"Zoiper 5.5.10","callId":"abc123@192.168.1.100","voipConnection":{"id":"507f1f77bcf86cd799439011","name":"Customer Support","agentId":"507f1f77bcf86cd799439012","connectionType":"Agent"}}},"description":"Active SIP device registrations for this connection (virtual populate from ExtensionRegistration collection, filtered to show only non-expired registrations). Each entry represents a physical device (phone, softphone, etc.) currently registered with this extension."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","connectionType","syncWithGoogle","syncWithGoogleStatus"],"description":"Response schema for VoIP connection including complete configuration, company metadata, and linked agent or user details","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support","dial":1,"reason":"General customer support inquiries","connectionType":"Agent","agentId":"507f1f77bcf86cd799439011","phone":"+1234567890","userId":"507f1f77bcf86cd799439012","start":{"hours":9,"minutes":0},"end":{"hours":17,"minutes":0},"canAgentTranscribe":true,"canAgentRecord":true,"canAgentAnalyze":true,"canAgentSpeakWhenAsked":false,"allDay":false,"syncWithGoogle":true,"syncWithGoogleStatus":"open","messageToUser":"Welcome to customer support!","aiGeneratedMessage":false,"agent":{"id":"507f1f77bcf86cd799439011","name":"John Doe","email":"john@example.com"},"user":{"id":"507f1f77bcf86cd799439012","name":"Jane Smith","email":"jane@example.com"},"registrations":[{"id":"507f1f77bcf86cd799439013","username":"customer_support","contactUri":"sip:customer_support@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300}]}},"description":"@deprecated Legacy populated VoIP connections. Use transferSettings.availableTransferDestinations + SipTrunk / UserEndpoint / UserGroup."},"adaptationPhraseSets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the adaptation phrase set"},"description":{"type":"string","nullable":true,"description":"The description of the phrase set"},"phraseSetId":{"type":"string","description":"The phrase set id"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Locale code"},"phrases":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Phrase value"},"boost":{"type":"number","minimum":1,"maximum":20,"description":"Boost value (1-20)"}},"required":["value","boost"]},"nullable":true,"description":"The phrases of the set"},"boost":{"type":"number","minimum":1,"maximum":20,"nullable":true,"description":"Boost value (1-20)"},"apiEnabled":{"type":"boolean","nullable":true,"description":"Whether API is enabled"},"apiUrl":{"type":"string","nullable":true,"description":"API URL"},"apiKey":{"type":"string","nullable":true,"description":"API key"},"lastPulledAt":{"type":"string","format":"date-time","description":"The last pulled at date of the phrase set","nullable":true}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","phraseSetId","language"],"description":"Response schema for adaptation phrase set including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Greetings","description":"Common customer greeting phrases","phraseSetId":"greetings_001","language":"en-US","phrases":[{"value":"Hello","boost":5},{"value":"Hi there","boost":3},{"value":"Good morning","boost":4}],"boost":5,"apiEnabled":true,"apiUrl":"https://api.example.com/phrases","apiKey":"api_key_123","lastPulledAt":"2024-01-15T10:30:00.000Z"}},"description":"List of adaptation phrase sets for improving transcription accuracy"},"afterCallFunctionCalls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"description":{"type":"string","description":"Description of the function call"},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"description":"Condition blocks for execution logic"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"],"description":"When to execute the function call"},"confirmationMethodConfig":{"type":"object","properties":{"confirmationRequired":{"type":"boolean"},"secondsToWait":{"type":"number","minimum":10},"wordMatch":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"array","items":{"type":"string"}}},"required":["required","value"]},"aiGuidance":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]},"dtmf":{"type":"object","properties":{"required":{"type":"boolean"},"value":{"type":"string"}},"required":["required","value"]}},"required":["confirmationRequired","secondsToWait"],"description":"Configuration for user confirmation"},"messageToUserBeforeAction":{"type":"string","description":"Message to show user before executing the action"},"messageToUserAfterAction":{"type":"string","description":"Message to show user after executing the action"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"functions":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"number"},"executeAt":{"type":"string","enum":["now","after_session_end","custom"]},"conditionBlocks":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"action":{"type":"string","enum":["emailConfig","apiCall","sendSms","createEvent","sendPhoneCall","forwardCall","googleSearch","sendMessage","endCallConfig","googleSheetConfig","googleDocConfig","llmCompletion","hubspotConfig","aiResponse","transferCall","afmSearch","codeExecution"]},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}},"forwardCallConfig":{"type":"object","properties":{"voipConnectionId":{"type":"string","minLength":24}},"required":["voipConnectionId"],"example":{"voipConnectionId":"507f1f77bcf86cd799439011"}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}},"sendMessageConfig":{"type":"object","properties":{"messageToUser":{"type":"string","minLength":1}},"required":["messageToUser"],"example":{"messageToUser":"Your order has been shipped!"}},"endCallConfig":{"type":"object","properties":{"reason":{"type":"string","minLength":2}},"required":["reason"],"example":{"reason":"User requested to end the call"}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["sequence","action"]},"description":"Internal actions to execute"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","parameters","functions"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Send Email Notification","description":"Sends an email notification to the user","conditionBlocks":[],"executeAt":"immediate","messageToUserBeforeAction":"I will send you an email notification.","messageToUserAfterAction":"Email notification sent successfully!","fileIds":["file_123","file_456"],"files":[{"id":"file_123","filename":"document.pdf","s3Id":"s3-file-123","displayUrl":"https://example.com/files/document.pdf"}],"parameters":[{"id":"param_1","name":"Email Address","description":"Recipient email address","type":"string","required":true}],"functions":[{"id":"func_1","name":"Send Email","type":"email","config":{"to":"{{emailAddress}}","subject":"Notification","body":"This is a notification email."}}]}},"description":"List of function calls that are executed after the call ends"},"transferHoldSoundFile":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}}},"description":"Response schema for agent phone settings including related data","example":{"model":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0.5,"maxCompletionTokens":500},"systemPrompt":"You are a helpful customer support assistant.","voiceConfig":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","speed":1,"backgroundSound":"none","stability":0.5,"similarity":0.5},"voipConnections":[{"id":"voip-123","name":"Main Office Line","provider":"Twilio","phoneNumber":"+1234567890"}],"adaptationPhraseSets":[{"id":"aps-123","name":"Customer Service Phrases","phrases":["customer service","support","help"]}],"transcriptionConfig":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"adaptationPhraseSets":[{"id":"aps-123","name":"Customer Service Phrases","phrases":["customer service","support","help"]}]},"skroutzSettings":{"enabled":true,"topNSkroutzProductsInPrompt":3,"nSkroutzProductsQuery":5,"webhookUrl":"https://webhook.site/123e4567-e89b-12d3-a456-426614174000","webhookHeaders":[{"key":"Content-Type","value":"application/json"}]},"transferSettings":{"announceTransferReason":false,"transferCallBasedOnPromptInstructions":false,"promptForTransferReason":"Forward to 100 for accounting. For sales, forward to 101. For support, forward to 102.","transferMode":"warm","showCallerId":false},"transferHoldSound":"custom","transferHoldSoundFileId":"file-123","transferHoldSoundFile":{"id":"file-123","name":"Human Laugh 1","contentType":"audio/wav","size":1024000}}},"appointmentSettings":{"type":"object","properties":{"enabled":{"type":"boolean","nullable":true,"description":"Whether the appointment settings are enabled"},"isOnline":{"type":"boolean","nullable":true,"description":"Whether the appointment settings are online"},"services":{"type":"array","items":{"type":"object","properties":{"serviceKey":{"type":"string","description":"Stable internal identity for this service; calendars reference it so renames are safe"},"name":{"type":"string","description":"The name of the service"},"description":{"type":"string","description":"The description of the service"},"duration":{"type":"number","description":"The duration of the service in minutes"},"allowedMeetingTypes":{"type":"array","items":{"type":"string","enum":["online","phone","client-location","office-location"]},"description":"How this service can be delivered. `online`: video (e.g. Google Meet). `phone`: voice call only. `client-location`: at an address the caller provides (use location lookup tool). `office-location`: at the provider’s office; set `officeAddress` on the service (or on the matching working-hours row). Omit or `[]` when not set. Used when a working-hours row is `not-set` to decide Meet / location / office."},"officeAddress":{"type":"string","description":"Provider’s office address when `office-location` is in allowedMeetingTypes. Shown to the user for office bookings; working-hours rows may override with their own officeAddress."},"colorId":{"oneOf":[{"type":"string","enum":["1","2","3","4","5","6","7","8","9","10","11"]},{"type":"string","enum":[""]}],"description":"Google Calendar event color ID as a string, \"1\"–\"11\". Omit or \"\" for the default calendar color."}},"required":["name","description","duration","allowedMeetingTypes","colorId"]},"description":"The services of the appointment settings"},"concurrentBookings":{"type":"number","description":"The number of concurrent bookings"},"useGlobalConcurrentBookings":{"type":"string","enum":["not-set","true"],"description":"Use the global concurrentBookings for all calendars (true) or per-calendar concurrentBookings (not-set)"},"allDayBookings":{"type":"boolean","description":"Whether the appointment settings are enabled for all day bookings"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"The parameters of the appointment settings"},"canSameClientBookMultipleAppointmentsInFuture":{"type":"string","enum":["not-set","true","false"],"description":"Whether the same client can book multiple appointments in the future"},"canClientCancelAppointmentWithAi":{"type":"string","enum":["not-set","true","false"],"description":"Whether the client can cancel the appointment with AI"},"futureDaysAllowToBook":{"type":"string","enum":["not-set","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","21","30","45","60","90","120","180","365"],"description":"The number of days in advance that the appointment can be booked"},"sendConfirmation":{"type":"boolean","description":"Whether the confirmation is sent"},"confirmationPrompt":{"type":"string","description":"The confirmation prompt for the appointment"},"confirmationSmsSenderId":{"type":"string","description":"Sender shown on the confirmation SMS (a verified Yuboto sender ID). Empty falls back to the send_sms tool sender, then to VoiceLogica."},"appointmentDescriptionContents":{"type":"array","items":{"type":"string","enum":["questions","services","notes","location","call_url","summary","recording_url"]},"description":"Blocks included in the calendar event description: questions, services, notes, location, call_url, summary, recording_url. Omit for the default set (questions, notes, location, summary)"},"calendars":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the calendar"},"calendarKey":{"type":"string","description":"Stable internal identity for this calendar; allows several calendars to share one Google calendarId"},"calendarId":{"type":"string","description":"The provider calendar ID this calendar reads/writes (Google or Azure/Outlook; may be shared across calendars)"},"provider":{"type":"string","enum":["google","azure"],"description":"Calendar backend for this calendar: 'google' or 'azure' (Microsoft 365). Omit to use the company default."},"description":{"type":"string","description":"The description of the calendar"},"serviceKeys":{"type":"array","items":{"type":"string"},"description":"The serviceKeys of the services of the calendar"},"serviceNames":{"type":"array","items":{"type":"string"},"description":"Legacy name-based service reference; kept for calendars saved before serviceKeys existed"},"futureDaysAllowToBook":{"type":"number","minimum":1,"maximum":365,"description":"The number of days in advance that the appointment can be booked"},"concurrentBookings":{"type":"number","description":"Per-calendar concurrent bookings; omit or 0 to inherit the agent-level default"},"countAllCalendarEventsForConcurrency":{"type":"boolean","description":"Advanced: count every Voice Logica booking on the same Google calendar toward concurrency, whichever logical calendar made it (ignore service names). Use it when several logical calendars share one Google calendar. Default is service-name concurrency."},"restrictions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["max_per_hour","max_per_day","max_per_week","min_gap_minutes","min_notice_hours","min_notice_business_days","min_notice_calendar_days"],"description":"max_per_hour | max_per_day | max_per_week | min_gap_minutes (minimum free gap between appointments) | min_notice_hours (earliest bookable slot is this many hours from now) | min_notice_business_days (this many full company operating days of notice after today; today never counts; every calendar uses that same date, falling back to the union of calendar working days when the company has no hours) | min_notice_calendar_days (same, counting every day including closed ones)"},"limit":{"type":"number","minimum":1,"description":"Cap for max_* types, gap in minutes for min_gap_minutes, lead-time hours for min_notice_hours, or number of days for the min_notice_*_days types (days of notice after today, so 2 on a Wednesday makes Friday the earliest bookable day)"},"serviceNames":{"type":"array","items":{"type":"string"},"description":"When set, restriction applies only to these service names; omit for all services on the calendar"},"enabled":{"type":"boolean","description":"When false, restriction is ignored. Default true."}},"required":["type","limit"]},"description":"Optional booking restrictions: max per hour/day/week, minimum gap between appointments, or minimum notice (hours or operating days) before the start"},"appointmentTitle":{"type":"string","description":"The title of the appointment"},"appointmentNotes":{"type":"string","description":"The notes of the appointment"},"canClientCancelAppointmentWithAi":{"type":"boolean","description":"Whether the client can cancel the appointment with AI"},"canSameClientBookMultipleAppointmentsInFuture":{"type":"boolean","description":"Whether the same client can book multiple appointments in the future"},"workingHours":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Day of the week"},"meetingType":{"type":"string","enum":["online","phone","client-location","office-location","not-set"],"default":"not-set","description":"Modality for this time window: online (Meet), phone, client-location, or office-location. `not-set` = inherit Meet / location / office behaviour from each booked service’s allowedMeetingTypes."},"officeAddress":{"type":"string","description":"Physical office for this window when it includes office-location; overrides service.officeAddress if both are set."},"startTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"Start time for bookings in this window (local calendar day)"},"endTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"End time for bookings in this window (local calendar day)"}},"required":["day","startTime","endTime"]},"description":"Per-calendar bookable windows. Same `day` may appear multiple times for split schedules (e.g. Fri morning office, Fri afternoon client site)."}},"required":["name","calendarId","description","serviceNames","futureDaysAllowToBook"]},"description":"Array of calendar IDs that the appointment settings are enabled for"},"useGlobalWorkingHours":{"type":"string","enum":["not-set","true"],"description":"Use global working hours for all calendars (true) or per-calendar working hours (not-set)"},"workingHours":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Day of the week"},"meetingType":{"type":"string","enum":["online","phone","client-location","office-location","not-set"],"default":"not-set","description":"Modality for this time window: online (Meet), phone, client-location, or office-location. `not-set` = inherit Meet / location / office behaviour from each booked service’s allowedMeetingTypes."},"officeAddress":{"type":"string","description":"Physical office for this window when it includes office-location; overrides service.officeAddress if both are set."},"startTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"Start time for bookings in this window (local calendar day)"},"endTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23,"description":"Hours (0-23)"},"minutes":{"type":"number","minimum":0,"maximum":59,"description":"Minutes (0-59)"}},"required":["hours","minutes"],"description":"End time for bookings in this window (local calendar day)"}},"required":["day","startTime","endTime"]},"description":"Global bookable windows when useGlobalWorkingHours is true. Same weekday may repeat with different times and meetingType (e.g. Fri morning office, Fri afternoon client site)."},"reminderSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the reminder is enabled"},"daysBefore":{"type":"number","description":"The number of days before the appointment to send the reminder"},"time":{"type":"string","description":"The time of the day to send the reminder"},"type":{"type":"string","enum":["email","sms","phone"],"description":"The type of reminder"},"numberOfRetries":{"type":"number","description":"The number of retries for the reminder"},"sendFallbackSms":{"type":"boolean","description":"Whether the fallback SMS is sent"},"fallbackSms":{"type":"string","description":"The fallback SMS message for the appointment"}},"required":["enabled","daysBefore","time","type","numberOfRetries","sendFallbackSms","fallbackSms"],"description":"The reminder settings for the appointment"},"waitingListEnabled":{"type":"boolean","description":"Whether the waiting list is enabled"},"waitingListSettings":{"type":"object","properties":{"candidateDays":{"type":"number","minimum":1,"maximum":365,"description":"How far ahead to look for people to call about a freed slot. Defaults to 30 days; without it the search follows futureDaysAllowToBook, which can be a full year."},"callFromHour":{"type":"string","description":"Earliest local time to place a waiting-list call, HH:MM. Default 09:00."},"callToHour":{"type":"string","description":"Latest local time to place a waiting-list call, HH:MM. Default 20:00."}},"description":"Bounds on who the waiting list calls, and when"}},"required":["sendConfirmation"]},"widgetSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the embeddable widget is enabled for this agent"},"allowedDomains":{"type":"array","items":{"type":"string"},"description":"Hostnames allowed to embed this widget. Empty = allow all."},"allowWwwVariant":{"type":"boolean","description":"Also allow www. variant of each allowed domain"},"actionsRequireVerification":{"type":"boolean","description":"Unverified visitors get a questions-only agent: tools that send messages or touch external systems load only after email/mobile/Google verification"},"collectFields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$","description":"Dynamic variable key used in prompts as {{key}}"},"label":{"type":"string","minLength":1,"maxLength":120,"description":"Label shown to the visitor"},"placeholder":{"type":"string","maxLength":200},"type":{"type":"string","enum":["text","email","tel","number","location","files"],"description":"Input type"},"required":{"type":"boolean"}},"required":["key","label"]},"maxItems":20,"description":"Dynamic fields to ask visitors before starting (name, client_id, …). Email is widgetSettings.email."},"email":{"type":"object","properties":{"required":{"type":"boolean"},"validation":{"type":"boolean"}},"description":"Require a visitor email; optional 6-digit email validation"},"phone":{"type":"object","properties":{"required":{"type":"boolean"},"validation":{"type":"boolean"}},"description":"Require a visitor mobile; optional SMS code (Greece/Cyprus only)"},"feedback":{"type":"object","properties":{"mode":{"type":"string","enum":["none","end"]},"collectComment":{"type":"boolean"}},"description":"Legacy, always 'none'. The end-of-chat rating (Good/Bad + optional comment) is set on the evaluate_conversation tool, not here: update_agent_settings with section 'tools' and changes { name: 'evaluate_conversation', enabled: true, channels: ['widget'], collectComment: true }."},"interface":{"type":"object","properties":{"startsCollapsed":{"type":"boolean"},"languageDropdown":{"type":"boolean"},"enableMuting":{"type":"boolean"},"markdownAllowedDomains":{"type":"array","items":{"type":"string"},"description":"Hostnames whose links in agent replies are clickable, e.g. [\"example.com\", \"hihello.com\"]. Exact host match (plus www. when allowWwwVariantForMarkdown). Empty = no link is clickable; other links show struck through."},"allowWwwVariantForMarkdown":{"type":"boolean","description":"Also accept the www. variant of each markdownAllowedDomains entry. Default true."},"allowHttpLinks":{"type":"boolean","description":"Also allow plain http:// (not https) links on markdownAllowedDomains. Does not make any link clickable by itself."},"acceptFiles":{"type":"boolean"},"acceptLocation":{"type":"boolean"},"pageContext":{"type":"boolean","description":"Tell the agent which page the visitor is on (address without query string, title, description, main heading), at start and whenever they move to another page. Default false."},"inactivityMinutes":{"type":"number","minimum":1,"maximum":30}}},"avatar":{"type":"object","properties":{"type":{"type":"string","enum":["orb","link","image"]},"firstColor":{"type":"string"},"secondColor":{"type":"string"},"linkUrl":{"type":"string"},"imageUrl":{"type":"string"},"imageFileId":{"type":"string"}}},"terms":{"type":"object","properties":{"required":{"type":"boolean"},"termsText":{"type":"string"}}},"styling":{"type":"object","properties":{"variant":{"type":"string","enum":["tiny","compact","full"]},"placement":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left"]},"base":{"type":"string"},"baseHover":{"type":"string"},"baseActive":{"type":"string"},"baseBorder":{"type":"string"},"baseSubtle":{"type":"string"},"basePrimary":{"type":"string"},"baseError":{"type":"string"},"accent":{"type":"string"},"accentHover":{"type":"string"},"accentActive":{"type":"string"},"accentBorder":{"type":"string"},"accentSubtle":{"type":"string"},"accentPrimary":{"type":"string"},"overlayPadding":{"type":"number"},"buttonRadius":{"type":"number"},"inputRadius":{"type":"number"},"bubbleRadius":{"type":"number"},"sheetRadius":{"type":"number"},"compactSheetRadius":{"type":"number"},"dropdownSheetRadius":{"type":"number"},"syntaxTheme":{"type":"string","enum":["auto","light","dark"]},"offsetX":{"type":"number","minimum":0,"maximum":400,"description":"Desktop gap from the left/right edge in px (default: overlayPadding)"},"offsetY":{"type":"number","minimum":0,"maximum":400,"description":"Desktop gap from the top/bottom edge in px (default: overlayPadding)"},"mobileOffsetX":{"type":"number","minimum":0,"maximum":400,"description":"Phones (≤767px): gap from the left/right edge in px (default: the desktop gap)"},"mobileOffsetY":{"type":"number","minimum":0,"maximum":400,"description":"Phones (≤767px): gap from the top/bottom edge in px, e.g. 90 to clear a fixed \"Book now\" bar (default: the desktop gap)"},"mobilePlacement":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left"],"description":"Phones (≤767px): another corner than placement (default: placement)"}}},"text":{"type":"object","properties":{"main_label":{"type":"string"},"start_call":{"type":"string"},"start_chat":{"type":"string"},"new_call":{"type":"string"},"end_call":{"type":"string"},"end_chat":{"type":"string"},"mute_microphone":{"type":"string"},"change_language":{"type":"string"},"collapse":{"type":"string"},"expand":{"type":"string"},"copied":{"type":"string"},"accept_terms":{"type":"string"},"dismiss_terms":{"type":"string"},"collect_title":{"type":"string"},"collect_continue":{"type":"string"},"listening_status":{"type":"string"},"speaking_status":{"type":"string"},"connecting_status":{"type":"string"},"chatting_status":{"type":"string"},"input_label":{"type":"string"},"input_placeholder":{"type":"string"},"input_placeholder_text_only":{"type":"string"},"input_placeholder_new_conversation":{"type":"string"},"user_ended_conversation":{"type":"string"},"agent_ended_conversation":{"type":"string"},"conversation_id":{"type":"string"},"error_occurred":{"type":"string"},"copy_id":{"type":"string"},"initiate_feedback":{"type":"string"},"request_follow_up_feedback":{"type":"string"},"thanks_for_feedback":{"type":"string"},"thanks_for_feedback_details":{"type":"string"},"follow_up_feedback_placeholder":{"type":"string"},"submit":{"type":"string"},"go_back":{"type":"string"},"send_message":{"type":"string"},"text_mode":{"type":"string"},"voice_mode":{"type":"string"},"switched_to_text_mode":{"type":"string"},"switched_to_voice_mode":{"type":"string"},"copy":{"type":"string"},"download":{"type":"string"},"wrap":{"type":"string"},"agent_working":{"type":"string"},"agent_done":{"type":"string"},"agent_error":{"type":"string"},"attach_file":{"type":"string"},"remove_file":{"type":"string"},"file_upload_error":{"type":"string"},"file_type_unsupported":{"type":"string"},"file_too_large":{"type":"string"},"file_limit_reached":{"type":"string"},"share_location":{"type":"string"},"locating":{"type":"string"},"location_ready":{"type":"string"},"location_denied":{"type":"string"},"files_hint":{"type":"string"},"uploading_files":{"type":"string"},"typing_indicator":{"type":"string"},"start_chat_hint":{"type":"string"},"start_chat_hint_files":{"type":"string"},"start_call_hint":{"type":"string"},"preview_agent":{"type":"string"},"preview_visitor":{"type":"string"},"collect_hint_chat":{"type":"string"},"collect_hint_call":{"type":"string"},"terms_title":{"type":"string"},"try_again":{"type":"string"},"show_transcript":{"type":"string"},"hide_transcript":{"type":"string"},"unmute_microphone":{"type":"string"},"microphone_muted":{"type":"string"},"conversation_ended":{"type":"string"},"call_ended":{"type":"string"},"teammate_joined":{"type":"string"},"teammate_joined_hint":{"type":"string"},"team_member":{"type":"string"},"duration":{"type":"string"},"messages":{"type":"string"},"feedback_good":{"type":"string"},"feedback_bad":{"type":"string"}}},"shareablePage":{"type":"object","properties":{"description":{"type":"string"},"requireTerms":{"type":"boolean"}}},"pageNavigation":{"type":"object","properties":{"enabled":{"type":"boolean","description":"The widget AI may open pages of this website for the visitor (text chat only). Only the page's own site and allowedDomains; the visitor sees \"Taking you to …\" and can cancel. Default false."},"listedPagesOnly":{"type":"boolean","description":"When pages are listed, the AI may open only those addresses (any query string). Default true. Ignored while the list is empty."},"instructions":{"type":"string","maxLength":1000,"description":"Extra instructions for the AI about opening pages"},"pages":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","maxLength":500,"description":"The page: a path on the site (\"/el/crete\") or an absolute https address on it"},"name":{"type":"string","maxLength":120,"description":"What the page is, e.g. \"Hotels in Crete\""},"description":{"type":"string","maxLength":150,"description":"Optional: when to open it, e.g. \"all our Cretan hotels, filter by town\""}},"required":["url","name"]},"maxItems":200,"description":"Pages the AI can open, with a name and an optional description (import them from the sitemap in the app)"}},"description":"The AI opens pages of this website for the visitor (text chat only)"}}},"tools":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"name":{"type":"string","enum":["skip_turn","send_sms","send_email","eshop_integration","hubspot","zoho","salesforce","navigate_ivr","schedule_callback","detect_live_sentiment","detect_live_frustration","schedule_appointment","handle_silence","lock_on_speaker","galaxy_drugstore","galaxy_erp","soft1_erp","entersoft_one","odoo_erp","pylon_erp","sap_erp","splynx","shopify","woocommerce","opencart","magento","megasoft","gonnaorder","prestashop","airtable","jira","guesty","clickup","trello","dropbox","googleChat","zoho_crm","helpdesk","courier","outlook","detect_voice_mail","add_participant","make_call_private","pause_recording","request_data_erasure","send_info_page","capture_data_via_sms","compare_caller_to_branches","find_location_info","evaluate_conversation","extract_document","scrape_website","fleet_management","caller_verification","custom_api","webhotelier","hosthub","exelixis_smart"]},"prompt":{"type":"string"},"type":{"type":"string","enum":["system","user"]},"playWaitMusic":{"type":"boolean","description":"Play keyboard wait music while this tool runs mid-call"},"senderId":{"type":"string"},"mailboxId":{"type":"string"},"propertyCode":{"type":"string"},"url":{"type":"string","format":"uri"},"interval":{"type":"number","minimum":10,"maximum":10080},"vectorField":{"type":"string"},"aiEnabled":{"type":"boolean"},"keyOfId":{"type":"string","enum":["mpn","ean","sku","skroutzId","groupCode","none"]},"deltaCapable":{"type":"boolean"},"lastSyncAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastFullSyncAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"feedEtag":{"type":"string"},"feedLastModified":{"type":"string"},"timesFailed":{"type":"number"},"readContactProperties":{"type":"array","items":{"type":"string"}},"updateContactProperties":{"type":"array","items":{"type":"string"}},"createCallActivity":{"type":"boolean"},"nudgeIntervalSeconds":{"type":"number","minimum":0,"maximum":60},"timesToNudge":{"type":"number","minimum":1,"maximum":3},"actions":{"type":"array","items":{"type":"string","enum":["forward","hangup"]}},"allowMultipleSpeakers":{"type":"boolean"},"leaveMessage":{"type":"boolean"},"maxDurationSeconds":{"type":"number","minimum":5,"maximum":120},"words":{"type":"array","items":{"type":"string"}},"timeoutSeconds":{"type":"number","minimum":0,"maximum":10},"maxSkips":{"type":"integer","minimum":0,"maximum":20},"enabledOperations":{"type":"array","items":{"oneOf":[{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","check_item_availability","get_item_price","calculate_order","place_order","get_order_status","get_customer_history","get_customer_balance","get_customer_aging","get_customer_kartela_link","find_items_by_active_ingredient","get_invoice_pdf_links","get_next_route","get_customer_top_items","get_top_selling_items","get_customer_fin_info_per_drug_type"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_item_by_id","create_sales_doc","get_sales_doc_by_id"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_balance","get_customer_aging","get_customer_history","get_customer_orders","get_customer_top_items","get_top_selling_items","create_order","create_invoice","create_delivery_note","create_receipt","update_order","update_invoice","update_delivery_note","update_receipt","add_order_line","remove_order_line","adjust_order_quantity","set_order_transfer","log_call","create_meeting","create_task","search_activities","list_projects","create_project","list_project_actions","create_customer","add_customer_phone","remove_customer_phone","get_order_by_key","create_sales_doc","update_sales_doc","transmit_einvoice"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_purchase_history","get_customer_branches","get_customer_balance","add_order_line","remove_order_line","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_products","get_customer_orders","get_order","get_customer_balance","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_login","lookup_customer_by_name","link_caller_to_customer","get_customer_balance","get_services","get_invoices","get_online_status","create_ticket","set_customer_status"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_tin","lookup_customer_by_code","lookup_customer_by_name","link_caller_to_customer","search_items","get_customer_balance","get_customer_aging","run_public_query","run_ebs_service","create_sales_doc"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order","create_draft_order","sync_products_to_skroutz"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","create_order"]},{"type":"string","enum":["lookup_customer","check_availability","create_order","get_order","list_customer_orders"]},{"type":"string","enum":["get_contact","list_company_contacts","list_support_members","get_order","list_customer_orders","create_ticket","search_items","create_order","send_statement","get_balance"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_shipping_options","create_order"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_name","link_caller_to_customer","lookup_customer_by_afm","verify_customer","get_customer_by_code","get_customer_balance","search_products","get_product_by_code","list_shipping_methods","list_payment_methods","get_customer_orders","get_order_status","get_customer_purchases","list_offers","get_item_price","get_product_stock","get_alt_items","cancel_order","create_order"]},{"type":"string","enum":["search_catalog","get_offer","check_delivery_address","lookup_customer_by_phone","lookup_customer_by_name","link_caller_to_customer","get_customer_orders","list_time_slots","create_order","validate_location","get_order_status","create_payment_link","check_payment_status","create_reservation"]},{"type":"string","enum":["check_availability","search_bookings","get_reservation","get_property_info","create_booking","cancel_booking","get_rooms","get_rates","get_extras","get_availability_calendar","get_best_rate","search_offers","resend_confirmation","check_multi_property_availability","search_properties"]},{"type":"string","enum":["identify_caller","search_reservations","get_reservation","list_rentals","get_rental","check_availability"]},{"type":"string","enum":["lookup_customer_by_phone","lookup_customer_by_email","lookup_customer_by_name","link_caller_to_customer","get_customer_by_id","get_orders_by_customer","get_order_by_id","search_products","get_product_by_id","list_order_states","create_order","update_order_status"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_email","get_contact_by_id","lookup_contact_by_name","link_caller_to_contact"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","create_lead","add_note"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","link_caller_to_contact","get_contact_by_id","create_lead","log_call"]},{"type":"string","enum":["lookup_record_by_phone","search_records","get_record_by_id","create_record","update_record"]},{"type":"string","enum":["lookup_issue","search_issues","create_issue","update_issue","add_comment","get_comments","transition_issue","assign_issue","list_projects","list_create_fields"]},{"type":"string","enum":["identify_caller","get_reservations","get_reservation","get_listings","get_listing_details","get_house_rules","get_conversations","check_availability","get_quote","get_owner_revenue","create_task","list_tasks","send_message"]},{"type":"string","enum":["create_task","update_task","update_task_status","move_task","assign_task","list_members","add_attachment","add_comment","search_tasks","get_task","find_list","get_contact_by_number","list_contacts"]},{"type":"string","enum":["list_boards","list_lists","list_cards","get_card","search_cards","list_members","create_card","update_card","move_card","list_comments","add_comment","assign_member","remove_member","add_attachment"]},{"type":"string","enum":["get_account","list_files","get_metadata","get_download_link","search_files","list_shared_links","upload_file","create_folder","create_shared_link","create_file_request","move_file","copy_file","delete_file"]},{"type":"string","enum":["send_message","send_to_default_space","send_via_webhook"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","lookup_contact_by_email","create_lead","add_note"]},{"type":"string","enum":["lookup_contact_by_phone","lookup_contact_by_name","link_caller_to_contact","get_recent_tickets","create_ticket","add_ticket_reply"]},{"type":"string","enum":["track_voucher","reschedule_delivery"]},{"type":"string","enum":["check_availability","list_events","create_event","update_event","lookup_contact"]}]}},"defaultWrhsCode":{"type":"string"},"defaultProjectKey":{"type":"string"},"defaultIssueTypeName":{"type":"string"},"defaultCalendarId":{"type":"string"},"timeZone":{"type":"string"},"callerKeyType":{"type":"string","enum":["phone","vat","email","custom","none"]},"callerKeyLabel":{"type":"string"},"prefetchTicketsOnCallStart":{"type":"boolean"},"callerPhoneFields":{"type":"array","items":{"type":"string"}},"guestyPrefetch":{"type":"object","properties":{"reservations":{"type":"boolean","description":"Prefetch the caller's reservations (guest: own bookings; owner: active+upcoming across their listings)."},"listings":{"type":"boolean","description":"Prefetch the owner's listings (owners only)."},"houseRules":{"type":"boolean","description":"Prefetch house rules of the guest's reserved listing (guests with a current/upcoming reservation)."},"conversations":{"type":"boolean","description":"Prefetch the caller's recent Guesty conversations."}}},"guestyLimits":{"type":"object","properties":{"maxReservationRangeDays":{"type":"integer","minimum":0,"nullable":true,"description":"Cap (days) on an owner-by-listing reservation date range — the strongest guard. Default and system maximum 7."},"maxReservations":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on reservations returned by any single call. Default 10, system maximum 20."},"maxConversations":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on conversations returned / prefetched. Default 5."},"maxListings":{"type":"integer","minimum":0,"nullable":true,"description":"Cap on listings returned. Default 20."},"prefetchReservationBackDays":{"type":"integer","minimum":0,"nullable":true,"description":"Prefetch window: days before today for a caller's reservations. Default 3."},"prefetchReservationForwardDays":{"type":"integer","minimum":0,"nullable":true,"description":"Prefetch window: days after today. Default 4."}}},"guestyQuoteSource":{"type":"string"},"autoIdentifyCaller":{"type":"boolean"},"prefetchOrdersOnCallStart":{"type":"boolean"},"prefetchOrdersDays":{"type":"integer"},"prefetchOrdersMaxOrders":{"type":"integer"},"prefetchShippingZonesOnCallStart":{"type":"boolean"},"maxOrderValue":{"type":"number","nullable":true},"maxOrderLines":{"type":"integer","nullable":true},"maxSalesDocValue":{"type":"number","nullable":true},"maxSalesDocLines":{"type":"integer","nullable":true},"salesDocShippingEnabled":{"type":"boolean"},"salesDocManageOlderThan24h":{"type":"boolean"},"allowExternalNumbers":{"type":"boolean"},"announceRecordingPause":{"type":"string","enum":["off","pause","resume","both"]},"customAttributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"The attribute key. Meaning varies per provider (see tool config description)."},"description":{"type":"string","minLength":1,"description":"What the AI should put in this field — shown to the LLM as the parameter description."},"required":{"type":"boolean","description":"When true, the AI must fill the field. The write op is rejected if missing."}},"required":["key","description"]}},"logCallNotesTemplate":{"type":"string"},"logCallOnlyWhenField":{"type":"string"},"logCallMergeDaily":{"type":"boolean"},"logCallActor":{"type":"string"},"logCallActorRules":{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","minLength":1,"description":"Post-call analysis property to test, e.g. \"requested_person\"."},"values":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"description":"Values that select this rule — the canonical name plus spoken variants. Case/accent-insensitive; a value also matches when it appears as whole words inside the analysis text."},"actor":{"type":"string","minLength":1,"description":"Soft1 ACTOR (user) the call is assigned to when this rule matches. Supports {{variables}}."},"label":{"type":"string","description":"Operator note, e.g. the person's name. Shown in logs only."}},"required":["property","values","actor"]}},"logCallHeaderFields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"SOACTION column name, e.g. \"UDSTRING01\" or \"CCCSOACTION.UDFTYPE\"."},"value":{"type":"string","description":"Template for the value, e.g. \"{{request_type}}\". Supports {{phone_number}}, {{caller_name}}, {{agent_name}}, {{call_date}} and any post-call analysis property."},"valueMap":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional map from the rendered text to the stored value (case/accent-insensitive key match), e.g. {\"Πωλήσεις\":\"1\",\"Υποστήριξη\":\"2\"}. Unmapped text is stored as is."}},"required":["key","value"]}},"allowedSpaces":{"type":"array","items":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque space resource name (spaces/AAQA...)"},"displayName":{"type":"string","minLength":1,"description":"Friendly label shown to the LLM and rendered in the UI"}},"required":["spaceName","displayName"]}},"allowedBoards":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Trello board id"},"name":{"type":"string","minLength":1,"description":"Board display name shown in the UI and to the AI"}},"required":["id","name"]}},"allowedWebhookLabels":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Field key, e.g. \"full_name\" or \"accident_location\""},"description":{"type":"string","description":"What to ask for — shown as the field label/help text on the web form"},"type":{"type":"string","enum":["text","number","location","files"],"description":"Input type; \"location\" asks for GPS + map pin; \"files\" lets the caller upload photos/PDFs (S3 + OCR/AI analysis)"},"required":{"type":"boolean","default":true}},"required":["name","description","type"]}},"ttlMinutes":{"type":"integer"},"notifyEmails":{"type":"array","items":{"type":"string"}},"smsMessage":{"type":"string"},"maxCallbacks":{"type":"integer"},"dynamicWelcomeMessage":{"type":"boolean"},"branches":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Optional stable id for this branch"},"name":{"type":"string","minLength":1,"description":"Spoken branch name, e.g. \"Syntagma store\""},"address":{"type":"string","description":"Full address text used for geocoding when lat/lng are missing"},"latitude":{"type":"number","description":"Latitude in decimal degrees"},"longitude":{"type":"number","description":"Longitude in decimal degrees"},"googlePlaceId":{"type":"string","description":"Optional Google Place ID; used to resolve coordinates when lat/lng are missing"}},"required":["name"]}},"includeCompanyLocation":{"type":"boolean"},"regionBias":{"type":"string"},"locationDetails":{"type":"array","items":{"type":"string","enum":["phone","website","openingHours","rating","priceLevel","category","summary","mapsLink"]}},"maxResults":{"type":"integer"},"channels":{"type":"array","items":{"type":"string","enum":["calls","widget"]}},"collectComment":{"type":"boolean"},"allowResubmit":{"type":"boolean"},"sendMode":{"type":"string","enum":["always","evaluate"]},"evaluationPrompt":{"type":"string"},"channel":{"type":"string","enum":["email","sms","both"]},"maxAttempts":{"type":"integer"},"codeTtlSeconds":{"type":"integer"},"method":{"type":"string","enum":["otp","known_field"]},"matchField":{"type":"string","enum":["vatNumber"]},"matchLastDigits":{"type":"integer"},"saveCallerNumber":{"type":"boolean"},"recentlyCalledDays":{"type":"integer"},"stopsAtStart":{"type":"boolean"}},"required":["enabled","name","type"],"example":{"enabled":true,"name":"send_sms","prompt":"Send an SMS to the user","type":"system","senderId":"1234567890","url":"https://eshopkatoikidio.gr/skroutz-feed.xml","interval":60,"vectorField":"sku","aiEnabled":false,"keyOfId":"mpn","lastSyncAt":"2024-01-15T10:30:00.000Z","timesFailed":0,"readContactProperties":["firstname","lastname","phone"],"updateContactProperties":["phone"],"createCallActivity":false,"nudgeIntervalSeconds":10,"timesToNudge":3,"actions":["forward"]}}},"mcpServers":{"type":"array","items":{"type":"object","properties":{"connectionId":{"type":"string","minLength":1,"description":"Company MCP connection this agent uses"},"name":{"type":"string","minLength":1,"description":"Display name"},"slug":{"type":"string","minLength":1,"description":"Prefix for LLM tool names (mcp_{slug}__{tool})"},"enabled":{"type":"boolean","default":false},"enabledTools":{"type":"array","items":{"type":"string"},"default":[],"description":"Remote tool names the agent may call"},"selectedToolDefs":{"type":"array","items":{"type":"object","properties":{"remoteName":{"type":"string","minLength":1,"description":"Tool name as published by the MCP server"},"description":{"type":"string","default":""},"inputSchema":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"default":{}}},"required":["remoteName"]},"default":[],"description":"Schemas for enabled tools so live calls stay sync"}},"required":["connectionId","name","slug"]}},"playWaitMusicOnDuringCallTools":{"type":"boolean"},"password":{"type":"string"},"passwordTries":{"type":"number"},"externalDial":{"type":"number"},"internalDial":{"type":"string"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Unique identifier for the node"},"name":{"type":"string","description":"Display name of the node"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"description":"X,Y coordinates for node positioning"},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}},"description":"Input connections to this node"},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}},"description":"Output connections from this node"},"className":{"type":"string","description":"CSS class for styling the node"},"data":{"oneOf":[{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["conversation"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"},"systemPrompt":{"type":"string"},"enableModel":{"type":"boolean"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"enableTranscription":{"type":"boolean"},"transcriptionConfig":{"type":"object","properties":{"transcriptionProvider":{"type":"string","enum":["microsoft","google","fireworks","speechmatics","openai","assemblyai","deepgram","google_v1","google_v2","elevenlabs","voicelogica","soniox"],"description":"The transcription service provider to use for speech-to-text"},"silenceDurationMs":{"type":"number","minimum":500,"description":"Duration of silence in milliseconds before considering the user finished speaking"},"adaptationPhraseSetIds":{"type":"array","items":{"type":"string"},"description":"IDs of adaptation phrase sets to improve transcription accuracy"},"transcriptionVoiceMailPhrases":{"type":"array","items":{"type":"string"},"description":"Phrases that indicate the call has reached a voicemail system"},"waitForFullTranscription":{"type":"boolean","description":"Whether to wait for complete transcription before processing"},"enhanced":{"type":"boolean","description":"Whether to use enhanced transcription models for better accuracy"},"audioEnhancement":{"type":"boolean","description":"Whether to run ai-coustics speech enhancement (noise/background-speech suppression) on caller audio before transcription"},"audioEnhancementLevel":{"type":"number","minimum":0,"maximum":1,"description":"How aggressively the ai-coustics model suppresses noise (0.0-1.0). Uses the model default when omitted"},"endpointSensitivity":{"type":"number","minimum":-1,"maximum":1,"nullable":true,"description":"Soniox only: how aggressively endpoints are detected (-1.0 to 1.0). Higher = faster end-of-turn but more risk of cutting the caller off mid-sentence. Platform default 0.3"},"maxEndpointDelayMs":{"type":"number","minimum":500,"maximum":3000,"nullable":true,"description":"Soniox only: hard cap on how long Soniox may wait for an endpoint after speech ends (500-3000ms). Platform default 1500"},"endpointLatencyAdjustmentLevel":{"type":"integer","minimum":0,"maximum":3,"nullable":true,"description":"Soniox only: endpoint latency reduction level 0-3 (3 = most aggressive). Platform default 3"},"speculativeFinalize":{"type":"boolean","nullable":true,"description":"Soniox only: at the speculative quiet moment, request finalize() to flush pending tokens into the candidate before the endpoint. Platform default from admin settings"},"singleUtterance":{"type":"boolean","description":"Whether to process speech as single utterances"},"openAiModel":{"type":"string","enum":["whisper-1","gpt-transcribe","gpt-4o-transcribe","gpt-4o-mini-transcribe","gpt-4o-transcribe-diarize"],"description":"OpenAI model to use for transcription"},"prompt":{"type":"string","description":"Custom prompt used for transcription processing"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to focus on during transcription"},"initializationMethod":{"type":"string","enum":["on_call_start","on_human_join"],"description":"Method to initialize the transcription service"}},"required":["transcriptionProvider"],"description":"Configuration for speech-to-text transcription settings","example":{"transcriptionProvider":"google","silenceDurationMs":1000,"enhanced":false,"waitForFullTranscription":false,"openAiModel":"whisper-1"}},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}},"skipTurnEnabled":{"type":"boolean"},"skipTurnPrompt":{"type":"string"},"workflowsIds":{"type":"array","items":{"type":"string"}},"knowledgeFileIds":{"type":"array","items":{"type":"string"}},"enableVoice":{"type":"boolean"},"voiceConfig":{"type":"object","properties":{"voiceProvider":{"type":"string","enum":["microsoft","openai","google","elevenlabs","deepgram","minimax","murf","voicelogica","soniox","grok","gemini"],"description":"The voice provider service to use for text-to-speech"},"voiceId":{"type":"string","minLength":1,"description":"The specific voice ID to use for speech synthesis"},"speed":{"type":"number","minimum":0.25,"maximum":2,"description":"Speech rate multiplier. Effective range depends on provider: ElevenLabs 0.7-1.2, Google 0.25-2.0, Microsoft 0.25-2.0, Minimax 0.5-2.0"},"stability":{"type":"number","minimum":0,"maximum":1,"description":"Stability of the voice (0.0 = low, 1.0 = high)"},"similarity_boost":{"type":"number","minimum":0,"maximum":1,"description":"Similarity of the voice (0.0 = low, 1.0 = high)"},"style":{"type":"number","minimum":0,"maximum":1,"description":"ElevenLabs style exaggeration (0.0 = none, 1.0 = max). Anything above 0 adds a little latency"},"use_speaker_boost":{"type":"boolean","description":"ElevenLabs speaker boost: closer to the original speaker at a small latency cost"},"backgroundSound":{"type":"string","enum":["none","coffee_shop","call_center","office"],"description":"The background sound to play during the call"},"backgroundVolume":{"type":"number","minimum":0,"maximum":1,"description":"The volume of the background sound (0.0 = low, 1.0 = high)"},"allowCallerToRequestSpeedChange":{"type":"boolean","description":"When enabled, the caller can ask the AI to speak faster or slower during the call"},"adjustBasedOnHumanSpeed":{"type":"boolean","description":"When enabled, the AI automatically adjusts its speaking speed to match how fast or slow the human caller speaks"},"modelId":{"type":"string","enum":["eleven_flash_v2_5","eleven_turbo_v2_5","eleven_multilingual_v2","eleven_v3","eleven_v4","eleven_v4_turbo"],"nullable":true,"description":"ElevenLabs TTS model for this agent (admin only). Omit or null to use the platform default"}},"required":["voiceProvider","voiceId"],"description":"Configuration for voice synthesis settings","example":{"voiceProvider":"google","voiceId":"en-US-Wavenet-1","backgroundSound":"none","speed":1,"stability":0.5,"similarity_boost":0.5,"backgroundVolume":0.2,"allowCallerToRequestSpeedChange":false,"adjustBasedOnHumanSpeed":false}},"canJumpToPreviousNode":{"type":"boolean"},"workflows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"triggers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCallStart","onCallConnect","onCallEnd","onCallTransfer","onMissedCall","onDTMFInput","onKeywordDetected","duringCall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"functionName":{"type":"string","pattern":"^[a-z0-9_]+$"},"keywords":{"type":"array","items":{"type":"string"}},"condition":{"type":"string"},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"generateMessageBeforeRunningWorkflow":{"type":"boolean"},"messageAiGenerated":{"type":"boolean"},"messagePrompt":{"type":"string"},"playWaitMusic":{"type":"boolean","description":"When true (default), play keyboard wait music while this duringCall workflow tool runs"},"useProtectedValues":{"type":"boolean","description":"onCallEnd only. When true, the non-AI steps of this workflow (API call, integrations, booking, email, SMS, sheets, conditions) get the REAL values the caller said ({{protected.afm}}, {{afm_1}}, …) when the agent protects sensitive data; AI steps (llmCompletion, aiResponse, managedAgent, googleSearch) always get placeholders. Every use is audited. Only members who may reveal sensitive data can turn it on."}},"example":{"keywords":["hello","world"],"condition":"call_started","parameters":[{"name":"call_id","value":"123"}],"playWaitMusic":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onEmailReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"emailFilters":{"type":"object","properties":{"from":{"type":"array","items":{"type":"string"}},"subject":{"type":"array","items":{"type":"string"}},"labels":{"type":"array","items":{"type":"string"}}}}},"example":{"emailFilters":{"from":["test@test.com"],"subject":["test"],"labels":["test"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onAPICall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"payloadSchema":{"type":"object","properties":{"type":{"type":"string","enum":["object"]},"properties":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","enum":["object","array","string","number","boolean","date","enum"]},"required":{"type":"boolean","default":false},"properties":{"type":"object","additionalProperties":{"type":"object","description":"Circular reference detected"}},"items":{"type":"object","description":"Circular reference detected"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"},"minimum":{"type":"number"},"maximum":{"type":"number"},"enum":{"type":"array","items":{"type":"string"}}},"required":["type"]}},"required":{"type":"array","items":{"type":"string"}}},"required":["type","properties"],"description":"Expected payload structure"}},"example":{"payloadSchema":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^TX-[0-9]{8}$"},"amount":{"type":"number","minimum":0},"currency":{"type":"string","enum":["USD","EUR","GBP"]}},"required":["transactionId","amount","currency"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onContactCreated","onCompanyCreated","onDealCreated","onTicketCreated","onPropertyChange"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","property"]},"property":{"type":"string","enum":["hs_lead_status","lifecyclestage","hubspot_owner_id","companyname","domain","dealstage","amount","closedate","closed_won_reason","closed_lost_reason","pipeline","hs_pipeline_stage","hs_due_date"]}},"example":{"resource":"contact","property":"hs_lead_status"}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onWooCommerce"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"getCustomerOrders":{"type":"boolean"},"getProductByName":{"type":"boolean"},"getProductByCode":{"type":"boolean"},"productCodeType":{"type":"string","enum":["id","sku","global_unique_id"]},"createOrder":{"type":"boolean"},"getOrderById":{"type":"boolean"},"notifyEmailsOnOrderCreation":{"type":"array","items":{"type":"string"}}},"example":{"getCustomerOrders":true,"getProductByName":true,"getProductByCode":true,"productCodeType":"id","createOrder":true,"getOrderById":true,"notifyEmailsOnOrderCreation":["test@test.com"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onYubotoPbxChannelHangup","onYubotoPbxChannelAnswer","onYubotoPbxChannelCreate"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"agentId":{"type":"string"},"allowedExtensions":{"type":"array","items":{"type":"string"}}},"example":{"username":"test","password":"test","agentId":"test","allowedExtensions":["123","456"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCampaignLeadStatusChanged"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign to watch. Omit to fire for every campaign of the company."},"statuses":{"type":"array","items":{"type":"string","enum":["successful","failed","reachedMaxRetries","askedToCallBackLater","askedToNeverCallAgain","cancelled"]},"description":"Lead statuses that fire the workflow. Omit or empty = every outcome status."},"stages":{"type":"array","items":{"type":"string"},"description":"Only fire when the lead is in one of these campaign stage names. Omit or empty = any stage."}},"example":{"campaignId":"66f1c0ffee0000000000abcd","statuses":["failed","reachedMaxRetries"],"stages":[]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onShopifyEvent"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["orders/create","orders/paid","orders/fulfilled","orders/partially_fulfilled","orders/cancelled","refunds/create","fulfillments/create","fulfillments/update"]},"minItems":1,"description":"Shopify events that start the workflow."},"financialStatuses":{"type":"array","items":{"type":"string","enum":["pending","authorized","partially_paid","paid","partially_refunded","refunded","voided"]},"description":"Only when the order payment status is one of these. Empty = any."},"fulfillmentStatuses":{"type":"array","items":{"type":"string","enum":["unfulfilled","partial","fulfilled","restocked"]},"description":"Only when the order fulfillment status is one of these. Empty = any."},"shipmentStatuses":{"type":"array","items":{"type":"string","enum":["label_printed","label_purchased","confirmed","in_transit","out_for_delivery","attempted_delivery","ready_for_pickup","delivered","failure"]},"description":"Shipment topics only: only when the carrier status is one of these. Empty = any."},"paymentGateways":{"type":"array","items":{"type":"string"},"description":"Only when a payment gateway name contains one of these (case-insensitive), e.g. \"Cash on Delivery\". Empty = any."},"tags":{"type":"array","items":{"type":"string"},"description":"Only when the order has at least one of these tags (case-insensitive). Empty = any."},"minTotal":{"type":"number","minimum":0,"description":"Only when the order total is at least this amount."},"maxTotal":{"type":"number","minimum":0,"description":"Only when the order total is at most this amount."}},"required":["topics"],"example":{"topics":["orders/create"],"financialStatuses":["pending"],"paymentGateways":["Cash on Delivery"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onLeadReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"string","enum":["tiktok","meta","google_ads","linkedin","webhook","form"]},"description":"Only leads from these sources start the workflow. Empty = any source, including ones added later."},"formIds":{"type":"array","items":{"type":"string","minLength":1},"description":"Only these forms: our lead form ids (from lead_forms_list_forms). A platform form id or a form name also matches, for older triggers. Empty = any."},"requirePhone":{"type":"boolean","description":"Skip a lead with no phone number."},"includeTestSubmissions":{"type":"boolean","description":"Also fire for test submissions. Off by default."}},"example":{"sources":["google_ads","form"],"requirePhone":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"triggerType"}}},"required":["id","name","position","outputs"],"example":{"id":1,"name":"Call Start Trigger","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"},{"node":"3","output":"default"}]},"className":"trigger-node","data":{"triggerType":"onCallStart","triggerConfig":{"enabled":true,"triggerType":"onCallEnd","description":"Trigger when a new call starts"},"transitions":[2,3]}}},"description":"Trigger node that starts the flow"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"nodeType":{"type":"string","enum":["emailConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["nodeType","nodeTitle","transitions","emailConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendSms"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["nodeType","nodeTitle","transitions","smsConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["apiCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["nodeType","nodeTitle","transitions","apiConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["codeExecution"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"codeConfig":{"type":"object","properties":{"code":{"type":"string"},"language":{"type":"string","enum":["javascript","python","java","cpp","php","ruby"]},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties for the code"}},"required":["code","language"],"example":{"code":"console.log(\"Hello, world!\");","language":"javascript","properties":[{"name":"name","type":"string"}]}}},"required":["nodeType","nodeTitle","transitions","codeConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleDocConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}}},"required":["nodeType","nodeTitle","transitions","googleDocConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createEvent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"eventConfig":{"type":"object","properties":{"calendarId":{"type":"string","description":"Google calendar id. Empty = the company's primary calendar."},"summary":{"type":"string","description":"Event title."},"startDateTime":{"type":"string","description":"Start, ISO 8601 (\"2026-08-12T15:00:00\") or \"YYYY-MM-DD HH:mm\"."},"endDateTime":{"type":"string","description":"End. Empty = start + durationMinutes."},"durationMinutes":{"type":"number","minimum":1,"maximum":1440,"description":"Used only when endDateTime is empty. Defaults to 30."},"description":{"type":"string"},"location":{"type":"string"},"attendees":{"type":"string","description":"Comma-separated emails."},"timeZone":{"type":"string","description":"IANA zone. Empty = the company timezone."},"isOnline":{"type":"boolean","description":"When true, Google adds a Meet link to the event."}},"required":["durationMinutes"],"example":{"summary":"Callback for {{contact_name}}","startDateTime":"{{callback_datetime}}","durationMinutes":30,"description":"Requested during call {{call_id}}","attendees":"sales@example.com","isOnline":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendPhoneCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}}},"required":["nodeType","nodeTitle","transitions","phoneCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["llmCompletion"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}}},"required":["nodeType","nodeTitle","transitions","llmCompletionConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheet"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]}},"required":["nodeType","nodeTitle","transitions","googleSheetConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}}},"required":["nodeType","nodeTitle","transitions","googleSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendViber"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}}},"required":["nodeType","nodeTitle","transitions","viberConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["switch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"switchConfig":{"type":"object","properties":{"cases":{"type":"array","items":{"type":"object","properties":{"block":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"transition":{"type":"string"},"transitionIndex":{"type":"number"}},"required":["block"]}}},"required":["cases"],"example":{"cases":[{"transition":"Schedule Appointment","transitionIndex":1,"block":{"operator":"and","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"schedule_appointment","fieldType":"string"}]}},{"transition":"Cancel Appointment","transitionIndex":0,"block":{"operator":"or","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"cancel_appointment","fieldType":"string"}]}}]}}},"required":["nodeType","nodeTitle","transitions","switchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["if"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"ifConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","ifConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["filter"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"filterConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","filterConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["loop"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"loopConfig":{"type":"object","properties":{"array":{"type":"string"}},"required":["array"],"example":{"array":"user_response"}}},"required":["nodeType","nodeTitle","transitions","loopConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["tableNode"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"tableConfig":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","maxLength":128},"type":{"type":"string","enum":["string","number","boolean"]}},"required":["key","label"]},"maxItems":50},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"maxItems":500},"filters":{"type":"array","items":{"type":"object","properties":{"column":{"type":"string","minLength":1},"op":{"type":"string","enum":["equals","notEquals","contains","gt","lt","gte","lte"]},"value":{"type":"string"}},"required":["column","op","value"]}},"mode":{"type":"string","enum":["producer","lookup"]},"keyColumn":{"type":"string"},"keyValue":{"type":"string"}},"required":["columns","rows"],"example":{"columns":[{"key":"name","label":"Name","type":"string"},{"key":"phone","label":"Phone","type":"string"}],"rows":[{"name":"Alice","phone":"+30 210 1234567"},{"name":"Bob","phone":"+30 210 7654321"}],"mode":"producer"}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hubspotContact","hubspotCompany","hubspotDeal","hubspotTicket","hubspotTask","hubspotNote","hubspotMeeting","hubspotEmail","hubspotCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hubspotConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"operation":{"type":"string","enum":["get","create","createOrUpdate","getOrCreate","delete","update","search","list","exists"]},"value":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"associations":{"type":"array","items":{"type":"object","properties":{"associationType":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["associationType","valueType","value"],"example":{"associationType":"contact","valueType":"id","value":"123"}}},"owner":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"contactData":{"type":"object","properties":{"properties":{"type":"object","properties":{"email":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"}},"required":[]}},"example":{"email":"test@test.com","firstname":"John","lastname":"Doe","phone":"+1234567890","company":"Test Corp","website":"https://test.com","lifecyclestage":"marketingqualifiedlead","jobtitle":"Manager","hs_additional_emails":["test2@test.com"]}},"companyData":{"type":"object","properties":{"properties":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"industry":{"type":"string"},"description":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"}},"required":[]}},"example":{"name":"Test Corp","domain":"test.com","industry":"Technology","description":"Test Description","city":"Test City","country":"Test Country","phone":"1234567890","address":"Test Address","owner":{"valueType":"email","value":"test@test.com"}}},"dealData":{"type":"object","properties":{"properties":{"type":"object","properties":{"dealname":{"type":"string"},"pipeline":{"type":"string"},"stage":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string"},"closeDate":{"type":"string"},"dealType":{"type":"string","enum":["new","existing"]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["pipeline","stage"]}},"example":{"name":"Test Deal","description":"Test Description","amount":"1000","stage":"Test Stage"}},"ticketData":{"type":"object","properties":{"properties":{"type":"object","properties":{"pipeline":{"type":"string"},"stage":{"type":"string"},"priority":{"type":"string","enum":["HIGH","MEDIUM","LOW"]},"subject":{"type":"string"},"content":{"type":"string"}},"required":["pipeline","stage","subject"]}},"example":{"pipeline":"Test Pipeline","stage":"Test Stage","priority":"HIGH","subject":"Test Subject","content":"Test Content"}},"taskData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string"},"taskType":{"type":"string"},"priority":{"type":"string"},"dueDate":{"type":"string"},"repeatType":{"type":"object","properties":{"enabled":{"type":"boolean"},"type":{"type":"string","enum":["hour","day","week","month","year"]},"value":{"type":"string"}},"example":{"enabled":true,"type":"day","value":"1"}},"reminderTime":{"oneOf":[{"type":"number"},{"type":"string"}]},"notes":{"type":"string"}},"required":["title","dueDate"]}},"example":{"associations":[{"associationType":"contact","valueType":"email","value":"contact@example.com"}],"properties":{"title":"Task Title","taskType":"TODO","priority":"MEDIUM","associations":[],"timestamp":"2021-01-01","dueDate":"2021-01-01","notes":"Task Notes","ownerEmail":"owner@example.com","status":"NOT_STARTED","reminderTime":1000}}},"noteData":{"type":"object","properties":{"properties":{"type":"object","properties":{"body":{"type":"string"}},"required":[]}}},"meetingData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title of the meeting"},"body":{"type":"string","description":"Meeting description"}}}},"required":["properties"],"example":{"properties":{"title":"Initial Project Discussion","body":"Meeting to discuss project requirements and timeline"}}},"emailData":{"type":"object","properties":{"properties":{"type":"object","properties":{"subject":{"type":"string","description":"Subject of the email"},"body":{"type":"string","description":"Email body content"}},"required":[]}},"example":{"properties":{"subject":"Project Update","body":"Here are the latest updates on the project progress."}}},"callData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title/subject of the call"},"body":{"type":"string","description":"Call description and notes"},"direction":{"type":"string","enum":["INBOUND","OUTBOUND"],"description":"Call direction"},"caller":{"type":"string","description":"Caller phone number"},"callee":{"type":"string","description":"Callee phone number"},"duration":{"type":"string","description":"Call duration in milliseconds"},"disposition":{"type":"string","enum":["9d9162e7-6cf3-4944-bf63-4dff82258764","f240bbac-87c9-4f6e-bf70-924b57d47db7","a4c4c377-d246-4b32-a13b-75a56a4cd0ff","b2cf5968-551e-4856-9783-52b3da59a7d0","73a0d17f-1163-4015-bdd5-ec830791da20","17b47fee-58de-441e-a44c-c6300d46f273"],"description":"Call disposition"},"recordingUrl":{"type":"string","description":"Call recording URL"}},"required":[]}},"example":{"properties":{"title":"Test Call","body":"Test Body"}}}},"required":["resource","operation"],"example":{"resource":"call","operation":"create","owner":{"valueType":"email","value":"test@test.com"},"properties":{"callData":{"properties":{"callTitle":"Test Call","callBody":"Test Body"}}}}}},"required":["nodeType","nodeTitle","transitions","hubspotConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheetSettings"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetSettingsConfig":{"type":"object","properties":{"googleSheetId":{"type":"string","minLength":1,"description":"The unique identifier of the Google Sheet"},"sheetName":{"type":"string","minLength":1,"description":"The name of the specific sheet within the Google Sheet"},"operation":{"type":"string","enum":["getRow","getRows","updateRow","appendRow","deleteRow","getData"],"description":"The operation to perform on the Google Sheet (getRow, getRows, updateRow, appendRow, deleteRow)"},"filter":{"type":"object","properties":{"filterType":{"type":"string","enum":["index","columnName"]},"column":{"type":"string"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"fieldType":{"type":"string","enum":["string","phone","email","number","boolean","date","time","enum"]},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["filterType","column","operator","fieldType"],"example":{"filterType":"index","column":"1","operator":"eq","fieldType":"string","fieldValue":"Chris"},"description":"Filter to apply for selecting rows, such as by index or column name"},"values":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"object","description":"Any valid JSON value"}},"required":["key","value"]},"description":"Key-value pairs for the row data"}},"required":["googleSheetId","sheetName","operation"],"example":{"googleSheetId":"123","sheetName":"Sheet1","operation":"getRow","filter":{"filterType":"index","column":"1","operator":"eq","fieldType":"number","fieldValue":"152"},"values":[{"key":"Email","value":"john.doe@example.com"},{"key":"Name","value":"John Doe"}]}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["aiResponse"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}}},"required":["nodeType","nodeTitle","transitions","aiResponseConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["transferCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["nodeType","nodeTitle","transitions","transferCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["afmSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"afmSearchConfig":{"type":"object","properties":{"afm":{"type":"string","description":"AFM of company"}},"required":["afm"],"example":{"afm":"8022188180"}}},"required":["nodeType","nodeTitle","transitions","afmSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["galaxyGetCustomer","galaxySearchItems","galaxyCheckStock","galaxyGetPrice","galaxyCalculateOrder","galaxyPlaceOrder","galaxyUpdateOrder","galaxyGetOrderStatus","galaxyGetTransactionHistory","galaxyGetCustomerBalance","galaxyGetCustomerAging","galaxyGetFinInfoPerDrugType","galaxyGetItemPurchases","galaxyGetCustomerKartelaLink","galaxyFindItemsByActiveIngredient","galaxyGetInvoicePdfLinks","galaxyGetNextRoute","galaxyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"galaxyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","checkStock","getPrice","calcLines","calculateOrder","placeOrder","updateOrder","getOrderStatus","getTransactionHistory","getCustomerBalance","getCustomerAging","getFinInfoPerDrugType","getItemPurchases","getCustomerKartelaLink","findItemsByActiveIngredient","getInvoicePdfLinks","getNextRoute","customRequest"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","custCode"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query (supports {{variables.x}})"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"checkStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"wrhsCode":{"type":"string","description":"Overrides the company default warehouse"}},"required":["itemCode"]},"getPrice":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"}},"required":["EntryType","Date","Quantity"]},"calcLines":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"},"WrhsCode":{"type":"string"},"AlterCode":{"type":"string"},"Barcode":{"type":"string"}},"required":["EntryType","Date","Quantity","WrhsCode"]},"placeOrder":{"type":"object","properties":{"entry":{"type":"object","properties":{"CompID":{"type":"string"},"CompCode":{"type":"string"},"CmpsID":{"type":"string"},"CmpsCode":{"type":"string"},"WrhsID":{"type":"string"},"WrhsCode":{"type":"string"},"CoetID":{"type":"string"},"CoetCode":{"type":"string"},"DnumID":{"type":"string"},"TransDate":{"type":"string"},"TradeDate":{"type":"string"},"CustID":{"type":"string"},"CustCode":{"type":"string"},"CussID":{"type":"string"},"CussCode":{"type":"string"},"PytmID":{"type":"string"},"PytmCode":{"type":"string"},"MeroID":{"type":"string"},"CollMeroID":{"type":"string"},"RuteID":{"type":"string"},"UserID":{"type":"string"},"SourceType":{"type":"integer"},"RefTradeCode":{"type":"string"},"VoucherCode":{"type":"string"},"Comments":{"type":"string"},"ExecutionDate":{"type":"string"},"Street":{"type":"string"},"StreetNumber":{"type":"string"},"PostalCode":{"type":"string"},"Phone":{"type":"string"},"RegnDescription":{"type":"string"},"PrefDescription":{"type":"string"},"CntrDescription":{"type":"string"},"AddressDescr":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"EntryStatus":{"type":"integer"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1},"ID":{"type":"string"},"FastNumber":{"type":"string"},"TotalValue":{"type":"number"},"NetValue":{"type":"number"},"VatValue":{"type":"number"},"Lines":{"type":"array","items":{"type":"object","properties":{"ItcpID":{"type":"string"},"ItemCode":{"type":"string"},"RequestAQty":{"oneOf":[{"type":"number"},{"type":"string"}]},"WrhsID":{"type":"string"},"Price":{"type":"number"},"Disc1Pcnt":{"type":"number"},"Disc1Val":{"type":"number"},"Disc2Pcnt":{"type":"number"},"Disc2Val":{"type":"number"},"Disc3Pcnt":{"type":"number"},"Disc3Val":{"type":"number"},"Comments":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"DiscountBehaviour":{"type":"integer","minimum":0,"maximum":2},"ZeroingDiscounts":{"type":"integer","minimum":0,"maximum":3,"description":"v103: suppress discounts"},"ApplyDscnID":{"type":"string"},"ApplyDrulID":{"type":"string"},"CicoID":{"type":"string","description":"v103: item-collection (bundle) ID"},"AQty":{"type":"number"},"DisposalAQty":{"type":"number"},"PickingQty":{"type":"number"},"NetValue":{"type":"number"},"GrossValue":{"type":"number"}},"required":["ItcpID","ItemCode","RequestAQty","WrhsID","Price","Disc1Pcnt","Disc1Val","Disc2Pcnt","Disc2Val","Disc3Pcnt","Disc3Val","Comments","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","DiscountBehaviour","ZeroingDiscounts","ApplyDscnID","ApplyDrulID","CicoID","AQty","DisposalAQty","PickingQty","NetValue","GrossValue"]},"nullable":true},"Taxes":{"type":"array","items":{"type":"object","properties":{"FiacID":{"type":"string"},"FiacCode":{"type":"string"},"TrnValue":{"oneOf":[{"type":"number"},{"type":"string"}]},"ExchVatValue":{"type":"number"}},"required":["FiacID","FiacCode","ExchVatValue"]},"nullable":true}},"required":["CompID","CompCode","CmpsID","CmpsCode","WrhsID","WrhsCode","CoetID","CoetCode","DnumID","TransDate","TradeDate","CustID","CustCode","CussID","CussCode","PytmID","PytmCode","MeroID","CollMeroID","RuteID","UserID","SourceType","RefTradeCode","VoucherCode","Comments","ExecutionDate","Street","StreetNumber","PostalCode","Phone","RegnDescription","PrefDescription","CntrDescription","AddressDescr","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","EntryStatus","LockTransaction","ID","FastNumber","TotalValue","NetValue","VatValue","Lines","Taxes"]},"previewFirst":{"type":"boolean","default":false}},"required":["entry"]},"updateOrder":{"type":"object","properties":{"ID":{"type":"string"},"EntryStatus":{"type":"integer"},"Comments":{"type":"string"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1}},"required":["ID"]},"getOrderStatus":{"type":"object","properties":{"id":{"type":"string","description":"Optional specific transaction ID — omit to list all"},"revNum":{"type":"integer","minimum":0,"default":0},"custCode":{"type":"string","description":"List the orders of this customer instead (GetTransactions by CustCode, per branch). Template strings supported."},"dateFrom":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."}}},"getTransactionHistory":{"type":"object","properties":{"CustCode":{"type":"string"},"DateFrom":{"type":"string"},"DateTo":{"type":"string"}},"required":["CustCode","DateFrom","DateTo"]},"getCustomerBalance":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."}},"required":["custCode"]},"getCustomerAging":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"getFinInfoPerDrugType":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"fromDate":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."}},"required":["custCode"]},"getItemPurchases":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"itemCode":{"type":"string","minLength":1,"description":"Galaxy item code (from item search). Template strings supported."},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"compCode":{"type":"string","description":"Branch/company code. Defaults to the customer's branch."}},"required":["custCode","itemCode"]},"getCustomerKartelaLink":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"findItemsByActiveIngredient":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Active ingredient name or AtloID. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["query"]},"getInvoicePdfLinks":{"type":"object","properties":{"custCode":{"type":"string"},"custTin":{"type":"string"},"cussCode":{"type":"string"},"id":{"type":"string"},"dateFrom":{"type":"string"},"dateTo":{"type":"string"}}},"getNextRoute":{"type":"object","properties":{"custCode":{"type":"string","minLength":1}},"required":["custCode"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"POST"},"path":{"type":"string","minLength":1,"description":"Path added after the Galaxy ERP base URL, e.g. /api/crossdomain/advancedcustomviews/<guid>. Supports {{variables}}."},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Key/value properties sent as the query string. Values support {{variables}}."},"body":{"type":"string","description":"Optional raw JSON request body (supports {{variables}}). Example for an advanced custom view: {\"filters\":[{\"CompCode\":\"01\",\"CustCode\":\"{{node_1.custCode}}\"}],\"MasterDetailTree\":false}"},"apiResponse":{"type":"string","description":"Editor-only: JSON schema of the expected response (same as the apiCall node's \"API Response\"). Powers the variable picker so downstream nodes can reference individual response fields; at runtime the real response is flattened into node_N.* regardless."}},"required":["path"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["salesforceGetContact","salesforceCreateLead","salesforceLogCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"salesforceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","createLead","logCall"]},"getContact":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{variables.x}} / {{call.phoneNumber}}"},"objectType":{"type":"string","enum":["Contact","Lead"],"description":"For by=id: which SObject the Id belongs to (default Contact)."}},"required":["by","value"]},"createLead":{"type":"object","properties":{"lastName":{"type":"string","minLength":1,"description":"Lead last name — required by Salesforce. Supports templates."},"company":{"type":"string","minLength":1,"description":"Lead company — required by Salesforce. Supports templates."},"firstName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"description":{"type":"string","description":"Short summary of the request / call reason."}},"required":["lastName","company"]},"logCall":{"type":"object","properties":{"whoId":{"type":"string","minLength":1,"description":"Contact or Lead Id the call is logged against. Supports templates."},"subject":{"type":"string","minLength":1,"description":"Task subject, e.g. \"Inbound call — order status\"."},"description":{"type":"string","description":"Call notes."}},"required":["whoId","subject"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"by":"phone","value":"{{call.phoneNumber}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["guestyFindOwner","guestyFindGuest","guestyIdentifyCaller","guestyGetListings","guestyGetListing","guestyGetReservations","guestyGetReservation","guestyGetHouseRules","guestyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"guestyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["findOwner","findGuest","identifyCaller","getListings","getListing","getReservations","getReservation","getHouseRules","customRequest"]},"findOwner":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email"],"default":"phone","description":"Which field to search the owner by"},"value":{"type":"string","minLength":1,"description":"Search term (template, e.g. {{call.phone_number}})"}},"required":["value"]},"findGuest":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Guest phone to look up via their reservations (template)"}},"required":["value"]},"identifyCaller":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Caller phone (template) — matched against owners AND guests"}},"required":["value"]},"getListings":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated listing ids (template) — e.g. {{node_X.owner.listings}}"},"ownerId":{"type":"string","description":"Resolve the owner's listing ids first, then fetch them (template)"},"q":{"type":"string","description":"Free-text search across title/nickname/address (template)"}}},"getListing":{"type":"object","properties":{"id":{"type":"string","description":"Listing _id (template) — returns the full property"},"nickname":{"type":"string","description":"Listing nickname (template) — used when no id is known"},"fields":{"type":"string","description":"Space-separated field selection; omit for the full listing"}}},"getReservations":{"type":"object","properties":{"listingIds":{"type":"string","description":"Comma-separated listing ids to scope to (template)"},"listingNickname":{"type":"string","description":"Scope to a single listing by its nickname (template)"},"ownerId":{"type":"string","description":"Scope to all of an owner's listings (resolved to ids) (template)"},"guestPhone":{"type":"string","description":"Scope to a guest's reservations by their phone (template)"},"dateFrom":{"type":"string","description":"Window start: ISO date, `today`, or relative like `-7d` (template)"},"dateTo":{"type":"string","description":"Window end: ISO date, `today`, or relative like `+7d` (template)"},"windowDays":{"type":"integer","minimum":0,"description":"When dateFrom/dateTo are omitted, use today∓windowDays as the overlap window"},"status":{"type":"string","description":"Filter by reservation status (template)"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Reservation _id / confirmation id (template)"}},"required":["id"]},"getHouseRules":{"type":"object","properties":{"listingIds":{"type":"string","minLength":1,"description":"Comma-separated listing ids (template) — house rules are keyed by listing/unit-type"}},"required":["listingIds"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"GET"},"path":{"type":"string","minLength":1,"description":"Path after the base URL, e.g. /v1/reservations (template)"},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Query params (templates)"},"body":{"type":"string","description":"Raw JSON body (template) — ignored for GET"}},"required":["path"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"value":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["helpdeskCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"helpdeskConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createTicket"]},"createTicket":{"type":"object","properties":{"subject":{"type":"string","description":"Ticket subject (template, e.g. \"Call from {{call.phone_number}}\")"},"description":{"type":"string","description":"Ticket body (template, e.g. {{call.summary}})"},"requesterPhone":{"type":"string","description":"Requester phone (template, defaults to {{call.phone_number}})"},"requesterEmail":{"type":"string","description":"Requester email (template)"},"requesterName":{"type":"string","description":"Requester display name (template)"},"priority":{"type":"string","enum":["low","medium","high","urgent"],"description":"Ticket priority"}}}},"required":["operation"],"example":{"operation":"createTicket","createTicket":{"subject":"Call from {{call.phone_number}}","description":"{{call.summary}}","requesterPhone":"{{call.phone_number}}","priority":"medium"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["courierTrackVoucher"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"courierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["trackVoucher"]},"trackVoucher":{"type":"object","properties":{"courier":{"type":"string","description":"Courier to query (acs_courier, speedex, geniki_taxydromiki, elta_courier, boxnow, skroutz_lastmile, taxydema). Omit to try every connected courier."},"voucher":{"type":"string","description":"Voucher/tracking number (template, e.g. {{node_5.order.meta.voucher}})"}}}},"required":["operation"],"example":{"operation":"trackVoucher","trackVoucher":{"voucher":"{{node_5.order.meta.voucher}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["vivaCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"vivaConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createPaymentLink"]},"createPaymentLink":{"type":"object","properties":{"amount":{"type":"string","description":"Amount in EUR as a decimal (template, e.g. \"25.50\" or {{node_3.order.total}})"},"description":{"type":"string","description":"Shown to the customer on the checkout page (template)"},"customerName":{"type":"string","description":"Customer full name (template)"},"customerPhone":{"type":"string","description":"Customer phone (template, e.g. {{call.phone_number}})"},"language":{"type":"string","enum":["el","en"],"description":"Checkout page language"}}}},"required":["operation"],"example":{"operation":"createPaymentLink","createPaymentLink":{"amount":"25.50","description":"Πληρωμή παραγγελίας","customerPhone":"{{call.phone_number}}","language":"el"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createTrackedPage"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"trackedPageConfig":{"type":"object","properties":{"html":{"type":"string","description":"Page HTML (template, e.g. {{node_2.html}} from an llmCompletion node). Scripts and forms are stripped; styles are kept."},"title":{"type":"string","description":"Browser tab title (template)"},"expiresInDays":{"type":"integer","minimum":1,"maximum":365,"description":"How long the link stays open (default 30 days)"}},"required":["html"],"example":{"html":"{{node_2.html}}","title":"Η σύνοψη της κλήσης σας","expiresInDays":30}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["shopifyGetCustomer","shopifyGetOrdersByCustomer","shopifyGetOrderById","shopifySearchProducts","shopifyGetProductById","shopifySyncProductsToSkroutz"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"shopifyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","syncProductsToSkroutz"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search — mapped to vendor / product_type / handle."},"vendor":{"type":"string"},"productType":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify product id."}},"required":["productId"]},"syncProductsToSkroutz":{"type":"object","properties":{"maxRecords":{"type":"integer","minimum":0}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["soft1GetCustomer","soft1SearchItems","soft1GetCustomerBalance","soft1GetCustomerAging","soft1GetCustomerHistory","soft1CreateSalesDoc","soft1TransmitEInvoice"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"soft1Config":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","getCustomerHistory","createSalesDoc","transmitEInvoice"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerAging":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerHistory":{"type":"object","properties":{"trdr":{"type":"string"},"tin":{"type":"string"},"code":{"type":"string"},"from":{"type":"string","description":"ISO date YYYY-MM-DD"},"to":{"type":"string","description":"ISO date YYYY-MM-DD"},"limit":{"type":"integer","minimum":1,"maximum":500,"default":50}}},"createSalesDoc":{"type":"object","properties":{"trdr":{"oneOf":[{"type":"string"},{"type":"number"}]},"custCode":{"type":"string"},"series":{"oneOf":[{"type":"string"},{"type":"number"}]},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"mtrl":{"oneOf":[{"type":"string"},{"type":"number"}]},"code":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"transmit":{"type":"boolean"}},"required":["lines"]},"transmitEInvoice":{"type":"object","properties":{"key":{"type":"string","minLength":1},"template":{"type":"string","minLength":1}},"required":["key"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["exelixisSmartGetContact","exelixisSmartListCompanyContacts","exelixisSmartListSupportMembers","exelixisSmartCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"exelixisSmartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","listCompanyContacts","listSupportMembers","createTicket"]},"getContact":{"type":"object","properties":{"phone":{"type":"string","description":"Template — e.g. {{call.phone_number}}"},"afm":{"type":"string","description":"Template — e.g. {{dynamicVariables.afm}}"}}},"listCompanyContacts":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) to list contacts for"}},"required":["companyId"]},"listSupportMembers":{"type":"object","properties":{}},"createTicket":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) — required by the ERP"},"contactId":{"type":"string"},"supportMemberId":{"type":"string"},"title":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"callUrl":{"type":"string","description":"Template — defaults to {{call.call_url}}"}},"required":["companyId","title","summary"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["pylonGetCustomer","pylonSearchItems","pylonGetCustomerBalance","pylonCreateSalesOrder","pylonGetData","pylonPostData"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"pylonConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","createSalesOrder","getData","postData"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"createSalesOrder":{"type":"object","properties":{"customerTin":{"type":"string","description":"Customer TIN — supports {{dynamicVariables.x}}. Optional when rawData supplies the customer."},"seriesCode":{"type":"string"},"customerBranch":{"type":"string"},"paymentMethod":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0}},"required":["itemCode","quantity"]}},"rawData":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Advanced: a JSON object merged verbatim into the Pylon order payload, overriding the structured fields above. Use native Pylon column names, e.g. {\"Lines\":[{\"CenlItemCode\":\"GG11\",\"CenlAMeasurementQty\":2}],\"CsdcRemarks\":\"…\"}. String values support {{dynamicVariables.x}} templates. Bypasses the structured-field validation, so it must match the target Script exactly."}}},"getData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined getjsondata Script code, e.g. itemsVoiceAgent or custInfoVoice"},"extras":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Param name, e.g. @ItemCode or @phone"},"value":{"type":"string","description":"Param value — supports {{dynamicVariables.x}}"}},"required":["name","value"]},"description":"Script parameters; omit or [] for none"},"packageSize":{"type":"integer","minimum":1,"maximum":5000,"description":"Page size (default 200)"},"allPages":{"type":"boolean","description":"Walk every page until exhausted; otherwise just page 1"}},"required":["entitycode"]},"postData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined postdata Script code, e.g. orderVoice or SalesOrders"},"data":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"JSON object serialized into the postdata `data` field. Use the shape the target Script expects. String values support {{dynamicVariables.x}} templates."}},"required":["entitycode","data"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["entersoftGetCustomer","entersoftSearchItems","entersoftGetCustomerBalance","entersoftGetCustomerAging","entersoftRunPublicQuery","entersoftRunEbsService","entersoftCreateSalesDoc"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"entersoftOneConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","runPublicQuery","runEbsService","createSalesDoc"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"code":{"type":"string","minLength":1,"description":"Customer code — supports templates"}},"required":["code"]},"getCustomerAging":{"type":"object","properties":{"code":{"type":"string","minLength":1}},"required":["code"]},"runPublicQuery":{"type":"object","properties":{"publicQueryGid":{"type":"string"},"groupId":{"type":"string"},"filterId":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Param object — values may be templates"}}},"runEbsService":{"type":"object","properties":{"serviceName":{"type":"string","minLength":1},"parameters":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}}},"required":["serviceName"]},"createSalesDoc":{"type":"object","properties":{"customerGid":{"type":"string"},"customerCode":{"type":"string"},"series":{"type":"string"},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemGid":{"type":"string"},"itemCode":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"ebsServiceName":{"type":"string"}},"required":["lines"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["wooGetCustomer","wooGetOrdersByCustomer","wooGetOrderById","wooSearchProducts","wooGetProductById","wooCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"wooCommerceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric WooCommerce customer id"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string"},"sku":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric customer id (0 for guest)"},"lineItems":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"integer","minimum":0},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","lineItems"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["opencartGetCustomer","opencartGetOrdersByCustomer","opencartGetOrderById","opencartSearchProducts","opencartGetProductById","opencartCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"opencartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"manufacturer":{"type":"string","description":"Exact manufacturer filter. Optional."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Existing OpenCart customer id (for logged-in orders)."},"firstname":{"type":"string"},"lastname":{"type":"string"},"email":{"type":"string"},"telephone":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1},"comment":{"type":"string"}},"required":["products"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["magentoGetCustomer","magentoGetOrdersByCustomer","magentoGetOrderById","magentoSearchProducts","magentoGetProductById","magentoListShippingOptions"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"magentoConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","listShippingOptions"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento order increment id (receipt number) or numeric entity id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento product id."}},"required":["productId"]},"listShippingOptions":{"type":"object","properties":{"countryId":{"type":"string","description":"Destination country as ISO-2 code, e.g. \"GR\". Defaults to \"GR\"."},"postcode":{"type":"string","description":"Destination postcode. Supports templates."},"region":{"type":"string","description":"Optional region/state name."},"sku":{"type":"string","description":"Optional product SKU to price against."}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["megasoftGetCustomer","megasoftSearchProducts","megasoftGetProductByCode","megasoftListShippingMethods","megasoftListPaymentMethods","megasoftGetCustomerBalance","megasoftGetCustomerOrders","megasoftGetOrderStatus","megasoftGetCustomerPurchases","megasoftListOffers","megasoftGetItemPrice","megasoftGetProductStock","megasoftCreateOrder","megasoftCancelOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"megasoftConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchProducts","getProductByCode","listShippingMethods","listPaymentMethods","getCustomerBalance","getCustomerOrders","getOrderStatus","getCustomerPurchases","listOffers","getItemPrice","getProductStock","createOrder","cancelOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getProductByCode":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"getCustomerBalance":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."}},"required":["customerCode"]},"getCustomerOrders":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"orderNo":{"type":"string","description":"Optional order number filter. Supports templates."}},"required":["customerCode"]},"getOrderStatus":{"type":"object","properties":{"orderNo":{"type":"string","description":"Optional order number. Supports templates."},"date":{"type":"string","description":"Optional modified-since date (yyyy-MM-dd)."}}},"getCustomerPurchases":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"itemCode":{"type":"string"}},"required":["customerCode"]},"listOffers":{"type":"object","properties":{"offerId":{"type":"string"},"activeOnly":{"type":"boolean","default":true},"dateFrom":{"type":"string"}}},"getItemPrice":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["customerCode","itemCode"]},"getProductStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"createOrder":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."},"qty":{"oneOf":[{"type":"number","minimum":0},{"type":"string","minLength":1}],"description":"Quantity. Number or template string."},"comments":{"type":"string"}},"required":["customerCode","itemCode","qty"]},"cancelOrder":{"type":"object","properties":{"orderNo":{"type":"string","minLength":1,"description":"Megasoft order number. Supports templates."},"seiraPar":{"type":"string","minLength":1,"description":"Order series / parastatiko code. Supports templates."}},"required":["orderNo","seiraPar"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["gonnaOrderSearchCatalog","gonnaOrderCheckDeliveryAddress","gonnaOrderGetCustomer","gonnaOrderGetCustomerOrders","gonnaOrderGetOrderStatus","gonnaOrderCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"gonnaOrderConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["searchCatalog","checkDeliveryAddress","getCustomer","getCustomerOrders","getOrderStatus","createPaymentLink"]},"searchCatalog":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text menu search. Supports {{dynamicVariables.x}}."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"checkDeliveryAddress":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Delivery address. Supports templates."}},"required":["address"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","name"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getCustomerOrders":{"type":"object","properties":{"customerId":{"type":"string","minLength":1,"description":"Customer id. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":10,"default":5}},"required":["customerId"]},"getOrderStatus":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid. Supports templates."}},"required":["orderUuid"]},"createPaymentLink":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid to charge for. Supports templates."},"amount":{"type":"string","description":"Amount override. Leave blank to use the order total."}},"required":["orderUuid"]}},"required":["operation"],"example":{"operation":"checkDeliveryAddress","checkDeliveryAddress":{"address":"{{dynamicVariables.callerAddress}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["webhotelierCheckAvailability","webhotelierSearchBookings","webhotelierGetReservation","webhotelierGetAvailabilityCalendar","webhotelierGetRooms","webhotelierGetRates"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"webhotelierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["checkAvailability","searchBookings","getReservation","getAvailabilityCalendar","getRooms","getRates"]},"checkAvailability":{"type":"object","properties":{"checkin":{"type":"string","minLength":1,"description":"Check-in date YYYY-MM-DD. Supports templates."},"checkout":{"type":"string","minLength":1,"description":"Check-out date YYYY-MM-DD. Supports templates."},"adults":{"type":"string","minLength":1,"description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"rooms":{"type":"string","description":"Number of rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["checkin","checkout","adults"]},"searchBookings":{"type":"object","properties":{"lastName":{"type":"string","description":"Guest last name. Supports templates. Provide this or email."},"email":{"type":"string","description":"Guest email. Supports templates. Provide this or lastName."},"checkinFrom":{"type":"string","description":"Earliest check-in YYYY-MM-DD. Supports templates."},"checkinTo":{"type":"string","description":"Latest check-in YYYY-MM-DD. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getReservation":{"type":"object","properties":{"resId":{"type":"string","minLength":1,"description":"Reservation id. Supports templates."}},"required":["resId"]},"getAvailabilityCalendar":{"type":"object","properties":{"fromd":{"type":"string","minLength":1,"description":"Calendar start / check-in date YYYY-MM-DD. Supports templates."},"tod":{"type":"string","description":"Calendar end / check-out date YYYY-MM-DD (max 3 months from fromd). Supports templates."},"adults":{"type":"string","description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"room":{"type":"string","description":"Room-type code filter. Supports templates."},"rate":{"type":"string","description":"Rate id filter. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["fromd"]},"getRooms":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code for a single room. Empty = list all rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getRates":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code to scope rates. Supports templates."},"rateId":{"type":"string","description":"Rate id for a single rate (requires roomCode). Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}}},"required":["operation"],"example":{"operation":"getReservation","getReservation":{"resId":"{{dynamicVariables.resId}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hosthubIdentifyCaller","hosthubSearchReservations","hosthubGetReservation","hosthubListRentals","hosthubCheckAvailability"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hosthubConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["identifyCaller","searchReservations","getReservation","listRentals","checkAvailability"]},"identifyCaller":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"description":"Caller phone number. Supports templates (e.g. {{call.phone_number}})."}},"required":["phone"]},"searchReservations":{"type":"object","properties":{"name":{"type":"string","description":"Guest name. Supports templates. Provide one of name / phone / confirmationCode."},"phone":{"type":"string","description":"Guest phone. Supports templates."},"confirmationCode":{"type":"string","description":"Channel confirmation code. Supports templates."}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Hosthub reservation (calendar-event) id. Supports templates."}},"required":["id"]},"getRental":{"type":"object","properties":{"rentalId":{"type":"string","description":"Rental id for a single rental. Empty = list all rentals. Supports templates."}}},"checkAvailability":{"type":"object","properties":{"rentalId":{"type":"string","minLength":1,"description":"Rental id to check. Supports templates."},"from":{"type":"string","minLength":1,"description":"Start date YYYY-MM-DD. Supports templates."},"to":{"type":"string","minLength":1,"description":"End date YYYY-MM-DD. Supports templates."}},"required":["rentalId","from","to"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["prestashopGetCustomer","prestashopGetOrdersByCustomer","prestashopGetOrderById","prestashopSearchProducts","prestashopGetProductById","prestashopCreateOrder","prestashopUpdateOrderStatus"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"prestashopConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder","updateOrderStatus"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"reference":{"type":"string","description":"Exact reference (SKU) filter."},"ean13":{"type":"string","description":"Exact EAN-13 barcode filter."},"mpn":{"type":"string","description":"Exact MPN filter."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id."},"addressDeliveryId":{"oneOf":[{"type":"number"},{"type":"string"}]},"addressInvoiceId":{"oneOf":[{"type":"number"},{"type":"string"}]},"cartId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Pre-existing cart id (PrestaShop requires it)."},"currencyId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"langId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"carrierId":{"oneOf":[{"type":"number"},{"type":"string"}]},"payment":{"type":"string","minLength":1,"description":"Human-readable payment label."},"module":{"type":"string","description":"Payment module code, e.g. \"ps_checkpayment\"."},"totalPaid":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProducts":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProductsWithTax":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalShipping":{"oneOf":[{"type":"number"},{"type":"string"}]},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"product_attribute_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0},"product_name":{"type":"string"},"unit_price":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","addressDeliveryId","addressInvoiceId","cartId","carrierId","payment","totalPaid","totalProducts","totalProductsWithTax","products"]},"updateOrderStatus":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id to update."},"orderStateId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Target order_state id (numeric, store-specific)."}},"required":["orderId","orderStateId"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["airtableGetRecord","airtableSearchRecords","airtableCreateRecord","airtableUpdateRecord"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"airtableConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getRecord","searchRecords","createRecord","updateRecord"]},"getRecord":{"type":"object","properties":{"by":{"type":"string","enum":["phone","id"],"description":"Look up by mapped phone field, or by Airtable record id"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchRecords":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"createRecord":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["fields"]},"updateRecord":{"type":"object","properties":{"recordId":{"type":"string","minLength":1,"description":"Airtable record id (rec...) — supports templates"},"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["recordId","fields"]}},"required":["operation"],"example":{"operation":"getRecord","getRecord":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["jiraGetIssue","jiraSearchIssues","jiraCreateIssue","jiraUpdateIssue","jiraAddComment","jiraTransitionIssue"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"jiraConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getIssue","searchIssues","createIssue","updateIssue","addComment","transitionIssue"]},"getIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key, e.g. SUP-1234 — supports {{dynamicVariables.x}}"}},"required":["issueKey"]},"searchIssues":{"type":"object","properties":{"text":{"type":"string","description":"Free-text query — supports templates"},"jql":{"type":"string","description":"Raw JQL — overrides text when present"},"projectKey":{"type":"string","description":"Scope the search to a project key"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"createIssue":{"type":"object","properties":{"summary":{"type":"string","minLength":1,"description":"Issue summary — supports templates"},"description":{"type":"string","description":"Issue description — supports templates"},"projectKey":{"type":"string","description":"Project key — falls back to the connection default"},"issueType":{"type":"string","description":"Issue type name — falls back to the connection default"},"priority":{"type":"string","description":"Priority name (e.g. High)"},"assignee":{"type":"string","description":"Assign to a person by email or name — supports templates"}},"required":["summary"]},"updateIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key to update — supports templates"},"summary":{"type":"string","description":"New summary — supports templates"},"description":{"type":"string","description":"New description — supports templates"},"priority":{"type":"string","description":"New priority name"}},"required":["issueKey"]},"addComment":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"body":{"type":"string","minLength":1,"description":"Comment body — supports templates"}},"required":["issueKey","body"]},"transitionIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"status":{"type":"string","minLength":1,"description":"Target status name, e.g. \"In Progress\" — supports templates"}},"required":["issueKey","status"]}},"required":["operation"],"example":{"operation":"createIssue","createIssue":{"summary":"Callback requested by {{callerPhone}}","description":"{{transcript}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleChatSendMessage","googleChatSendToDefaultSpace","googleChatSendViaWebhook"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleChatConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["sendMessage","sendToDefaultSpace","sendViaWebhook"]},"sendMessage":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque Google Chat space resource (spaces/AAQA...) — set via UI picker"},"spaceDisplayName":{"type":"string","description":"Cached display name for the node summary"},"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string","description":"Optional thread key for in-thread replies"}},"required":["spaceName","body"]},"sendToDefaultSpace":{"type":"object","properties":{"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string"}},"required":["body"]},"sendViaWebhook":{"type":"object","properties":{"webhookId":{"type":"string","minLength":1,"description":"GoogleChatWebhook document id — set via UI picker"},"webhookLabel":{"type":"string","description":"Cached webhook label for the node summary"},"body":{"type":"string","minLength":1},"threadKey":{"type":"string"}},"required":["webhookId","body"]}},"required":["operation"],"example":{"operation":"sendToDefaultSpace","sendToDefaultSpace":{"body":"New lead from {{caller_name}} ({{caller_phone}})"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["searchContact"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"searchContactConfig":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Phone number to look up (template). Most reliable identifier: matched on the stored phone index, so +30/30/national forms all hit the same contact."},"email":{"type":"string","description":"Email address to look up (template). Matched case-insensitively on the main email and every listed email."},"name":{"type":"string","description":"Name to look up (template). Fuzzy: case- and accent-insensitive, Greek/Latin spellings and common inflections. May match several contacts."}},"example":{"phoneNumber":"{{call.phone_number}}","email":"","name":""}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["managedAgent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"managedAgentConfig":{"type":"object","properties":{"prompt":{"type":"string","maxLength":10000,"default":"","description":"System prompt rendered with {{transcript}}, {{call_summary}}, {{contact}}, {{extracted_entities}}"},"builtInTools":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}},"default":[],"description":"Full AgentTool configurations the LLM may call."},"apiTools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_]{1,40}$","description":"Tool name shown to the LLM; must be unique within the node"},"description":{"type":"string","minLength":10,"maxLength":500,"description":"How the LLM decides when to call this tool"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"default":[],"description":"Input schema for the LLM"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"description":"HTTP request configuration (URL, headers, method, body) — reused from function-call api runner","example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["name","description","apiConfig"]},"default":[],"description":"Inline API tools with name + description + HTTP config"},"mcpServers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the MCP server"},"description":{"type":"string","description":"Optional description"},"serverUrl":{"type":"string","format":"uri","description":"MCP server endpoint"},"transport":{"type":"string","enum":["http","sse"],"description":"Transport: http or sse"},"authType":{"type":"string","enum":["none","bearer","oauth"],"description":"Authentication mode"},"authValue":{"type":"string","description":"Token / credential value — encrypted at rest"},"enabledTools":{"type":"array","items":{"type":"string"},"description":"Whitelist of tools exposed to the LLM. Omit to expose every tool the server publishes."}},"required":["name","serverUrl","transport","authType"]},"default":[],"description":"MCP servers whose tools the LLM may call"},"models":{"type":"object","properties":{"primary":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"description":"Model used by the loop by default","example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"escalation":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Optional fallback model rerun on the whole session if primary failed/stuck. Must use the same provider as primary."}},"required":["primary"]},"limits":{"type":"object","properties":{"maxIterations":{"type":"integer","minimum":0,"maximum":50,"default":15,"description":"Hard cap on LLM turns per run. Set to 0 for no limit (cost cap still enforced)."},"maxCostUsd":{"type":"number","minimum":0,"maximum":0.5,"default":0.5,"description":"Hard cap on total cost (USD) per run. Range: 0 to 0.5."},"stuckDetection":{"type":"boolean","default":true,"description":"Bail if the model calls the same tool with the same args twice in a row"}},"default":{}},"routing":{"type":"object","properties":{"onSuccess":{"type":"string","description":"Next workflow node ID when the run completes successfully"},"onPartial":{"type":"string","description":"Next workflow node ID when the run completed but with partial results"},"onFailure":{"type":"string","description":"Next workflow node ID when the run failed"}},"default":{}},"dryRun":{"type":"boolean","default":false},"enableSubagents":{"type":"boolean","default":false},"maxConcurrentSubagents":{"type":"integer","minimum":1,"maximum":10,"default":5},"maxSubagentIterations":{"type":"integer","minimum":1,"maximum":20,"default":8},"knowledgeFileIds":{"type":"array","items":{"type":"string"},"default":[],"description":"Knowledge files the agent can search via search_knowledge. Empty list = no knowledge tool offered."},"knowledgeRerank":{"type":"object","properties":{"enabled":{"type":"boolean","default":true,"description":"Run the rerank pass. When off, top-K is taken directly from the raw retrieval score (faster but noisier context for the main agent)."},"model":{"type":"string","default":"gpt-5.6-luna","description":"Model used for the rerank pass. Should be small/cheap — its job is ranking, not reasoning. Same provider as the node's primary model."},"candidatesK":{"type":"integer","minimum":5,"maximum":200,"default":50,"description":"How many candidates to retrieve from Pinecone before reranking. Higher = better recall, more rerank tokens. 50 is the sweet spot."},"returnK":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"How many chunks to return after reranking. The main agent sees only these."}},"default":{}},"enableScraping":{"type":"boolean","default":false,"description":"When true, agent gets scrape_website(url) tool that fetches+summarises a page via ScraperService."},"workflowToolIds":{"type":"array","items":{"type":"string"},"default":[],"description":"IDs of during-call workflows the agent may call as tools. Only their duringCall triggers run; onCallEnd-triggered or managed-agent-containing workflows are rejected to prevent recursion."}},"example":{"prompt":"You are an order assistant. From the call transcript, identify the requested products, look them up, and create an order. Use the provided tools.","builtInTools":[],"apiTools":[],"mcpServers":[],"models":{"primary":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0}},"limits":{"maxIterations":15,"maxCostUsd":0.5,"stuckDetection":true},"routing":{"onSuccess":"node-success","onFailure":"node-create-ticket"},"dryRun":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"nodeType"}},"html":{"type":"string"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}]}},"required":["id","name","position","inputs","outputs"],"example":{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}},"description":"Action nodes in the flow"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"visibility":{"type":"string","enum":["private","resellerRead","resellerWrite","globalRead"],"description":"Workflow visibility and access control"},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"WorkFlowVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer; absent for workflows that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","visibility"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Handle Incoming Call","description":"Automated call handling flow","type":"flow","executeAt":"immediate","visibility":"private","trigger":{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}},"nodes":[{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"llmCompletionConfig","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"connections":[{"node":"2","input":"default","output":"default","label":"Continue"}],"files":[{"id":"file_123","filename":"welcome.wav","s3Id":"s3-file-123","displayUrl":"https://example.com/files/welcome.wav"}]}}},"knowledgeFiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"The name of the knowledge file"},"description":{"type":"string","description":"Optional description of the knowledge file"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Language of the knowledge file"},"texts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"The subject/title of the text (shown as the knowledge entry)"},"text":{"type":"string","minLength":1,"description":"The text content"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"summary":{"type":"string","description":"One line saying what this text covers, for the agent-facing knowledge index"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["name","text","generateWithAi"]},"description":"Array of text content linked with the knowledge"},"links":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The base URL for the link"},"link":{"type":"array","items":{"type":"object","properties":{"link":{"type":"string","format":"uri","description":"The actual link URL"},"enabled":{"type":"boolean","description":"Whether the link is enabled for processing"},"lastScrapedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contentHash":{"type":"string","description":"Hash of the last scraped content; lets a re-scrape skip URLs whose content is unchanged"},"etag":{"type":"string","description":"Last ETag from the origin; sent as If-None-Match so an unchanged page returns 304"},"lastModified":{"type":"string","description":"Last Last-Modified from the origin; sent as If-Modified-Since for conditional re-fetch"},"lastScrapeAttemptAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastScrapeError":{"type":"string","description":"Why the last attempt produced nothing. Cleared on a successful scrape; set means the page is failing, not merely empty"},"title":{"type":"string","description":"The page's own declared name, from its schema.org markup — used to show the agent what this knowledge base covers"},"summary":{"type":"string","description":"One line saying what this page is about, so the agent can pick the right page before searching rather than after"}},"required":["link","enabled"]},"minItems":1,"description":"Array of link details"},"scrapeInterval":{"type":"string","enum":["off","daily","weekly","monthly"],"description":"How often the link source is automatically re-scraped. \"off\" disables re-scraping; minimum cadence is daily.","default":"off"},"crawlNewLinks":{"type":"boolean","default":false,"description":"On each re-scrape, re-crawl the base URL and ingest any newly discovered links"},"selectAllByDefault":{"type":"boolean","default":false,"description":"Auto-enable links discovered by a re-scrape crawl instead of leaving them disabled"},"excludeUrls":{"type":"array","items":{"type":"string"},"default":[],"description":"URLs to never include, even if discovered by a crawl"},"allowHosts":{"type":"array","items":{"type":"string"},"description":"Extra hosts a re-scrape crawl may add pages from. The base URL's own host and its subdomains are always allowed; every other host is skipped"},"contentFilter":{"type":"string","maxLength":2000,"description":"AI instruction for which pages to keep vs permanently exclude (e.g. only upcoming shows)"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed","default":"not_started"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["url","link","generateWithAi"]},"description":"Array of links linked with the knowledge"},"files":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the file"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"file":{"type":"object","properties":{"buffer":{"type":"object","description":"Any valid JSON value"},"originalname":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"name":{"type":"string"},"encoding":{"type":"string"},"tempFilePath":{"type":"string"},"truncated":{"type":"boolean"},"md5":{"type":"string"}},"description":"File upload schema for multipart/form-data"},"buffer":{"type":"object","description":"Any valid JSON value"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"text":{"type":"string","description":"The extracted text content from the file"},"id":{"type":"string","description":"Optional unique identifier"},"s3Key":{"type":"string","description":"S3 storage key for the file"},"displayUrl":{"type":"string","description":"Public display URL for the file"},"mimeType":{"type":"string","description":"MIME type of the file"},"summary":{"type":"string","description":"One line saying what this file covers, for the agent-facing knowledge index"}},"required":["name","generateWithAi","text","mimeType"]},"description":"Array of files linked with the knowledge with S3 information"},"emails":{"type":"array","items":{"type":"object","properties":{"emailId":{"type":"string","minLength":1,"description":"The email ID"},"text":{"type":"string","minLength":1,"description":"The text content of the email"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["emailId","text"]},"description":"Array of emails linked with the knowledge"},"calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The call ID"},"text":{"type":"string","minLength":1,"description":"The text content of the call (transcript)"}},"required":["id","text"]},"description":"Array of calls linked with the knowledge"},"chats":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The chat ID"},"text":{"type":"string","minLength":1,"description":"The text content of the chat"}},"required":["id","text"]},"description":"Array of chats linked with the knowledge"},"contactIds":{"type":"array","items":{"type":"string"},"description":"Array of contact IDs who have access to this knowledge"},"publicAccess":{"type":"boolean","description":"Whether this knowledge is publicly accessible"},"summaryLevelOfDetail":{"type":"string","enum":["small","medium","large"],"description":"Level of detail for AI-generated summaries"},"knowledgeDataIds":{"type":"array","items":{"type":"string"},"description":"Array of knowledge data IDs linked with this knowledge file"},"knowledgeData":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"sourceId":{"type":"string","description":"Optional unique identifier for the source"},"source":{"type":"string","description":"The source name or identifier"},"sourceUrl":{"type":"string","description":"Originating URL for link-sourced rows"},"sourceType":{"type":"string","enum":["texts","links","files","emails","calls","chats","questions","custom"],"description":"The type of source this knowledge data comes from"},"question":{"type":"string","description":"The question or query this knowledge data answers"},"answer":{"type":"string","description":"The answer or response to the question"},"protected":{"type":"boolean","description":"Whether this knowledge data is protected from modification"},"knowledgeFileId":{"type":"string","description":"Reference to the parent knowledge file"},"contactId":{"type":"string","description":"Optional reference to the associated contact (contact id)"},"isPrimaryVector":{"type":"boolean","description":"True for the canonical Q&A row; false for the auxiliary embedding row."},"timesUsed":{"type":"number","description":"Number of times this knowledge data has been used/accessed"},"alternates":{"type":"array","items":{"type":"string"},"description":"Alternate phrasings of the question (extra retrieval entry points to the same answer)"},"alternatesGenerated":{"type":"boolean","description":"Alternates were AI-generated rather than supplied by the caller"},"unanswered":{"type":"boolean","description":"True when this is a question a caller asked that the agent could not answer. Never retrievable until someone supplies the answer."},"timesAsked":{"type":"number","description":"How many separate calls have asked this unanswered question — what to answer first."}},"required":["id","createdAt","active","createdBy","createdById","companyId","source","sourceType","question","answer","protected","knowledgeFileId"],"description":"Response schema for knowledge data including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","sourceId":"file_12345","source":"company_policy.pdf","sourceType":"files","question":"What are the company policies for employee conduct?","answer":"The company policies for employee conduct include maintaining professional behavior, following dress code guidelines, and treating colleagues with respect.","protected":false,"knowledgeFileId":"507f1f77bcf86cd799439011","timesUsed":0,"vectorId":"vec_12345"}},"description":"Array of knowledge data entries linked with this knowledge file"},"googleDriveFolderId":{"type":"string","description":"Google Drive folder ID"},"googleDriveFolderUpdatedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"summary":{"type":"string","description":"AI-generated summary of the knowledge content"},"keyPoints":{"type":"string","description":"AI-generated key points extracted from the knowledge content"},"hidden":{"type":"boolean","description":"When true, this file is hidden from user-facing list endpoints."},"learningAutoAdd":{"type":"boolean","description":"false = Learning auto-add never approves into this base; absent = allowed."},"autoGenerated":{"type":"boolean","description":"When true, this knowledge file is populated automatically by the system (transferred-call post-analysis)."},"sourceAgentId":{"type":"string","description":"Owning agent id when the file is auto-generated for a single agent."},"isMemoryStore":{"type":"boolean","description":"When true, marks the per-company knowledge file holding contact memories."},"isCompanyKnowledgeStore":{"type":"boolean","description":"When true, marks the per-company file collecting business-wide unanswered questions."},"isCallMemoryStore":{"type":"boolean","description":"When true, marks a hidden per-user call-memory knowledge file for voice-assist."},"sourceUserId":{"type":"string","description":"Owning user id when isCallMemoryStore is true."},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed"},"unansweredCount":{"type":"integer","minimum":0,"description":"How many unanswered caller questions are waiting on this file. Set on the agent own-file and company own-file endpoints."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","language"],"description":"Response schema for knowledge files including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Company Policies and Procedures","description":"Comprehensive guide covering all company policies, procedures, and best practices","summary":"This knowledge base contains comprehensive information about company policies...","keyPoints":"1. Employee conduct policies\n2. Remote work guidelines\n3. Safety procedures","summaryLevelOfDetail":"medium","googleDriveFolderId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveFolderUpdatedAt":"2026-10-20T15:02:35.126Z"}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt","analysisProperties"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["transfer-call"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"transferType":{"type":"string","enum":["warm","cold"]},"voipConnectionIds":{"type":"array","items":{"type":"string"}},"connectDynamically":{"type":"boolean"},"showCallerId":{"type":"boolean"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"transferCallBasedOnPromptInstructions":{"type":"boolean"},"promptForTransferReason":{"type":"string"},"announceTransferReason":{"type":"boolean"},"analyzeTransferredCall":{"type":"boolean"},"agentIdToAnalyzeTransferredCall":{"type":"string"},"secondsToWaitForCallerToAnswer":{"type":"number","minimum":10,"maximum":60},"voipConnections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for the VoIP connection"},"dial":{"type":"number","description":"Dial number or extension assigned to this connection"},"reason":{"type":"string","description":"Internal notes or purpose description for this connection"},"connectionType":{"type":"string","enum":["User","External","Agent"],"description":"Type of destination: 'Agent', 'User', or 'External'"},"agentId":{"type":"string","description":"ID of the AI agent this connection routes to (only for Agent type connections)"},"sipDomain":{"type":"string","description":"SIP domain for this connection."},"phone":{"type":"string","description":"External phone number this connection forwards to (only for External type connections)"},"userId":{"type":"string","description":"ID of the user this connection routes to (only for User type connections)"},"start":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily start time when this connection becomes available"},"end":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily end time when this connection becomes unavailable"},"canAgentTranscribe":{"type":"boolean","description":"Whether the agent can transcribe calls to this connection"},"canAgentRecord":{"type":"boolean","description":"Whether the agent can record calls to this connection"},"canAgentAnalyze":{"type":"boolean","description":"Whether the agent can analyze calls to this connection"},"canAgentSpeakWhenAsked":{"type":"boolean","description":"Whether the agent can speak when asked during calls to this connection"},"allDay":{"type":"boolean","description":"Whether this connection is available 24/7 (ignores start/end times when true)"},"syncWithGoogle":{"type":"boolean","description":"Whether availability is synchronized with Google Calendar"},"syncWithGoogleStatus":{"type":"string","enum":["open","closed"],"description":"Google Calendar sync mode: 'open' for free time availability, 'closed' for busy time unavailability"},"messageToUser":{"type":"string","description":"Custom message or announcement played before transferring calls to this connection"},"aiGeneratedMessage":{"type":"boolean","description":"Whether transfer messages are dynamically generated by AI based on call context"},"transcription_enabled":{"type":"boolean","description":"Whether real-time transcription is enabled for calls on this connection"},"agent":{"type":"object","properties":{"id":{"type":"string","description":"Agent's unique identifier"},"name":{"type":"string","description":"Agent's display name"}},"description":"Full agent details when connectionType is 'Agent' (populated from agents database)"},"user":{"type":"object","properties":{"id":{"type":"string","description":"User's unique identifier"},"name":{"type":"string","description":"User's full name"},"email":{"type":"string","description":"User's email address"},"defaultCompanyId":{"type":"string","description":"User's default company ID"},"picture":{"type":"string","description":"User's profile picture URL"},"emailVerified":{"type":"boolean","description":"Whether the user's email has been verified"},"lastConnectedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"isConnected":{"type":"boolean","description":"Whether the user is currently online/connected"}},"description":"Full user details when connectionType is 'User' (populated from users database)"},"username":{"type":"string","description":"SIP username for direct authentication (advanced configurations only)"},"password":{"type":"string","description":"SIP password for direct authentication (advanced configurations only)"},"ipAddress":{"type":"array","items":{"type":"string"},"description":"Whitelist of allowed IP addresses for security restrictions"},"extensionRegistrationIds":{"type":"array","items":{"type":"string"},"description":"IDs of the extension registrations linked with this connection"},"extensionRegistrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"voipConnectionId":{"type":"string","description":"ID of the VoIP Connection that owns this extension (legacy)"},"phoneExtensionId":{"type":"string","description":"ID of the Phone Extension that owns this extension"},"username":{"type":"string","description":"SIP username/extension that is registered"},"contactUri":{"type":"string","description":"Full SIP Contact URI for routing calls to this extension"},"remoteAddress":{"type":"string","description":"IP address of the registered SIP client"},"clientIp":{"type":"string","description":"Public client IP when known"},"remotePort":{"type":"number","description":"Port number of the registered SIP client"},"transport":{"type":"string","enum":["udp","tcp","tls","websocket"],"description":"Transport protocol: 'udp', 'tcp', 'tls' for SIP; 'websocket' for app clients"},"registeredAt":{"type":"string","format":"date-time","description":"Timestamp when this extension was registered (ISO 8601 format)"},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp when this registration will expire (ISO 8601 format)"},"expires":{"type":"number","description":"Number of seconds until expiration (decreases over time)"},"userAgent":{"type":"string","description":"SIP User-Agent identifying the client software"},"callId":{"type":"string","description":"SIP Call-ID from the REGISTER request"},"bindingSource":{"type":"string","enum":["register","invite"],"description":"'register' = the phone sent a REGISTER and can be rung; 'invite' = stand-in written from an authenticated outbound INVITE, used only for that call's in-dialog requests and never for ringing the phone"},"consecutiveInviteFailures":{"type":"integer","description":"Liveness skip-list counter. Bumped on 5xx/timeout from fork-INVITEs, reset on 200 OK. When ≥3 and `lastInviteFailureAt` is within the last 5 minutes, the registration is skipped by routing."},"lastInviteFailureAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"voipConnection":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"agentId":{"type":"string"},"userId":{"type":"string"},"connectionType":{"type":"string"}},"description":"Legacy VoIP Connection — only populated for pre-migration rows."},"userEndpoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"number":{"type":"string"},"status":{"type":"string"}},"description":"Populated UserEndpoint this registration belongs to."}},"required":["id","createdAt","active","createdBy","createdById","companyId","username","contactUri","remoteAddress","remotePort","transport","registeredAt","expiresAt","expires"],"description":"Extension registration details including contact information and expiration status","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","voipConnectionId":"507f1f77bcf86cd799439011","username":"1001","contactUri":"sip:1001@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300,"userAgent":"Zoiper 5.5.10","callId":"abc123@192.168.1.100","voipConnection":{"id":"507f1f77bcf86cd799439011","name":"Customer Support","agentId":"507f1f77bcf86cd799439012","connectionType":"Agent"}}},"description":"Active SIP device registrations for this connection (virtual populate from ExtensionRegistration collection, filtered to show only non-expired registrations). Each entry represents a physical device (phone, softphone, etc.) currently registered with this extension."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","connectionType","syncWithGoogle","syncWithGoogleStatus"],"description":"Response schema for VoIP connection including complete configuration, company metadata, and linked agent or user details","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support","dial":1,"reason":"General customer support inquiries","connectionType":"Agent","agentId":"507f1f77bcf86cd799439011","phone":"+1234567890","userId":"507f1f77bcf86cd799439012","start":{"hours":9,"minutes":0},"end":{"hours":17,"minutes":0},"canAgentTranscribe":true,"canAgentRecord":true,"canAgentAnalyze":true,"canAgentSpeakWhenAsked":false,"allDay":false,"syncWithGoogle":true,"syncWithGoogleStatus":"open","messageToUser":"Welcome to customer support!","aiGeneratedMessage":false,"agent":{"id":"507f1f77bcf86cd799439011","name":"John Doe","email":"john@example.com"},"user":{"id":"507f1f77bcf86cd799439012","name":"Jane Smith","email":"jane@example.com"},"registrations":[{"id":"507f1f77bcf86cd799439013","username":"customer_support","contactUri":"sip:customer_support@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300}]}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","transferType"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["end-call"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["press-digit"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"nodePromptType":{"type":"string","enum":["prompt","static"]},"prompt":{"type":"string"}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","nodePromptType","prompt"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["email"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","emailConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["sms"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","smsConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["api"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions","apiConfig"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["logic-split"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions"]},{"type":"object","properties":{"isGlobalNode":{"type":"boolean"},"startNode":{"type":"boolean"},"globalNodeCondition":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"conditionPrompt":{"type":"string"},"nodeType":{"type":"string","enum":["extract-analysis"]},"nodeTitle":{"type":"string"},"skipResponse":{"type":"boolean"},"interruptionConfig":{"type":"object","properties":{"type":{"type":"string","enum":["as_soon_as_human_speaks","when_human_completes_utterance","never_interrupt","evaluate_interruption"],"description":"How the agent should handle user interruptions"},"interruptionEvaluationPrompt":{"type":"string","description":"Custom prompt to evaluate whether interruption should be allowed"},"messageOnSuccessfulInterruption":{"type":"string","description":"Message to play when interruption is successful"},"messageOnFailedInterruption":{"type":"string","description":"Message to play when interruption is not allowed"}},"required":["type"],"description":"Configuration for handling user interruptions during agent speech","example":{"type":"evaluate_interruption","interruptionEvaluationPrompt":"Should I interrupt the user now?","messageOnSuccessfulInterruption":"I understand, please continue.","messageOnFailedInterruption":"Please let me finish my response."}},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["prompt","condition","transcriptionMessage","conditionBlock","dynamic","noCondition","always","success","error"]},"prompt":{"type":"string"},"conditionLabel":{"type":"string"},"conditionBlock":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"condition":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]},"isEditing":{"type":"boolean"},"connectedTo":{"type":"number"}},"required":["type"]}},"prompt":{"type":"string"},"model":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}}},"required":["isGlobalNode","startNode","globalNodeCondition","nodeType","nodeTitle","skipResponse","transitions"]}],"discriminator":{"propertyName":"nodeType"},"description":"Node-specific data and configuration"},"html":{"type":"string","description":"HTML content for the node display"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}],"description":"Type identifier for the node"}},"required":["id","name","position","inputs","outputs"],"example":{"id":"1","name":"Welcome Message","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"}]},"inputs":{},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}}},"connections":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","description":"Target node identifier for the connection"},"input":{"type":"string","description":"Input port identifier on the target node"},"output":{"type":"string","description":"Output port identifier on the source node"},"label":{"type":"string","description":"Display label for the connection"}},"required":["node"],"description":"Schema for a connection between two flow nodes","example":{"node":"2","input":"default","output":"default","label":"Continue"}}},"integrations":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"source":{"type":"string"},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"read":{"type":"boolean"},"write":{"type":"boolean"}},"required":["name","read","write"]}}},"required":["enabled","source","properties"]}},"knowledgeFiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"The name of the knowledge file"},"description":{"type":"string","description":"Optional description of the knowledge file"},"language":{"type":"string","enum":["ar-AE","ar-BH","ar-EG","ar-KW","ar-OM","ar-QA","ar-SA","ar-LB","ar-MA","el-GR","en-US","es-ES","fr-FR","el-CY","en-DK","he-IL","bg-BG","ru-RU","de-DE","it-IT","pt-PT","ru-RU","tr-TR","zh-CN","ja-JP","ko-KR","ja-JP","ar-SA","hi-IN","bn-BD","pa-IN","ta-IN","te-IN","ur-IN","vi-VN","th-TH","id-ID","ms-MY","fil-PH","nl-NL","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","zh-MO","zh-SG","zh-CH","zh-CHT","zh-CHS","zh-CHT","ro-RO","hu-HU","pl-PL","sr-RS","mk-MK","bg-BG","uk-UA","en-GB","en-AU","en-CA","en-NZ","en-ZA","en-IN","en-IE","en-PH","en-SG","en-HK","en-MO","en-CN","en-TW","en-MY","nl-BE","de-AT","de-CH","sv-SE","no-NO","da-DK","fi-FI","is-IS","gl-ES","ca-ES","eu-ES","pt-BR","zh-TW","zh-HK","cs-CZ","sk-SK","sl-SI","hr-HR","lt-LT","lv-LV","et-EE","mt-MT","lb-LU","sq-AL","bs-BA","ca-AD","fr-MC","it-SM","it-VA","ur-PK"],"description":"Language of the knowledge file"},"texts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"The subject/title of the text (shown as the knowledge entry)"},"text":{"type":"string","minLength":1,"description":"The text content"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"summary":{"type":"string","description":"One line saying what this text covers, for the agent-facing knowledge index"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["name","text","generateWithAi"]},"description":"Array of text content linked with the knowledge"},"links":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The base URL for the link"},"link":{"type":"array","items":{"type":"object","properties":{"link":{"type":"string","format":"uri","description":"The actual link URL"},"enabled":{"type":"boolean","description":"Whether the link is enabled for processing"},"lastScrapedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contentHash":{"type":"string","description":"Hash of the last scraped content; lets a re-scrape skip URLs whose content is unchanged"},"etag":{"type":"string","description":"Last ETag from the origin; sent as If-None-Match so an unchanged page returns 304"},"lastModified":{"type":"string","description":"Last Last-Modified from the origin; sent as If-Modified-Since for conditional re-fetch"},"lastScrapeAttemptAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastScrapeError":{"type":"string","description":"Why the last attempt produced nothing. Cleared on a successful scrape; set means the page is failing, not merely empty"},"title":{"type":"string","description":"The page's own declared name, from its schema.org markup — used to show the agent what this knowledge base covers"},"summary":{"type":"string","description":"One line saying what this page is about, so the agent can pick the right page before searching rather than after"}},"required":["link","enabled"]},"minItems":1,"description":"Array of link details"},"scrapeInterval":{"type":"string","enum":["off","daily","weekly","monthly"],"description":"How often the link source is automatically re-scraped. \"off\" disables re-scraping; minimum cadence is daily.","default":"off"},"crawlNewLinks":{"type":"boolean","default":false,"description":"On each re-scrape, re-crawl the base URL and ingest any newly discovered links"},"selectAllByDefault":{"type":"boolean","default":false,"description":"Auto-enable links discovered by a re-scrape crawl instead of leaving them disabled"},"excludeUrls":{"type":"array","items":{"type":"string"},"default":[],"description":"URLs to never include, even if discovered by a crawl"},"allowHosts":{"type":"array","items":{"type":"string"},"description":"Extra hosts a re-scrape crawl may add pages from. The base URL's own host and its subdomains are always allowed; every other host is skipped"},"contentFilter":{"type":"string","maxLength":2000,"description":"AI instruction for which pages to keep vs permanently exclude (e.g. only upcoming shows)"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed","default":"not_started"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["url","link","generateWithAi"]},"description":"Array of links linked with the knowledge"},"files":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the file"},"generateWithAi":{"type":"boolean","description":"Whether to generate questions and answers with AI"},"ingestionMode":{"type":"string","enum":["document","qa"],"description":"Ingestion strategy for text/file/link content: document (title+body+alternates) or qa (many generated Q&A pairs)","default":"document"},"file":{"type":"object","properties":{"buffer":{"type":"object","description":"Any valid JSON value"},"originalname":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"name":{"type":"string"},"encoding":{"type":"string"},"tempFilePath":{"type":"string"},"truncated":{"type":"boolean"},"md5":{"type":"string"}},"description":"File upload schema for multipart/form-data"},"buffer":{"type":"object","description":"Any valid JSON value"},"data":{"type":"object","description":"Any valid JSON value"},"mv":{"type":"object","description":"Any valid JSON value"},"text":{"type":"string","description":"The extracted text content from the file"},"id":{"type":"string","description":"Optional unique identifier"},"s3Key":{"type":"string","description":"S3 storage key for the file"},"displayUrl":{"type":"string","description":"Public display URL for the file"},"mimeType":{"type":"string","description":"MIME type of the file"},"summary":{"type":"string","description":"One line saying what this file covers, for the agent-facing knowledge index"}},"required":["name","generateWithAi","text","mimeType"]},"description":"Array of files linked with the knowledge with S3 information"},"emails":{"type":"array","items":{"type":"object","properties":{"emailId":{"type":"string","minLength":1,"description":"The email ID"},"text":{"type":"string","minLength":1,"description":"The text content of the email"},"id":{"type":"string","description":"Optional unique identifier"}},"required":["emailId","text"]},"description":"Array of emails linked with the knowledge"},"calls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The call ID"},"text":{"type":"string","minLength":1,"description":"The text content of the call (transcript)"}},"required":["id","text"]},"description":"Array of calls linked with the knowledge"},"chats":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"The chat ID"},"text":{"type":"string","minLength":1,"description":"The text content of the chat"}},"required":["id","text"]},"description":"Array of chats linked with the knowledge"},"contactIds":{"type":"array","items":{"type":"string"},"description":"Array of contact IDs who have access to this knowledge"},"publicAccess":{"type":"boolean","description":"Whether this knowledge is publicly accessible"},"summaryLevelOfDetail":{"type":"string","enum":["small","medium","large"],"description":"Level of detail for AI-generated summaries"},"knowledgeDataIds":{"type":"array","items":{"type":"string"},"description":"Array of knowledge data IDs linked with this knowledge file"},"knowledgeData":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"sourceId":{"type":"string","description":"Optional unique identifier for the source"},"source":{"type":"string","description":"The source name or identifier"},"sourceUrl":{"type":"string","description":"Originating URL for link-sourced rows"},"sourceType":{"type":"string","enum":["texts","links","files","emails","calls","chats","questions","custom"],"description":"The type of source this knowledge data comes from"},"question":{"type":"string","description":"The question or query this knowledge data answers"},"answer":{"type":"string","description":"The answer or response to the question"},"protected":{"type":"boolean","description":"Whether this knowledge data is protected from modification"},"knowledgeFileId":{"type":"string","description":"Reference to the parent knowledge file"},"contactId":{"type":"string","description":"Optional reference to the associated contact (contact id)"},"isPrimaryVector":{"type":"boolean","description":"True for the canonical Q&A row; false for the auxiliary embedding row."},"timesUsed":{"type":"number","description":"Number of times this knowledge data has been used/accessed"},"alternates":{"type":"array","items":{"type":"string"},"description":"Alternate phrasings of the question (extra retrieval entry points to the same answer)"},"alternatesGenerated":{"type":"boolean","description":"Alternates were AI-generated rather than supplied by the caller"},"unanswered":{"type":"boolean","description":"True when this is a question a caller asked that the agent could not answer. Never retrievable until someone supplies the answer."},"timesAsked":{"type":"number","description":"How many separate calls have asked this unanswered question — what to answer first."}},"required":["id","createdAt","active","createdBy","createdById","companyId","source","sourceType","question","answer","protected","knowledgeFileId"],"description":"Response schema for knowledge data including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","sourceId":"file_12345","source":"company_policy.pdf","sourceType":"files","question":"What are the company policies for employee conduct?","answer":"The company policies for employee conduct include maintaining professional behavior, following dress code guidelines, and treating colleagues with respect.","protected":false,"knowledgeFileId":"507f1f77bcf86cd799439011","timesUsed":0,"vectorId":"vec_12345"}},"description":"Array of knowledge data entries linked with this knowledge file"},"googleDriveFolderId":{"type":"string","description":"Google Drive folder ID"},"googleDriveFolderUpdatedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"summary":{"type":"string","description":"AI-generated summary of the knowledge content"},"keyPoints":{"type":"string","description":"AI-generated key points extracted from the knowledge content"},"hidden":{"type":"boolean","description":"When true, this file is hidden from user-facing list endpoints."},"learningAutoAdd":{"type":"boolean","description":"false = Learning auto-add never approves into this base; absent = allowed."},"autoGenerated":{"type":"boolean","description":"When true, this knowledge file is populated automatically by the system (transferred-call post-analysis)."},"sourceAgentId":{"type":"string","description":"Owning agent id when the file is auto-generated for a single agent."},"isMemoryStore":{"type":"boolean","description":"When true, marks the per-company knowledge file holding contact memories."},"isCompanyKnowledgeStore":{"type":"boolean","description":"When true, marks the per-company file collecting business-wide unanswered questions."},"isCallMemoryStore":{"type":"boolean","description":"When true, marks a hidden per-user call-memory knowledge file for voice-assist."},"sourceUserId":{"type":"string","description":"Owning user id when isCallMemoryStore is true."},"processingStatus":{"type":"string","enum":["not_started","processing","ready","failed"],"description":"Background ingest status: not_started, processing, ready (completed), or failed"},"unansweredCount":{"type":"integer","minimum":0,"description":"How many unanswered caller questions are waiting on this file. Set on the agent own-file and company own-file endpoints."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","language"],"description":"Response schema for knowledge files including company entity base fields","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Company Policies and Procedures","description":"Comprehensive guide covering all company policies, procedures, and best practices","summary":"This knowledge base contains comprehensive information about company policies...","keyPoints":"1. Employee conduct policies\n2. Remote work guidelines\n3. Safety procedures","summaryLevelOfDetail":"medium","googleDriveFolderId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveFolderUpdatedAt":"2026-10-20T15:02:35.126Z"}}},"workflows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"triggers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCallStart","onCallConnect","onCallEnd","onCallTransfer","onMissedCall","onDTMFInput","onKeywordDetected","duringCall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"functionName":{"type":"string","pattern":"^[a-z0-9_]+$"},"keywords":{"type":"array","items":{"type":"string"}},"condition":{"type":"string"},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"generateMessageBeforeRunningWorkflow":{"type":"boolean"},"messageAiGenerated":{"type":"boolean"},"messagePrompt":{"type":"string"},"playWaitMusic":{"type":"boolean","description":"When true (default), play keyboard wait music while this duringCall workflow tool runs"},"useProtectedValues":{"type":"boolean","description":"onCallEnd only. When true, the non-AI steps of this workflow (API call, integrations, booking, email, SMS, sheets, conditions) get the REAL values the caller said ({{protected.afm}}, {{afm_1}}, …) when the agent protects sensitive data; AI steps (llmCompletion, aiResponse, managedAgent, googleSearch) always get placeholders. Every use is audited. Only members who may reveal sensitive data can turn it on."}},"example":{"keywords":["hello","world"],"condition":"call_started","parameters":[{"name":"call_id","value":"123"}],"playWaitMusic":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onEmailReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"emailFilters":{"type":"object","properties":{"from":{"type":"array","items":{"type":"string"}},"subject":{"type":"array","items":{"type":"string"}},"labels":{"type":"array","items":{"type":"string"}}}}},"example":{"emailFilters":{"from":["test@test.com"],"subject":["test"],"labels":["test"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onAPICall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"payloadSchema":{"type":"object","properties":{"type":{"type":"string","enum":["object"]},"properties":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","enum":["object","array","string","number","boolean","date","enum"]},"required":{"type":"boolean","default":false},"properties":{"type":"object","additionalProperties":{"type":"object","description":"Circular reference detected"}},"items":{"type":"object","description":"Circular reference detected"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"},"minimum":{"type":"number"},"maximum":{"type":"number"},"enum":{"type":"array","items":{"type":"string"}}},"required":["type"]}},"required":{"type":"array","items":{"type":"string"}}},"required":["type","properties"],"description":"Expected payload structure"}},"example":{"payloadSchema":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^TX-[0-9]{8}$"},"amount":{"type":"number","minimum":0},"currency":{"type":"string","enum":["USD","EUR","GBP"]}},"required":["transactionId","amount","currency"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onContactCreated","onCompanyCreated","onDealCreated","onTicketCreated","onPropertyChange"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","property"]},"property":{"type":"string","enum":["hs_lead_status","lifecyclestage","hubspot_owner_id","companyname","domain","dealstage","amount","closedate","closed_won_reason","closed_lost_reason","pipeline","hs_pipeline_stage","hs_due_date"]}},"example":{"resource":"contact","property":"hs_lead_status"}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onWooCommerce"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"getCustomerOrders":{"type":"boolean"},"getProductByName":{"type":"boolean"},"getProductByCode":{"type":"boolean"},"productCodeType":{"type":"string","enum":["id","sku","global_unique_id"]},"createOrder":{"type":"boolean"},"getOrderById":{"type":"boolean"},"notifyEmailsOnOrderCreation":{"type":"array","items":{"type":"string"}}},"example":{"getCustomerOrders":true,"getProductByName":true,"getProductByCode":true,"productCodeType":"id","createOrder":true,"getOrderById":true,"notifyEmailsOnOrderCreation":["test@test.com"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onYubotoPbxChannelHangup","onYubotoPbxChannelAnswer","onYubotoPbxChannelCreate"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"agentId":{"type":"string"},"allowedExtensions":{"type":"array","items":{"type":"string"}}},"example":{"username":"test","password":"test","agentId":"test","allowedExtensions":["123","456"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCampaignLeadStatusChanged"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign to watch. Omit to fire for every campaign of the company."},"statuses":{"type":"array","items":{"type":"string","enum":["successful","failed","reachedMaxRetries","askedToCallBackLater","askedToNeverCallAgain","cancelled"]},"description":"Lead statuses that fire the workflow. Omit or empty = every outcome status."},"stages":{"type":"array","items":{"type":"string"},"description":"Only fire when the lead is in one of these campaign stage names. Omit or empty = any stage."}},"example":{"campaignId":"66f1c0ffee0000000000abcd","statuses":["failed","reachedMaxRetries"],"stages":[]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onShopifyEvent"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["orders/create","orders/paid","orders/fulfilled","orders/partially_fulfilled","orders/cancelled","refunds/create","fulfillments/create","fulfillments/update"]},"minItems":1,"description":"Shopify events that start the workflow."},"financialStatuses":{"type":"array","items":{"type":"string","enum":["pending","authorized","partially_paid","paid","partially_refunded","refunded","voided"]},"description":"Only when the order payment status is one of these. Empty = any."},"fulfillmentStatuses":{"type":"array","items":{"type":"string","enum":["unfulfilled","partial","fulfilled","restocked"]},"description":"Only when the order fulfillment status is one of these. Empty = any."},"shipmentStatuses":{"type":"array","items":{"type":"string","enum":["label_printed","label_purchased","confirmed","in_transit","out_for_delivery","attempted_delivery","ready_for_pickup","delivered","failure"]},"description":"Shipment topics only: only when the carrier status is one of these. Empty = any."},"paymentGateways":{"type":"array","items":{"type":"string"},"description":"Only when a payment gateway name contains one of these (case-insensitive), e.g. \"Cash on Delivery\". Empty = any."},"tags":{"type":"array","items":{"type":"string"},"description":"Only when the order has at least one of these tags (case-insensitive). Empty = any."},"minTotal":{"type":"number","minimum":0,"description":"Only when the order total is at least this amount."},"maxTotal":{"type":"number","minimum":0,"description":"Only when the order total is at most this amount."}},"required":["topics"],"example":{"topics":["orders/create"],"financialStatuses":["pending"],"paymentGateways":["Cash on Delivery"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onLeadReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"string","enum":["tiktok","meta","google_ads","linkedin","webhook","form"]},"description":"Only leads from these sources start the workflow. Empty = any source, including ones added later."},"formIds":{"type":"array","items":{"type":"string","minLength":1},"description":"Only these forms: our lead form ids (from lead_forms_list_forms). A platform form id or a form name also matches, for older triggers. Empty = any."},"requirePhone":{"type":"boolean","description":"Skip a lead with no phone number."},"includeTestSubmissions":{"type":"boolean","description":"Also fire for test submissions. Off by default."}},"example":{"sources":["google_ads","form"],"requirePhone":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"triggerType"}}},"required":["id","name","position","outputs"],"example":{"id":1,"name":"Call Start Trigger","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"},{"node":"3","output":"default"}]},"className":"trigger-node","data":{"triggerType":"onCallStart","triggerConfig":{"enabled":true,"triggerType":"onCallEnd","description":"Trigger when a new call starts"},"transitions":[2,3]}}},"description":"Trigger node that starts the flow"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"nodeType":{"type":"string","enum":["emailConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["nodeType","nodeTitle","transitions","emailConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendSms"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["nodeType","nodeTitle","transitions","smsConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["apiCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["nodeType","nodeTitle","transitions","apiConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["codeExecution"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"codeConfig":{"type":"object","properties":{"code":{"type":"string"},"language":{"type":"string","enum":["javascript","python","java","cpp","php","ruby"]},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties for the code"}},"required":["code","language"],"example":{"code":"console.log(\"Hello, world!\");","language":"javascript","properties":[{"name":"name","type":"string"}]}}},"required":["nodeType","nodeTitle","transitions","codeConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleDocConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}}},"required":["nodeType","nodeTitle","transitions","googleDocConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createEvent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"eventConfig":{"type":"object","properties":{"calendarId":{"type":"string","description":"Google calendar id. Empty = the company's primary calendar."},"summary":{"type":"string","description":"Event title."},"startDateTime":{"type":"string","description":"Start, ISO 8601 (\"2026-08-12T15:00:00\") or \"YYYY-MM-DD HH:mm\"."},"endDateTime":{"type":"string","description":"End. Empty = start + durationMinutes."},"durationMinutes":{"type":"number","minimum":1,"maximum":1440,"description":"Used only when endDateTime is empty. Defaults to 30."},"description":{"type":"string"},"location":{"type":"string"},"attendees":{"type":"string","description":"Comma-separated emails."},"timeZone":{"type":"string","description":"IANA zone. Empty = the company timezone."},"isOnline":{"type":"boolean","description":"When true, Google adds a Meet link to the event."}},"required":["durationMinutes"],"example":{"summary":"Callback for {{contact_name}}","startDateTime":"{{callback_datetime}}","durationMinutes":30,"description":"Requested during call {{call_id}}","attendees":"sales@example.com","isOnline":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendPhoneCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}}},"required":["nodeType","nodeTitle","transitions","phoneCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["llmCompletion"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}}},"required":["nodeType","nodeTitle","transitions","llmCompletionConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheet"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]}},"required":["nodeType","nodeTitle","transitions","googleSheetConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}}},"required":["nodeType","nodeTitle","transitions","googleSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendViber"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}}},"required":["nodeType","nodeTitle","transitions","viberConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["switch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"switchConfig":{"type":"object","properties":{"cases":{"type":"array","items":{"type":"object","properties":{"block":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"transition":{"type":"string"},"transitionIndex":{"type":"number"}},"required":["block"]}}},"required":["cases"],"example":{"cases":[{"transition":"Schedule Appointment","transitionIndex":1,"block":{"operator":"and","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"schedule_appointment","fieldType":"string"}]}},{"transition":"Cancel Appointment","transitionIndex":0,"block":{"operator":"or","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"cancel_appointment","fieldType":"string"}]}}]}}},"required":["nodeType","nodeTitle","transitions","switchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["if"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"ifConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","ifConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["filter"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"filterConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","filterConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["loop"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"loopConfig":{"type":"object","properties":{"array":{"type":"string"}},"required":["array"],"example":{"array":"user_response"}}},"required":["nodeType","nodeTitle","transitions","loopConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["tableNode"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"tableConfig":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","maxLength":128},"type":{"type":"string","enum":["string","number","boolean"]}},"required":["key","label"]},"maxItems":50},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"maxItems":500},"filters":{"type":"array","items":{"type":"object","properties":{"column":{"type":"string","minLength":1},"op":{"type":"string","enum":["equals","notEquals","contains","gt","lt","gte","lte"]},"value":{"type":"string"}},"required":["column","op","value"]}},"mode":{"type":"string","enum":["producer","lookup"]},"keyColumn":{"type":"string"},"keyValue":{"type":"string"}},"required":["columns","rows"],"example":{"columns":[{"key":"name","label":"Name","type":"string"},{"key":"phone","label":"Phone","type":"string"}],"rows":[{"name":"Alice","phone":"+30 210 1234567"},{"name":"Bob","phone":"+30 210 7654321"}],"mode":"producer"}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hubspotContact","hubspotCompany","hubspotDeal","hubspotTicket","hubspotTask","hubspotNote","hubspotMeeting","hubspotEmail","hubspotCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hubspotConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"operation":{"type":"string","enum":["get","create","createOrUpdate","getOrCreate","delete","update","search","list","exists"]},"value":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"associations":{"type":"array","items":{"type":"object","properties":{"associationType":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["associationType","valueType","value"],"example":{"associationType":"contact","valueType":"id","value":"123"}}},"owner":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"contactData":{"type":"object","properties":{"properties":{"type":"object","properties":{"email":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"}},"required":[]}},"example":{"email":"test@test.com","firstname":"John","lastname":"Doe","phone":"+1234567890","company":"Test Corp","website":"https://test.com","lifecyclestage":"marketingqualifiedlead","jobtitle":"Manager","hs_additional_emails":["test2@test.com"]}},"companyData":{"type":"object","properties":{"properties":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"industry":{"type":"string"},"description":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"}},"required":[]}},"example":{"name":"Test Corp","domain":"test.com","industry":"Technology","description":"Test Description","city":"Test City","country":"Test Country","phone":"1234567890","address":"Test Address","owner":{"valueType":"email","value":"test@test.com"}}},"dealData":{"type":"object","properties":{"properties":{"type":"object","properties":{"dealname":{"type":"string"},"pipeline":{"type":"string"},"stage":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string"},"closeDate":{"type":"string"},"dealType":{"type":"string","enum":["new","existing"]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["pipeline","stage"]}},"example":{"name":"Test Deal","description":"Test Description","amount":"1000","stage":"Test Stage"}},"ticketData":{"type":"object","properties":{"properties":{"type":"object","properties":{"pipeline":{"type":"string"},"stage":{"type":"string"},"priority":{"type":"string","enum":["HIGH","MEDIUM","LOW"]},"subject":{"type":"string"},"content":{"type":"string"}},"required":["pipeline","stage","subject"]}},"example":{"pipeline":"Test Pipeline","stage":"Test Stage","priority":"HIGH","subject":"Test Subject","content":"Test Content"}},"taskData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string"},"taskType":{"type":"string"},"priority":{"type":"string"},"dueDate":{"type":"string"},"repeatType":{"type":"object","properties":{"enabled":{"type":"boolean"},"type":{"type":"string","enum":["hour","day","week","month","year"]},"value":{"type":"string"}},"example":{"enabled":true,"type":"day","value":"1"}},"reminderTime":{"oneOf":[{"type":"number"},{"type":"string"}]},"notes":{"type":"string"}},"required":["title","dueDate"]}},"example":{"associations":[{"associationType":"contact","valueType":"email","value":"contact@example.com"}],"properties":{"title":"Task Title","taskType":"TODO","priority":"MEDIUM","associations":[],"timestamp":"2021-01-01","dueDate":"2021-01-01","notes":"Task Notes","ownerEmail":"owner@example.com","status":"NOT_STARTED","reminderTime":1000}}},"noteData":{"type":"object","properties":{"properties":{"type":"object","properties":{"body":{"type":"string"}},"required":[]}}},"meetingData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title of the meeting"},"body":{"type":"string","description":"Meeting description"}}}},"required":["properties"],"example":{"properties":{"title":"Initial Project Discussion","body":"Meeting to discuss project requirements and timeline"}}},"emailData":{"type":"object","properties":{"properties":{"type":"object","properties":{"subject":{"type":"string","description":"Subject of the email"},"body":{"type":"string","description":"Email body content"}},"required":[]}},"example":{"properties":{"subject":"Project Update","body":"Here are the latest updates on the project progress."}}},"callData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title/subject of the call"},"body":{"type":"string","description":"Call description and notes"},"direction":{"type":"string","enum":["INBOUND","OUTBOUND"],"description":"Call direction"},"caller":{"type":"string","description":"Caller phone number"},"callee":{"type":"string","description":"Callee phone number"},"duration":{"type":"string","description":"Call duration in milliseconds"},"disposition":{"type":"string","enum":["9d9162e7-6cf3-4944-bf63-4dff82258764","f240bbac-87c9-4f6e-bf70-924b57d47db7","a4c4c377-d246-4b32-a13b-75a56a4cd0ff","b2cf5968-551e-4856-9783-52b3da59a7d0","73a0d17f-1163-4015-bdd5-ec830791da20","17b47fee-58de-441e-a44c-c6300d46f273"],"description":"Call disposition"},"recordingUrl":{"type":"string","description":"Call recording URL"}},"required":[]}},"example":{"properties":{"title":"Test Call","body":"Test Body"}}}},"required":["resource","operation"],"example":{"resource":"call","operation":"create","owner":{"valueType":"email","value":"test@test.com"},"properties":{"callData":{"properties":{"callTitle":"Test Call","callBody":"Test Body"}}}}}},"required":["nodeType","nodeTitle","transitions","hubspotConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheetSettings"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetSettingsConfig":{"type":"object","properties":{"googleSheetId":{"type":"string","minLength":1,"description":"The unique identifier of the Google Sheet"},"sheetName":{"type":"string","minLength":1,"description":"The name of the specific sheet within the Google Sheet"},"operation":{"type":"string","enum":["getRow","getRows","updateRow","appendRow","deleteRow","getData"],"description":"The operation to perform on the Google Sheet (getRow, getRows, updateRow, appendRow, deleteRow)"},"filter":{"type":"object","properties":{"filterType":{"type":"string","enum":["index","columnName"]},"column":{"type":"string"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"fieldType":{"type":"string","enum":["string","phone","email","number","boolean","date","time","enum"]},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["filterType","column","operator","fieldType"],"example":{"filterType":"index","column":"1","operator":"eq","fieldType":"string","fieldValue":"Chris"},"description":"Filter to apply for selecting rows, such as by index or column name"},"values":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"object","description":"Any valid JSON value"}},"required":["key","value"]},"description":"Key-value pairs for the row data"}},"required":["googleSheetId","sheetName","operation"],"example":{"googleSheetId":"123","sheetName":"Sheet1","operation":"getRow","filter":{"filterType":"index","column":"1","operator":"eq","fieldType":"number","fieldValue":"152"},"values":[{"key":"Email","value":"john.doe@example.com"},{"key":"Name","value":"John Doe"}]}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["aiResponse"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}}},"required":["nodeType","nodeTitle","transitions","aiResponseConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["transferCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["nodeType","nodeTitle","transitions","transferCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["afmSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"afmSearchConfig":{"type":"object","properties":{"afm":{"type":"string","description":"AFM of company"}},"required":["afm"],"example":{"afm":"8022188180"}}},"required":["nodeType","nodeTitle","transitions","afmSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["galaxyGetCustomer","galaxySearchItems","galaxyCheckStock","galaxyGetPrice","galaxyCalculateOrder","galaxyPlaceOrder","galaxyUpdateOrder","galaxyGetOrderStatus","galaxyGetTransactionHistory","galaxyGetCustomerBalance","galaxyGetCustomerAging","galaxyGetFinInfoPerDrugType","galaxyGetItemPurchases","galaxyGetCustomerKartelaLink","galaxyFindItemsByActiveIngredient","galaxyGetInvoicePdfLinks","galaxyGetNextRoute","galaxyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"galaxyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","checkStock","getPrice","calcLines","calculateOrder","placeOrder","updateOrder","getOrderStatus","getTransactionHistory","getCustomerBalance","getCustomerAging","getFinInfoPerDrugType","getItemPurchases","getCustomerKartelaLink","findItemsByActiveIngredient","getInvoicePdfLinks","getNextRoute","customRequest"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","custCode"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query (supports {{variables.x}})"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"checkStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"wrhsCode":{"type":"string","description":"Overrides the company default warehouse"}},"required":["itemCode"]},"getPrice":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"}},"required":["EntryType","Date","Quantity"]},"calcLines":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"},"WrhsCode":{"type":"string"},"AlterCode":{"type":"string"},"Barcode":{"type":"string"}},"required":["EntryType","Date","Quantity","WrhsCode"]},"placeOrder":{"type":"object","properties":{"entry":{"type":"object","properties":{"CompID":{"type":"string"},"CompCode":{"type":"string"},"CmpsID":{"type":"string"},"CmpsCode":{"type":"string"},"WrhsID":{"type":"string"},"WrhsCode":{"type":"string"},"CoetID":{"type":"string"},"CoetCode":{"type":"string"},"DnumID":{"type":"string"},"TransDate":{"type":"string"},"TradeDate":{"type":"string"},"CustID":{"type":"string"},"CustCode":{"type":"string"},"CussID":{"type":"string"},"CussCode":{"type":"string"},"PytmID":{"type":"string"},"PytmCode":{"type":"string"},"MeroID":{"type":"string"},"CollMeroID":{"type":"string"},"RuteID":{"type":"string"},"UserID":{"type":"string"},"SourceType":{"type":"integer"},"RefTradeCode":{"type":"string"},"VoucherCode":{"type":"string"},"Comments":{"type":"string"},"ExecutionDate":{"type":"string"},"Street":{"type":"string"},"StreetNumber":{"type":"string"},"PostalCode":{"type":"string"},"Phone":{"type":"string"},"RegnDescription":{"type":"string"},"PrefDescription":{"type":"string"},"CntrDescription":{"type":"string"},"AddressDescr":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"EntryStatus":{"type":"integer"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1},"ID":{"type":"string"},"FastNumber":{"type":"string"},"TotalValue":{"type":"number"},"NetValue":{"type":"number"},"VatValue":{"type":"number"},"Lines":{"type":"array","items":{"type":"object","properties":{"ItcpID":{"type":"string"},"ItemCode":{"type":"string"},"RequestAQty":{"oneOf":[{"type":"number"},{"type":"string"}]},"WrhsID":{"type":"string"},"Price":{"type":"number"},"Disc1Pcnt":{"type":"number"},"Disc1Val":{"type":"number"},"Disc2Pcnt":{"type":"number"},"Disc2Val":{"type":"number"},"Disc3Pcnt":{"type":"number"},"Disc3Val":{"type":"number"},"Comments":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"DiscountBehaviour":{"type":"integer","minimum":0,"maximum":2},"ZeroingDiscounts":{"type":"integer","minimum":0,"maximum":3,"description":"v103: suppress discounts"},"ApplyDscnID":{"type":"string"},"ApplyDrulID":{"type":"string"},"CicoID":{"type":"string","description":"v103: item-collection (bundle) ID"},"AQty":{"type":"number"},"DisposalAQty":{"type":"number"},"PickingQty":{"type":"number"},"NetValue":{"type":"number"},"GrossValue":{"type":"number"}},"required":["ItcpID","ItemCode","RequestAQty","WrhsID","Price","Disc1Pcnt","Disc1Val","Disc2Pcnt","Disc2Val","Disc3Pcnt","Disc3Val","Comments","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","DiscountBehaviour","ZeroingDiscounts","ApplyDscnID","ApplyDrulID","CicoID","AQty","DisposalAQty","PickingQty","NetValue","GrossValue"]},"nullable":true},"Taxes":{"type":"array","items":{"type":"object","properties":{"FiacID":{"type":"string"},"FiacCode":{"type":"string"},"TrnValue":{"oneOf":[{"type":"number"},{"type":"string"}]},"ExchVatValue":{"type":"number"}},"required":["FiacID","FiacCode","ExchVatValue"]},"nullable":true}},"required":["CompID","CompCode","CmpsID","CmpsCode","WrhsID","WrhsCode","CoetID","CoetCode","DnumID","TransDate","TradeDate","CustID","CustCode","CussID","CussCode","PytmID","PytmCode","MeroID","CollMeroID","RuteID","UserID","SourceType","RefTradeCode","VoucherCode","Comments","ExecutionDate","Street","StreetNumber","PostalCode","Phone","RegnDescription","PrefDescription","CntrDescription","AddressDescr","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","EntryStatus","LockTransaction","ID","FastNumber","TotalValue","NetValue","VatValue","Lines","Taxes"]},"previewFirst":{"type":"boolean","default":false}},"required":["entry"]},"updateOrder":{"type":"object","properties":{"ID":{"type":"string"},"EntryStatus":{"type":"integer"},"Comments":{"type":"string"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1}},"required":["ID"]},"getOrderStatus":{"type":"object","properties":{"id":{"type":"string","description":"Optional specific transaction ID — omit to list all"},"revNum":{"type":"integer","minimum":0,"default":0},"custCode":{"type":"string","description":"List the orders of this customer instead (GetTransactions by CustCode, per branch). Template strings supported."},"dateFrom":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."}}},"getTransactionHistory":{"type":"object","properties":{"CustCode":{"type":"string"},"DateFrom":{"type":"string"},"DateTo":{"type":"string"}},"required":["CustCode","DateFrom","DateTo"]},"getCustomerBalance":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."}},"required":["custCode"]},"getCustomerAging":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"getFinInfoPerDrugType":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"fromDate":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."}},"required":["custCode"]},"getItemPurchases":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"itemCode":{"type":"string","minLength":1,"description":"Galaxy item code (from item search). Template strings supported."},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"compCode":{"type":"string","description":"Branch/company code. Defaults to the customer's branch."}},"required":["custCode","itemCode"]},"getCustomerKartelaLink":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"findItemsByActiveIngredient":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Active ingredient name or AtloID. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["query"]},"getInvoicePdfLinks":{"type":"object","properties":{"custCode":{"type":"string"},"custTin":{"type":"string"},"cussCode":{"type":"string"},"id":{"type":"string"},"dateFrom":{"type":"string"},"dateTo":{"type":"string"}}},"getNextRoute":{"type":"object","properties":{"custCode":{"type":"string","minLength":1}},"required":["custCode"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"POST"},"path":{"type":"string","minLength":1,"description":"Path added after the Galaxy ERP base URL, e.g. /api/crossdomain/advancedcustomviews/<guid>. Supports {{variables}}."},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Key/value properties sent as the query string. Values support {{variables}}."},"body":{"type":"string","description":"Optional raw JSON request body (supports {{variables}}). Example for an advanced custom view: {\"filters\":[{\"CompCode\":\"01\",\"CustCode\":\"{{node_1.custCode}}\"}],\"MasterDetailTree\":false}"},"apiResponse":{"type":"string","description":"Editor-only: JSON schema of the expected response (same as the apiCall node's \"API Response\"). Powers the variable picker so downstream nodes can reference individual response fields; at runtime the real response is flattened into node_N.* regardless."}},"required":["path"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["salesforceGetContact","salesforceCreateLead","salesforceLogCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"salesforceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","createLead","logCall"]},"getContact":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{variables.x}} / {{call.phoneNumber}}"},"objectType":{"type":"string","enum":["Contact","Lead"],"description":"For by=id: which SObject the Id belongs to (default Contact)."}},"required":["by","value"]},"createLead":{"type":"object","properties":{"lastName":{"type":"string","minLength":1,"description":"Lead last name — required by Salesforce. Supports templates."},"company":{"type":"string","minLength":1,"description":"Lead company — required by Salesforce. Supports templates."},"firstName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"description":{"type":"string","description":"Short summary of the request / call reason."}},"required":["lastName","company"]},"logCall":{"type":"object","properties":{"whoId":{"type":"string","minLength":1,"description":"Contact or Lead Id the call is logged against. Supports templates."},"subject":{"type":"string","minLength":1,"description":"Task subject, e.g. \"Inbound call — order status\"."},"description":{"type":"string","description":"Call notes."}},"required":["whoId","subject"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"by":"phone","value":"{{call.phoneNumber}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["guestyFindOwner","guestyFindGuest","guestyIdentifyCaller","guestyGetListings","guestyGetListing","guestyGetReservations","guestyGetReservation","guestyGetHouseRules","guestyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"guestyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["findOwner","findGuest","identifyCaller","getListings","getListing","getReservations","getReservation","getHouseRules","customRequest"]},"findOwner":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email"],"default":"phone","description":"Which field to search the owner by"},"value":{"type":"string","minLength":1,"description":"Search term (template, e.g. {{call.phone_number}})"}},"required":["value"]},"findGuest":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Guest phone to look up via their reservations (template)"}},"required":["value"]},"identifyCaller":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Caller phone (template) — matched against owners AND guests"}},"required":["value"]},"getListings":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated listing ids (template) — e.g. {{node_X.owner.listings}}"},"ownerId":{"type":"string","description":"Resolve the owner's listing ids first, then fetch them (template)"},"q":{"type":"string","description":"Free-text search across title/nickname/address (template)"}}},"getListing":{"type":"object","properties":{"id":{"type":"string","description":"Listing _id (template) — returns the full property"},"nickname":{"type":"string","description":"Listing nickname (template) — used when no id is known"},"fields":{"type":"string","description":"Space-separated field selection; omit for the full listing"}}},"getReservations":{"type":"object","properties":{"listingIds":{"type":"string","description":"Comma-separated listing ids to scope to (template)"},"listingNickname":{"type":"string","description":"Scope to a single listing by its nickname (template)"},"ownerId":{"type":"string","description":"Scope to all of an owner's listings (resolved to ids) (template)"},"guestPhone":{"type":"string","description":"Scope to a guest's reservations by their phone (template)"},"dateFrom":{"type":"string","description":"Window start: ISO date, `today`, or relative like `-7d` (template)"},"dateTo":{"type":"string","description":"Window end: ISO date, `today`, or relative like `+7d` (template)"},"windowDays":{"type":"integer","minimum":0,"description":"When dateFrom/dateTo are omitted, use today∓windowDays as the overlap window"},"status":{"type":"string","description":"Filter by reservation status (template)"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Reservation _id / confirmation id (template)"}},"required":["id"]},"getHouseRules":{"type":"object","properties":{"listingIds":{"type":"string","minLength":1,"description":"Comma-separated listing ids (template) — house rules are keyed by listing/unit-type"}},"required":["listingIds"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"GET"},"path":{"type":"string","minLength":1,"description":"Path after the base URL, e.g. /v1/reservations (template)"},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Query params (templates)"},"body":{"type":"string","description":"Raw JSON body (template) — ignored for GET"}},"required":["path"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"value":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["helpdeskCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"helpdeskConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createTicket"]},"createTicket":{"type":"object","properties":{"subject":{"type":"string","description":"Ticket subject (template, e.g. \"Call from {{call.phone_number}}\")"},"description":{"type":"string","description":"Ticket body (template, e.g. {{call.summary}})"},"requesterPhone":{"type":"string","description":"Requester phone (template, defaults to {{call.phone_number}})"},"requesterEmail":{"type":"string","description":"Requester email (template)"},"requesterName":{"type":"string","description":"Requester display name (template)"},"priority":{"type":"string","enum":["low","medium","high","urgent"],"description":"Ticket priority"}}}},"required":["operation"],"example":{"operation":"createTicket","createTicket":{"subject":"Call from {{call.phone_number}}","description":"{{call.summary}}","requesterPhone":"{{call.phone_number}}","priority":"medium"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["courierTrackVoucher"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"courierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["trackVoucher"]},"trackVoucher":{"type":"object","properties":{"courier":{"type":"string","description":"Courier to query (acs_courier, speedex, geniki_taxydromiki, elta_courier, boxnow, skroutz_lastmile, taxydema). Omit to try every connected courier."},"voucher":{"type":"string","description":"Voucher/tracking number (template, e.g. {{node_5.order.meta.voucher}})"}}}},"required":["operation"],"example":{"operation":"trackVoucher","trackVoucher":{"voucher":"{{node_5.order.meta.voucher}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["vivaCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"vivaConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createPaymentLink"]},"createPaymentLink":{"type":"object","properties":{"amount":{"type":"string","description":"Amount in EUR as a decimal (template, e.g. \"25.50\" or {{node_3.order.total}})"},"description":{"type":"string","description":"Shown to the customer on the checkout page (template)"},"customerName":{"type":"string","description":"Customer full name (template)"},"customerPhone":{"type":"string","description":"Customer phone (template, e.g. {{call.phone_number}})"},"language":{"type":"string","enum":["el","en"],"description":"Checkout page language"}}}},"required":["operation"],"example":{"operation":"createPaymentLink","createPaymentLink":{"amount":"25.50","description":"Πληρωμή παραγγελίας","customerPhone":"{{call.phone_number}}","language":"el"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createTrackedPage"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"trackedPageConfig":{"type":"object","properties":{"html":{"type":"string","description":"Page HTML (template, e.g. {{node_2.html}} from an llmCompletion node). Scripts and forms are stripped; styles are kept."},"title":{"type":"string","description":"Browser tab title (template)"},"expiresInDays":{"type":"integer","minimum":1,"maximum":365,"description":"How long the link stays open (default 30 days)"}},"required":["html"],"example":{"html":"{{node_2.html}}","title":"Η σύνοψη της κλήσης σας","expiresInDays":30}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["shopifyGetCustomer","shopifyGetOrdersByCustomer","shopifyGetOrderById","shopifySearchProducts","shopifyGetProductById","shopifySyncProductsToSkroutz"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"shopifyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","syncProductsToSkroutz"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search — mapped to vendor / product_type / handle."},"vendor":{"type":"string"},"productType":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify product id."}},"required":["productId"]},"syncProductsToSkroutz":{"type":"object","properties":{"maxRecords":{"type":"integer","minimum":0}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["soft1GetCustomer","soft1SearchItems","soft1GetCustomerBalance","soft1GetCustomerAging","soft1GetCustomerHistory","soft1CreateSalesDoc","soft1TransmitEInvoice"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"soft1Config":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","getCustomerHistory","createSalesDoc","transmitEInvoice"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerAging":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerHistory":{"type":"object","properties":{"trdr":{"type":"string"},"tin":{"type":"string"},"code":{"type":"string"},"from":{"type":"string","description":"ISO date YYYY-MM-DD"},"to":{"type":"string","description":"ISO date YYYY-MM-DD"},"limit":{"type":"integer","minimum":1,"maximum":500,"default":50}}},"createSalesDoc":{"type":"object","properties":{"trdr":{"oneOf":[{"type":"string"},{"type":"number"}]},"custCode":{"type":"string"},"series":{"oneOf":[{"type":"string"},{"type":"number"}]},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"mtrl":{"oneOf":[{"type":"string"},{"type":"number"}]},"code":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"transmit":{"type":"boolean"}},"required":["lines"]},"transmitEInvoice":{"type":"object","properties":{"key":{"type":"string","minLength":1},"template":{"type":"string","minLength":1}},"required":["key"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["exelixisSmartGetContact","exelixisSmartListCompanyContacts","exelixisSmartListSupportMembers","exelixisSmartCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"exelixisSmartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","listCompanyContacts","listSupportMembers","createTicket"]},"getContact":{"type":"object","properties":{"phone":{"type":"string","description":"Template — e.g. {{call.phone_number}}"},"afm":{"type":"string","description":"Template — e.g. {{dynamicVariables.afm}}"}}},"listCompanyContacts":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) to list contacts for"}},"required":["companyId"]},"listSupportMembers":{"type":"object","properties":{}},"createTicket":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) — required by the ERP"},"contactId":{"type":"string"},"supportMemberId":{"type":"string"},"title":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"callUrl":{"type":"string","description":"Template — defaults to {{call.call_url}}"}},"required":["companyId","title","summary"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["pylonGetCustomer","pylonSearchItems","pylonGetCustomerBalance","pylonCreateSalesOrder","pylonGetData","pylonPostData"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"pylonConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","createSalesOrder","getData","postData"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"createSalesOrder":{"type":"object","properties":{"customerTin":{"type":"string","description":"Customer TIN — supports {{dynamicVariables.x}}. Optional when rawData supplies the customer."},"seriesCode":{"type":"string"},"customerBranch":{"type":"string"},"paymentMethod":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0}},"required":["itemCode","quantity"]}},"rawData":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Advanced: a JSON object merged verbatim into the Pylon order payload, overriding the structured fields above. Use native Pylon column names, e.g. {\"Lines\":[{\"CenlItemCode\":\"GG11\",\"CenlAMeasurementQty\":2}],\"CsdcRemarks\":\"…\"}. String values support {{dynamicVariables.x}} templates. Bypasses the structured-field validation, so it must match the target Script exactly."}}},"getData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined getjsondata Script code, e.g. itemsVoiceAgent or custInfoVoice"},"extras":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Param name, e.g. @ItemCode or @phone"},"value":{"type":"string","description":"Param value — supports {{dynamicVariables.x}}"}},"required":["name","value"]},"description":"Script parameters; omit or [] for none"},"packageSize":{"type":"integer","minimum":1,"maximum":5000,"description":"Page size (default 200)"},"allPages":{"type":"boolean","description":"Walk every page until exhausted; otherwise just page 1"}},"required":["entitycode"]},"postData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined postdata Script code, e.g. orderVoice or SalesOrders"},"data":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"JSON object serialized into the postdata `data` field. Use the shape the target Script expects. String values support {{dynamicVariables.x}} templates."}},"required":["entitycode","data"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["entersoftGetCustomer","entersoftSearchItems","entersoftGetCustomerBalance","entersoftGetCustomerAging","entersoftRunPublicQuery","entersoftRunEbsService","entersoftCreateSalesDoc"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"entersoftOneConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","runPublicQuery","runEbsService","createSalesDoc"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"code":{"type":"string","minLength":1,"description":"Customer code — supports templates"}},"required":["code"]},"getCustomerAging":{"type":"object","properties":{"code":{"type":"string","minLength":1}},"required":["code"]},"runPublicQuery":{"type":"object","properties":{"publicQueryGid":{"type":"string"},"groupId":{"type":"string"},"filterId":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Param object — values may be templates"}}},"runEbsService":{"type":"object","properties":{"serviceName":{"type":"string","minLength":1},"parameters":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}}},"required":["serviceName"]},"createSalesDoc":{"type":"object","properties":{"customerGid":{"type":"string"},"customerCode":{"type":"string"},"series":{"type":"string"},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemGid":{"type":"string"},"itemCode":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"ebsServiceName":{"type":"string"}},"required":["lines"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["wooGetCustomer","wooGetOrdersByCustomer","wooGetOrderById","wooSearchProducts","wooGetProductById","wooCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"wooCommerceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric WooCommerce customer id"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string"},"sku":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric customer id (0 for guest)"},"lineItems":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"integer","minimum":0},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","lineItems"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["opencartGetCustomer","opencartGetOrdersByCustomer","opencartGetOrderById","opencartSearchProducts","opencartGetProductById","opencartCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"opencartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"manufacturer":{"type":"string","description":"Exact manufacturer filter. Optional."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Existing OpenCart customer id (for logged-in orders)."},"firstname":{"type":"string"},"lastname":{"type":"string"},"email":{"type":"string"},"telephone":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1},"comment":{"type":"string"}},"required":["products"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["magentoGetCustomer","magentoGetOrdersByCustomer","magentoGetOrderById","magentoSearchProducts","magentoGetProductById","magentoListShippingOptions"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"magentoConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","listShippingOptions"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento order increment id (receipt number) or numeric entity id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento product id."}},"required":["productId"]},"listShippingOptions":{"type":"object","properties":{"countryId":{"type":"string","description":"Destination country as ISO-2 code, e.g. \"GR\". Defaults to \"GR\"."},"postcode":{"type":"string","description":"Destination postcode. Supports templates."},"region":{"type":"string","description":"Optional region/state name."},"sku":{"type":"string","description":"Optional product SKU to price against."}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["megasoftGetCustomer","megasoftSearchProducts","megasoftGetProductByCode","megasoftListShippingMethods","megasoftListPaymentMethods","megasoftGetCustomerBalance","megasoftGetCustomerOrders","megasoftGetOrderStatus","megasoftGetCustomerPurchases","megasoftListOffers","megasoftGetItemPrice","megasoftGetProductStock","megasoftCreateOrder","megasoftCancelOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"megasoftConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchProducts","getProductByCode","listShippingMethods","listPaymentMethods","getCustomerBalance","getCustomerOrders","getOrderStatus","getCustomerPurchases","listOffers","getItemPrice","getProductStock","createOrder","cancelOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getProductByCode":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"getCustomerBalance":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."}},"required":["customerCode"]},"getCustomerOrders":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"orderNo":{"type":"string","description":"Optional order number filter. Supports templates."}},"required":["customerCode"]},"getOrderStatus":{"type":"object","properties":{"orderNo":{"type":"string","description":"Optional order number. Supports templates."},"date":{"type":"string","description":"Optional modified-since date (yyyy-MM-dd)."}}},"getCustomerPurchases":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"itemCode":{"type":"string"}},"required":["customerCode"]},"listOffers":{"type":"object","properties":{"offerId":{"type":"string"},"activeOnly":{"type":"boolean","default":true},"dateFrom":{"type":"string"}}},"getItemPrice":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["customerCode","itemCode"]},"getProductStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"createOrder":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."},"qty":{"oneOf":[{"type":"number","minimum":0},{"type":"string","minLength":1}],"description":"Quantity. Number or template string."},"comments":{"type":"string"}},"required":["customerCode","itemCode","qty"]},"cancelOrder":{"type":"object","properties":{"orderNo":{"type":"string","minLength":1,"description":"Megasoft order number. Supports templates."},"seiraPar":{"type":"string","minLength":1,"description":"Order series / parastatiko code. Supports templates."}},"required":["orderNo","seiraPar"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["gonnaOrderSearchCatalog","gonnaOrderCheckDeliveryAddress","gonnaOrderGetCustomer","gonnaOrderGetCustomerOrders","gonnaOrderGetOrderStatus","gonnaOrderCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"gonnaOrderConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["searchCatalog","checkDeliveryAddress","getCustomer","getCustomerOrders","getOrderStatus","createPaymentLink"]},"searchCatalog":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text menu search. Supports {{dynamicVariables.x}}."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"checkDeliveryAddress":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Delivery address. Supports templates."}},"required":["address"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","name"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getCustomerOrders":{"type":"object","properties":{"customerId":{"type":"string","minLength":1,"description":"Customer id. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":10,"default":5}},"required":["customerId"]},"getOrderStatus":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid. Supports templates."}},"required":["orderUuid"]},"createPaymentLink":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid to charge for. Supports templates."},"amount":{"type":"string","description":"Amount override. Leave blank to use the order total."}},"required":["orderUuid"]}},"required":["operation"],"example":{"operation":"checkDeliveryAddress","checkDeliveryAddress":{"address":"{{dynamicVariables.callerAddress}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["webhotelierCheckAvailability","webhotelierSearchBookings","webhotelierGetReservation","webhotelierGetAvailabilityCalendar","webhotelierGetRooms","webhotelierGetRates"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"webhotelierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["checkAvailability","searchBookings","getReservation","getAvailabilityCalendar","getRooms","getRates"]},"checkAvailability":{"type":"object","properties":{"checkin":{"type":"string","minLength":1,"description":"Check-in date YYYY-MM-DD. Supports templates."},"checkout":{"type":"string","minLength":1,"description":"Check-out date YYYY-MM-DD. Supports templates."},"adults":{"type":"string","minLength":1,"description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"rooms":{"type":"string","description":"Number of rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["checkin","checkout","adults"]},"searchBookings":{"type":"object","properties":{"lastName":{"type":"string","description":"Guest last name. Supports templates. Provide this or email."},"email":{"type":"string","description":"Guest email. Supports templates. Provide this or lastName."},"checkinFrom":{"type":"string","description":"Earliest check-in YYYY-MM-DD. Supports templates."},"checkinTo":{"type":"string","description":"Latest check-in YYYY-MM-DD. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getReservation":{"type":"object","properties":{"resId":{"type":"string","minLength":1,"description":"Reservation id. Supports templates."}},"required":["resId"]},"getAvailabilityCalendar":{"type":"object","properties":{"fromd":{"type":"string","minLength":1,"description":"Calendar start / check-in date YYYY-MM-DD. Supports templates."},"tod":{"type":"string","description":"Calendar end / check-out date YYYY-MM-DD (max 3 months from fromd). Supports templates."},"adults":{"type":"string","description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"room":{"type":"string","description":"Room-type code filter. Supports templates."},"rate":{"type":"string","description":"Rate id filter. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["fromd"]},"getRooms":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code for a single room. Empty = list all rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getRates":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code to scope rates. Supports templates."},"rateId":{"type":"string","description":"Rate id for a single rate (requires roomCode). Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}}},"required":["operation"],"example":{"operation":"getReservation","getReservation":{"resId":"{{dynamicVariables.resId}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hosthubIdentifyCaller","hosthubSearchReservations","hosthubGetReservation","hosthubListRentals","hosthubCheckAvailability"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hosthubConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["identifyCaller","searchReservations","getReservation","listRentals","checkAvailability"]},"identifyCaller":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"description":"Caller phone number. Supports templates (e.g. {{call.phone_number}})."}},"required":["phone"]},"searchReservations":{"type":"object","properties":{"name":{"type":"string","description":"Guest name. Supports templates. Provide one of name / phone / confirmationCode."},"phone":{"type":"string","description":"Guest phone. Supports templates."},"confirmationCode":{"type":"string","description":"Channel confirmation code. Supports templates."}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Hosthub reservation (calendar-event) id. Supports templates."}},"required":["id"]},"getRental":{"type":"object","properties":{"rentalId":{"type":"string","description":"Rental id for a single rental. Empty = list all rentals. Supports templates."}}},"checkAvailability":{"type":"object","properties":{"rentalId":{"type":"string","minLength":1,"description":"Rental id to check. Supports templates."},"from":{"type":"string","minLength":1,"description":"Start date YYYY-MM-DD. Supports templates."},"to":{"type":"string","minLength":1,"description":"End date YYYY-MM-DD. Supports templates."}},"required":["rentalId","from","to"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["prestashopGetCustomer","prestashopGetOrdersByCustomer","prestashopGetOrderById","prestashopSearchProducts","prestashopGetProductById","prestashopCreateOrder","prestashopUpdateOrderStatus"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"prestashopConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder","updateOrderStatus"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"reference":{"type":"string","description":"Exact reference (SKU) filter."},"ean13":{"type":"string","description":"Exact EAN-13 barcode filter."},"mpn":{"type":"string","description":"Exact MPN filter."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id."},"addressDeliveryId":{"oneOf":[{"type":"number"},{"type":"string"}]},"addressInvoiceId":{"oneOf":[{"type":"number"},{"type":"string"}]},"cartId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Pre-existing cart id (PrestaShop requires it)."},"currencyId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"langId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"carrierId":{"oneOf":[{"type":"number"},{"type":"string"}]},"payment":{"type":"string","minLength":1,"description":"Human-readable payment label."},"module":{"type":"string","description":"Payment module code, e.g. \"ps_checkpayment\"."},"totalPaid":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProducts":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProductsWithTax":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalShipping":{"oneOf":[{"type":"number"},{"type":"string"}]},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"product_attribute_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0},"product_name":{"type":"string"},"unit_price":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","addressDeliveryId","addressInvoiceId","cartId","carrierId","payment","totalPaid","totalProducts","totalProductsWithTax","products"]},"updateOrderStatus":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id to update."},"orderStateId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Target order_state id (numeric, store-specific)."}},"required":["orderId","orderStateId"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["airtableGetRecord","airtableSearchRecords","airtableCreateRecord","airtableUpdateRecord"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"airtableConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getRecord","searchRecords","createRecord","updateRecord"]},"getRecord":{"type":"object","properties":{"by":{"type":"string","enum":["phone","id"],"description":"Look up by mapped phone field, or by Airtable record id"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchRecords":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"createRecord":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["fields"]},"updateRecord":{"type":"object","properties":{"recordId":{"type":"string","minLength":1,"description":"Airtable record id (rec...) — supports templates"},"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["recordId","fields"]}},"required":["operation"],"example":{"operation":"getRecord","getRecord":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["jiraGetIssue","jiraSearchIssues","jiraCreateIssue","jiraUpdateIssue","jiraAddComment","jiraTransitionIssue"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"jiraConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getIssue","searchIssues","createIssue","updateIssue","addComment","transitionIssue"]},"getIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key, e.g. SUP-1234 — supports {{dynamicVariables.x}}"}},"required":["issueKey"]},"searchIssues":{"type":"object","properties":{"text":{"type":"string","description":"Free-text query — supports templates"},"jql":{"type":"string","description":"Raw JQL — overrides text when present"},"projectKey":{"type":"string","description":"Scope the search to a project key"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"createIssue":{"type":"object","properties":{"summary":{"type":"string","minLength":1,"description":"Issue summary — supports templates"},"description":{"type":"string","description":"Issue description — supports templates"},"projectKey":{"type":"string","description":"Project key — falls back to the connection default"},"issueType":{"type":"string","description":"Issue type name — falls back to the connection default"},"priority":{"type":"string","description":"Priority name (e.g. High)"},"assignee":{"type":"string","description":"Assign to a person by email or name — supports templates"}},"required":["summary"]},"updateIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key to update — supports templates"},"summary":{"type":"string","description":"New summary — supports templates"},"description":{"type":"string","description":"New description — supports templates"},"priority":{"type":"string","description":"New priority name"}},"required":["issueKey"]},"addComment":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"body":{"type":"string","minLength":1,"description":"Comment body — supports templates"}},"required":["issueKey","body"]},"transitionIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"status":{"type":"string","minLength":1,"description":"Target status name, e.g. \"In Progress\" — supports templates"}},"required":["issueKey","status"]}},"required":["operation"],"example":{"operation":"createIssue","createIssue":{"summary":"Callback requested by {{callerPhone}}","description":"{{transcript}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleChatSendMessage","googleChatSendToDefaultSpace","googleChatSendViaWebhook"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleChatConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["sendMessage","sendToDefaultSpace","sendViaWebhook"]},"sendMessage":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque Google Chat space resource (spaces/AAQA...) — set via UI picker"},"spaceDisplayName":{"type":"string","description":"Cached display name for the node summary"},"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string","description":"Optional thread key for in-thread replies"}},"required":["spaceName","body"]},"sendToDefaultSpace":{"type":"object","properties":{"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string"}},"required":["body"]},"sendViaWebhook":{"type":"object","properties":{"webhookId":{"type":"string","minLength":1,"description":"GoogleChatWebhook document id — set via UI picker"},"webhookLabel":{"type":"string","description":"Cached webhook label for the node summary"},"body":{"type":"string","minLength":1},"threadKey":{"type":"string"}},"required":["webhookId","body"]}},"required":["operation"],"example":{"operation":"sendToDefaultSpace","sendToDefaultSpace":{"body":"New lead from {{caller_name}} ({{caller_phone}})"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["searchContact"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"searchContactConfig":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Phone number to look up (template). Most reliable identifier: matched on the stored phone index, so +30/30/national forms all hit the same contact."},"email":{"type":"string","description":"Email address to look up (template). Matched case-insensitively on the main email and every listed email."},"name":{"type":"string","description":"Name to look up (template). Fuzzy: case- and accent-insensitive, Greek/Latin spellings and common inflections. May match several contacts."}},"example":{"phoneNumber":"{{call.phone_number}}","email":"","name":""}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["managedAgent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"managedAgentConfig":{"type":"object","properties":{"prompt":{"type":"string","maxLength":10000,"default":"","description":"System prompt rendered with {{transcript}}, {{call_summary}}, {{contact}}, {{extracted_entities}}"},"builtInTools":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}},"default":[],"description":"Full AgentTool configurations the LLM may call."},"apiTools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_]{1,40}$","description":"Tool name shown to the LLM; must be unique within the node"},"description":{"type":"string","minLength":10,"maxLength":500,"description":"How the LLM decides when to call this tool"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"default":[],"description":"Input schema for the LLM"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"description":"HTTP request configuration (URL, headers, method, body) — reused from function-call api runner","example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["name","description","apiConfig"]},"default":[],"description":"Inline API tools with name + description + HTTP config"},"mcpServers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the MCP server"},"description":{"type":"string","description":"Optional description"},"serverUrl":{"type":"string","format":"uri","description":"MCP server endpoint"},"transport":{"type":"string","enum":["http","sse"],"description":"Transport: http or sse"},"authType":{"type":"string","enum":["none","bearer","oauth"],"description":"Authentication mode"},"authValue":{"type":"string","description":"Token / credential value — encrypted at rest"},"enabledTools":{"type":"array","items":{"type":"string"},"description":"Whitelist of tools exposed to the LLM. Omit to expose every tool the server publishes."}},"required":["name","serverUrl","transport","authType"]},"default":[],"description":"MCP servers whose tools the LLM may call"},"models":{"type":"object","properties":{"primary":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"description":"Model used by the loop by default","example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"escalation":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Optional fallback model rerun on the whole session if primary failed/stuck. Must use the same provider as primary."}},"required":["primary"]},"limits":{"type":"object","properties":{"maxIterations":{"type":"integer","minimum":0,"maximum":50,"default":15,"description":"Hard cap on LLM turns per run. Set to 0 for no limit (cost cap still enforced)."},"maxCostUsd":{"type":"number","minimum":0,"maximum":0.5,"default":0.5,"description":"Hard cap on total cost (USD) per run. Range: 0 to 0.5."},"stuckDetection":{"type":"boolean","default":true,"description":"Bail if the model calls the same tool with the same args twice in a row"}},"default":{}},"routing":{"type":"object","properties":{"onSuccess":{"type":"string","description":"Next workflow node ID when the run completes successfully"},"onPartial":{"type":"string","description":"Next workflow node ID when the run completed but with partial results"},"onFailure":{"type":"string","description":"Next workflow node ID when the run failed"}},"default":{}},"dryRun":{"type":"boolean","default":false},"enableSubagents":{"type":"boolean","default":false},"maxConcurrentSubagents":{"type":"integer","minimum":1,"maximum":10,"default":5},"maxSubagentIterations":{"type":"integer","minimum":1,"maximum":20,"default":8},"knowledgeFileIds":{"type":"array","items":{"type":"string"},"default":[],"description":"Knowledge files the agent can search via search_knowledge. Empty list = no knowledge tool offered."},"knowledgeRerank":{"type":"object","properties":{"enabled":{"type":"boolean","default":true,"description":"Run the rerank pass. When off, top-K is taken directly from the raw retrieval score (faster but noisier context for the main agent)."},"model":{"type":"string","default":"gpt-5.6-luna","description":"Model used for the rerank pass. Should be small/cheap — its job is ranking, not reasoning. Same provider as the node's primary model."},"candidatesK":{"type":"integer","minimum":5,"maximum":200,"default":50,"description":"How many candidates to retrieve from Pinecone before reranking. Higher = better recall, more rerank tokens. 50 is the sweet spot."},"returnK":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"How many chunks to return after reranking. The main agent sees only these."}},"default":{}},"enableScraping":{"type":"boolean","default":false,"description":"When true, agent gets scrape_website(url) tool that fetches+summarises a page via ScraperService."},"workflowToolIds":{"type":"array","items":{"type":"string"},"default":[],"description":"IDs of during-call workflows the agent may call as tools. Only their duringCall triggers run; onCallEnd-triggered or managed-agent-containing workflows are rejected to prevent recursion."}},"example":{"prompt":"You are an order assistant. From the call transcript, identify the requested products, look them up, and create an order. Use the provided tools.","builtInTools":[],"apiTools":[],"mcpServers":[],"models":{"primary":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0}},"limits":{"maxIterations":15,"maxCostUsd":0.5,"stuckDetection":true},"routing":{"onSuccess":"node-success","onFailure":"node-create-ticket"},"dryRun":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"nodeType"}},"html":{"type":"string"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}]}},"required":["id","name","position","inputs","outputs"],"example":{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}},"description":"Action nodes in the flow"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"visibility":{"type":"string","enum":["private","resellerRead","resellerWrite","globalRead"],"description":"Workflow visibility and access control"},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"WorkFlowVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer; absent for workflows that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","visibility"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Handle Incoming Call","description":"Automated call handling flow","type":"flow","executeAt":"immediate","visibility":"private","trigger":{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}},"nodes":[{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"llmCompletionConfig","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"connections":[{"node":"2","input":"default","output":"default","label":"Continue"}],"files":[{"id":"file_123","filename":"welcome.wav","s3Id":"s3-file-123","displayUrl":"https://example.com/files/welcome.wav"}]}}},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}}},"dataRetentionDays":{"type":"number"},"dataRetentionPolicy":{"type":"string","enum":["none","only-phone-number","transcript","all"]},"archiveRecordingForRetrieval":{"type":"boolean"},"requirePassingTestsToPublish":{"type":"boolean"},"coreProvidersOnly":{"type":"boolean"},"skipParametersNotUsedInPrompt":{"type":"boolean","description":"When true, parameters/variables not explicitly referenced in the prompt will not be appended as additional context"},"customerInstructions":{"type":"string"},"testCasesForCustomerInstructions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id of the test case"},"scenario":{"type":"string","description":"The scenario for the test case"},"idealOutcome":{"type":"string","description":"The ideal outcome for the test case"},"actualOutcomes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id of the actual outcome"},"agentEntity":{"type":"string","enum":["systemPrompt","forwardingInstructions","endCallSettings","skipTurn"]},"existingText":{"type":"string","description":"The existing text in the system prompt that will be replaced or modified"},"newText":{"type":"string","description":"The new text to add to the system prompt"},"actionType":{"type":"string","enum":["add","remove","replace"],"description":"The type of the instruction: add, remove, replace"},"reason":{"type":"string","description":"The reason for the instruction"},"applied":{"type":"boolean","description":"Whether the instruction has been applied"},"appliedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"callId":{"type":"string","description":"The ID of the call if the source is call"},"score":{"type":"number","minimum":1,"maximum":10,"description":"1 to 10 by how close was to ideal outcome"},"outcome":{"type":"string","description":"The outcome of the test case"}},"required":["agentEntity","score","outcome"],"description":"The actual outcome of the test case"},"description":"The actual outcomes of the test case"}},"required":["scenario","idealOutcome","actualOutcomes"],"description":"The test cases for the customer instructions"}},"aiDisclosure":{"type":"object","properties":{"enabled":{"type":"boolean","description":"When true, the platform ensures the first spoken greeting names AI / a digital assistant. Default is off. Leaving this off may leave the deployer non-compliant with Article 50(1) and 50(5) EU AI Act."},"disabledAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"disabledById":{"type":"string","description":"User id who turned the overlay off"},"disabledBy":{"type":"string","description":"User name who turned the overlay off"}}},"sensitiveData":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"types":{"type":"array","items":{"type":"string","enum":["amka","afm","personal_number","id_card","passport","gemi","cy_tic","iban","card","cvv","pin","email","phone"]}},"vaultRetentionDays":{"type":"integer","minimum":1,"maximum":365}}},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"AgentVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer. Set to v1 on create/copy; absent only on legacy agents that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name"],"example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support Agent","agentType":"prompt-based","systemPrompt":"You are a helpful customer support assistant. Always be polite and provide accurate information.","dynamicVariables":[{"name":"company_name","value":"{{company_name}}"}],"language":"en-US","secondaryLanguages":[{"language":"es-ES","type":"other_agent","agentId":"agent-123e4567-e89b-12d3-a456-426614174000","enabled":true,"defaultContries":["Greece","United States"]},{"language":"fr-FR","type":"other_voice","voiceConfig":{"voiceProvider":"elevenlabs","voiceId":"21m00Tcm4TlvDq8ikWAM"},"enabled":true,"defaultContries":["Greece","United States"]}],"knowledgeFileIds":["kb-123","kb-456"],"workflowsIds":["workflow-123","workflow-456"],"tools":[{"enabled":true,"name":"send_sms","prompt":"Send an SMS to the user","type":"system"}],"allowedToCopy":"sameCompany","passwordTries":3,"externalDial":1234567890,"internalDial":"4002","knowledgeFiles":[{"id":"kb-123","name":"Product Manual","description":"Complete product documentation"}],"workflows":[{"id":"workflow-123","name":"Send Email Notification","description":"Automated email notification workflow","triggers":[{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}}],"nodes":[],"files":[],"parameters":[{"name":"company_name","value":"{{company_name}}","type":"string","required":true,"aiGenerated":true}],"dataRetentionDays":30,"dataRetentionPolicy":"all"}]},"description":"Agent responsible for the campaign"},"voipPhones":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"The display name for the VoIP phone"},"username":{"type":"string","description":"The username for SIP authentication"},"domain":{"type":"string","description":"Domain of your VoIP provider's SIP server (e.g., sip.provider.com)"},"sipProxy":{"type":"string","description":"Outbound SIP proxy / SBC host that REGISTER and signaling are routed through (e.g., vpbx-sbc.provider.com)"},"login":{"type":"string","description":"The login credentials for the VoIP provider"},"password":{"type":"string","description":"The password for SIP authentication"},"phone":{"type":"string","description":"The phone number linked with this VoIP phone"},"ipAddressInput":{"type":"string","description":"The IP address of the VoIP provider server"},"port":{"type":"number","description":"The port number for SIP communication"},"verified":{"type":"boolean","description":"Whether the VoIP phone has been verified"},"channelsAvailable":{"type":"number","description":"Number of concurrent calls this phone can handle"},"country":{"type":"string","description":"The country where the VoIP phone is registered"},"state":{"type":"string","description":"The state/province where the VoIP phone is registered"},"price":{"type":"number","description":"The cost linked with this VoIP phone"},"expirationSeconds":{"type":"string","description":"Registration expiration time in seconds"},"grantedExpirationSeconds":{"type":"string","description":"Registrar-granted REGISTER lifetime in seconds (SIP operational; refresh cadence only)"},"registered":{"type":"boolean","description":"Whether the phone is currently registered"},"voipConnectionIds":{"type":"array","items":{"type":"string"},"description":"Array of VoIP connection IDs linked with this phone"},"voipConnections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for the VoIP connection"},"dial":{"type":"number","description":"Dial number or extension assigned to this connection"},"reason":{"type":"string","description":"Internal notes or purpose description for this connection"},"connectionType":{"type":"string","enum":["User","External","Agent"],"description":"Type of destination: 'Agent', 'User', or 'External'"},"agentId":{"type":"string","description":"ID of the AI agent this connection routes to (only for Agent type connections)"},"sipDomain":{"type":"string","description":"SIP domain for this connection."},"phone":{"type":"string","description":"External phone number this connection forwards to (only for External type connections)"},"userId":{"type":"string","description":"ID of the user this connection routes to (only for User type connections)"},"start":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily start time when this connection becomes available"},"end":{"type":"object","properties":{"hours":{"type":"integer","minimum":0,"maximum":23,"description":"Hours in 24-hour format (0-23, e.g., 9 for 9 AM, 17 for 5 PM)"},"minutes":{"type":"integer","minimum":0,"maximum":59,"description":"Minutes (0-59, e.g., 0 for on the hour, 30 for half past)"}},"required":["hours","minutes"],"description":"Daily end time when this connection becomes unavailable"},"canAgentTranscribe":{"type":"boolean","description":"Whether the agent can transcribe calls to this connection"},"canAgentRecord":{"type":"boolean","description":"Whether the agent can record calls to this connection"},"canAgentAnalyze":{"type":"boolean","description":"Whether the agent can analyze calls to this connection"},"canAgentSpeakWhenAsked":{"type":"boolean","description":"Whether the agent can speak when asked during calls to this connection"},"allDay":{"type":"boolean","description":"Whether this connection is available 24/7 (ignores start/end times when true)"},"syncWithGoogle":{"type":"boolean","description":"Whether availability is synchronized with Google Calendar"},"syncWithGoogleStatus":{"type":"string","enum":["open","closed"],"description":"Google Calendar sync mode: 'open' for free time availability, 'closed' for busy time unavailability"},"messageToUser":{"type":"string","description":"Custom message or announcement played before transferring calls to this connection"},"aiGeneratedMessage":{"type":"boolean","description":"Whether transfer messages are dynamically generated by AI based on call context"},"transcription_enabled":{"type":"boolean","description":"Whether real-time transcription is enabled for calls on this connection"},"agent":{"type":"object","properties":{"id":{"type":"string","description":"Agent's unique identifier"},"name":{"type":"string","description":"Agent's display name"}},"description":"Full agent details when connectionType is 'Agent' (populated from agents database)"},"user":{"type":"object","properties":{"id":{"type":"string","description":"User's unique identifier"},"name":{"type":"string","description":"User's full name"},"email":{"type":"string","description":"User's email address"},"defaultCompanyId":{"type":"string","description":"User's default company ID"},"picture":{"type":"string","description":"User's profile picture URL"},"emailVerified":{"type":"boolean","description":"Whether the user's email has been verified"},"lastConnectedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"isConnected":{"type":"boolean","description":"Whether the user is currently online/connected"}},"description":"Full user details when connectionType is 'User' (populated from users database)"},"username":{"type":"string","description":"SIP username for direct authentication (advanced configurations only)"},"password":{"type":"string","description":"SIP password for direct authentication (advanced configurations only)"},"ipAddress":{"type":"array","items":{"type":"string"},"description":"Whitelist of allowed IP addresses for security restrictions"},"extensionRegistrationIds":{"type":"array","items":{"type":"string"},"description":"IDs of the extension registrations linked with this connection"},"extensionRegistrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"voipConnectionId":{"type":"string","description":"ID of the VoIP Connection that owns this extension (legacy)"},"phoneExtensionId":{"type":"string","description":"ID of the Phone Extension that owns this extension"},"username":{"type":"string","description":"SIP username/extension that is registered"},"contactUri":{"type":"string","description":"Full SIP Contact URI for routing calls to this extension"},"remoteAddress":{"type":"string","description":"IP address of the registered SIP client"},"clientIp":{"type":"string","description":"Public client IP when known"},"remotePort":{"type":"number","description":"Port number of the registered SIP client"},"transport":{"type":"string","enum":["udp","tcp","tls","websocket"],"description":"Transport protocol: 'udp', 'tcp', 'tls' for SIP; 'websocket' for app clients"},"registeredAt":{"type":"string","format":"date-time","description":"Timestamp when this extension was registered (ISO 8601 format)"},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp when this registration will expire (ISO 8601 format)"},"expires":{"type":"number","description":"Number of seconds until expiration (decreases over time)"},"userAgent":{"type":"string","description":"SIP User-Agent identifying the client software"},"callId":{"type":"string","description":"SIP Call-ID from the REGISTER request"},"bindingSource":{"type":"string","enum":["register","invite"],"description":"'register' = the phone sent a REGISTER and can be rung; 'invite' = stand-in written from an authenticated outbound INVITE, used only for that call's in-dialog requests and never for ringing the phone"},"consecutiveInviteFailures":{"type":"integer","description":"Liveness skip-list counter. Bumped on 5xx/timeout from fork-INVITEs, reset on 200 OK. When ≥3 and `lastInviteFailureAt` is within the last 5 minutes, the registration is skipped by routing."},"lastInviteFailureAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"voipConnection":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"agentId":{"type":"string"},"userId":{"type":"string"},"connectionType":{"type":"string"}},"description":"Legacy VoIP Connection — only populated for pre-migration rows."},"userEndpoint":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"number":{"type":"string"},"status":{"type":"string"}},"description":"Populated UserEndpoint this registration belongs to."}},"required":["id","createdAt","active","createdBy","createdById","companyId","username","contactUri","remoteAddress","remotePort","transport","registeredAt","expiresAt","expires"],"description":"Extension registration details including contact information and expiration status","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","voipConnectionId":"507f1f77bcf86cd799439011","username":"1001","contactUri":"sip:1001@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300,"userAgent":"Zoiper 5.5.10","callId":"abc123@192.168.1.100","voipConnection":{"id":"507f1f77bcf86cd799439011","name":"Customer Support","agentId":"507f1f77bcf86cd799439012","connectionType":"Agent"}}},"description":"Active SIP device registrations for this connection (virtual populate from ExtensionRegistration collection, filtered to show only non-expired registrations). Each entry represents a physical device (phone, softphone, etc.) currently registered with this extension."}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","connectionType","syncWithGoogle","syncWithGoogleStatus"],"description":"Response schema for VoIP connection including complete configuration, company metadata, and linked agent or user details","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Customer Support","dial":1,"reason":"General customer support inquiries","connectionType":"Agent","agentId":"507f1f77bcf86cd799439011","phone":"+1234567890","userId":"507f1f77bcf86cd799439012","start":{"hours":9,"minutes":0},"end":{"hours":17,"minutes":0},"canAgentTranscribe":true,"canAgentRecord":true,"canAgentAnalyze":true,"canAgentSpeakWhenAsked":false,"allDay":false,"syncWithGoogle":true,"syncWithGoogleStatus":"open","messageToUser":"Welcome to customer support!","aiGeneratedMessage":false,"agent":{"id":"507f1f77bcf86cd799439011","name":"John Doe","email":"john@example.com"},"user":{"id":"507f1f77bcf86cd799439012","name":"Jane Smith","email":"jane@example.com"},"registrations":[{"id":"507f1f77bcf86cd799439013","username":"customer_support","contactUri":"sip:customer_support@192.168.1.100:5060;transport=udp","remoteAddress":"192.168.1.100","remotePort":5060,"transport":"udp","registeredAt":"2024-01-01T10:00:00.000Z","expiresAt":"2024-01-01T10:05:00.000Z","expires":300}]}},"description":"Array of VoIP connection objects"},"allowedIp":{"type":"string","description":"Allowed IP address for this VoIP phone"},"webhookUrl":{"type":"string","description":"URL for webhook notifications"},"inactiveFrom":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"source":{"type":"string","enum":["system","custom"],"description":"Source of the VoIP phone (system or custom)"},"privateServers":{"type":"array","items":{"type":"string"},"description":"List of private server addresses"},"preferredCodec":{"type":"string","enum":["PCMA","PCMU"],"description":"Preferred audio codec for calls"},"yubotoResponseCode":{"type":"number","description":"Response code from Yuboto service"},"yubotoResponseMessage":{"type":"string","description":"Response message from Yuboto service"},"transport":{"type":"string","enum":["tls","udp","tcp"],"description":"Transport protocol for the VoIP phone"},"pickUpDelay":{"type":"integer","description":"Pick up delay in seconds"},"lastRegisteredAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"contactHost":{"type":"string","enum":["phone_id","company_id","ip"],"description":"Host advertised in our SIP Contact on cloud trunks: phone_id (default, <voipPhoneId>.sip.voicelogica.ai — routes inbound to the exact line), company_id, or ip (for proxies that mishandle a hostname in Contact). Ignored for edge/wireguard phones."},"tunnelType":{"type":"string","enum":["none","zerotier","ssh","wireguard"],"description":"Type of network tunnel to use for NAT traversal (none for direct connection, zerotier for easy setup, ssh for existing access, wireguard for performance)"},"edgeDeviceId":{"type":"string","description":"Bound edge device (deviceId) when tunnelType is wireguard"},"tunnelConnected":{"type":"boolean","description":"DEPRECATED - always false, nothing updates it. Do NOT use it to judge tunnel health: for edge phones the real WireGuard state is the bound device's `tunnelUp` (GET /admin/edge-devices), and a phone's live health is `registered` + a recent `lastRegisteredAt`."},"tunnelLastConnectedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"zerotierNetworkId":{"type":"string","description":"ZeroTier network ID to join for accessing this PBX (16-character hex string from my.zerotier.com)"},"zerotierPeerIp":{"type":"string","description":"ZeroTier virtual IP address of the PBX (e.g., 10.147.17.100)"},"sshTunnelHost":{"type":"string","description":"SSH gateway hostname/IP that can reach the PBX"},"sshTunnelPort":{"type":"integer","minimum":1,"maximum":65535,"description":"SSH gateway port (default: 22)"},"sshTunnelUsername":{"type":"string","description":"SSH username for tunnel authentication"},"sshTunnelPassword":{"type":"string","description":"SSH password (or use sshTunnelPrivateKey instead for better security)"},"sshTunnelPrivateKey":{"type":"string","description":"SSH private key for authentication (PEM format)"},"wireguardConfigPath":{"type":"string","description":"Path to WireGuard configuration file (e.g., /etc/wireguard/client-pbx.conf)"},"wireguardInterfaceName":{"type":"string","description":"WireGuard interface name (e.g., wg0)"},"allowedCallerIds":{"type":"array","items":{"type":"string"},"description":"List of additional phone numbers (DIDs) accepted for incoming calls on this trunk"},"blockInternationalCalls":{"type":"boolean","description":"When true, outbound calls and transfers on this trunk to explicitly international numbers outside Greece and Cyprus are refused"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","username","login","password","phone","ipAddressInput","port","verified","channelsAvailable","expirationSeconds","allowedIp","preferredCodec"],"description":"Response schema for VoIP phone data including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Main Office Phone","username":"sipuser123","login":"sipuser123","password":"securepassword123","phone":"+1234567890","ipAddressInput":"192.168.1.100","port":5060,"verified":true,"channelsAvailable":10,"country":"United States","state":"California","price":25.99,"expirationSeconds":"3600","registered":true,"voipConnectionIds":["conn_1","conn_2"],"allowedIp":"192.168.1.0/24","webhookUrl":"https://webhook.example.com/voip","inactiveFrom":"2024-12-31T00:00:00.000Z","source":"custom","privateServers":["192.168.1.101","192.168.1.102"],"preferredCodec":"PCMA","yubotoResponseCode":200,"yubotoResponseMessage":"Success","transport":"udp","pickUpDelay":10}},"description":"VoIP phones used for the campaign (legacy)"},"sipTrunks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Display name for this SIP trunk"},"host":{"type":"string","description":"Remote SIP host, FQDN, or IP"},"port":{"type":"integer","description":"Remote SIP port"},"transport":{"type":"string","enum":["udp","tcp","tls"],"description":"SIP transport (udp, tcp, tls)"},"sipTrunkRole":{"type":"string","enum":["provider_trunk","remote_pbx_extension","customer_pbx_trunk"],"default":"provider_trunk","description":"Business role for this SIP trunk"},"source":{"type":"string","enum":["system","custom"],"default":"custom","description":"Who provisioned this trunk: 'system' (VL free DID) or 'custom' (customer-configured)"},"provider":{"type":"string","enum":["msteams"],"description":"Managed peer preset ('msteams' = Microsoft Teams Direct Routing; peer fields are server-controlled). The customer pairs <trunkId>.sip.voicelogica.ai as the SBC in their Microsoft tenant."},"sipDomain":{"type":"string","description":"Incoming PBX trunk SIP domain slug; render as <slug>.sip.voicelogica.ai"},"supportsInbound":{"type":"boolean","default":true,"description":"Whether this provider trunk can receive inbound calls"},"supportsOutbound":{"type":"boolean","default":true,"description":"Whether this provider trunk can originate outbound calls"},"blockInternationalCalls":{"type":"boolean","description":"When true, outbound calls and transfers on this trunk to explicitly international numbers (+ / 00 prefix) outside Greece and Cyprus are refused"},"outsideLinePrefix":{"type":"string","description":"PBX outside-line digit(s) (usually '0'): stripped from inbound caller numbers, added to outbound dialed numbers"},"inboundAuthType":{"type":"string","enum":["ip_auth","registration","none"],"description":"Inbound authentication mode"},"outboundAuthType":{"type":"string","enum":["registration","ip_auth","none"],"description":"Outbound authentication mode"},"username":{"type":"string","description":"Outbound SIP username when using registration or digest"},"password":{"type":"string","description":"Outbound SIP password when using registration or digest"},"authId":{"type":"string","description":"SIP auth ID / login ID for digest authentication"},"ipWhitelist":{"type":"array","items":{"type":"string"},"description":"Trusted static source IPs or CIDR ranges for inbound SIP"},"allowedRtpIps":{"type":"array","items":{"type":"string"},"description":"Additional RTP source IPs (same port) for split-edge media"},"privateServers":{"type":"array","items":{"type":"string"},"description":"Admin-only RTP server IPs this trunk must use (empty = public pool)"},"domain":{"type":"string","description":"SIP domain / realm"},"fromDomain":{"type":"string","description":"From header domain override"},"outboundProxy":{"type":"string","description":"Outbound SIP proxy if configured"},"sipProxy":{"type":"string","description":"Alias for outboundProxy; outbound SIP proxy if configured"},"defaultPhoneNumber":{"type":"string","description":"Default phone number for this trunk; used in Refer-To for agent/PIN transfers"},"codecs":{"type":"array","items":{"type":"string","enum":["pcmu","pcma","g722","opus","telephone-event"]},"description":"Allowed codecs for this trunk"},"enabled":{"type":"boolean","description":"Whether this trunk is enabled for routing"},"allowOriginationThroughRemotePbx":{"type":"boolean","default":false,"description":"Whether remote PBX extension trunks may originate through the remote PBX"},"staticDestinationHost":{"type":"string","description":"Static PBX host/IP for IP-auth incoming PBX trunks that do not REGISTER"},"staticDestinationPort":{"type":"integer","description":"Static PBX SIP port for IP-auth incoming PBX trunks that do not REGISTER"},"maxChannels":{"type":"integer","nullable":true,"description":"Maximum concurrent calls allowed on this trunk (null = unlimited)"},"pickUpDelay":{"type":"integer","default":0,"description":"Seconds the inbound call rings before the AI answers (0 = immediately)"},"registrationExpiresSeconds":{"type":"integer","default":300,"description":"Outbound REGISTER Expires interval (60-86400s)"},"grantedRegistrationExpiresSeconds":{"type":"integer","minimum":60,"maximum":86400,"description":"Registrar 423 Min-Expires floor (SIP operational; refresh cadence / wire Expires only — user registrationExpiresSeconds is unchanged)"},"registrarBindingExpiresSeconds":{"type":"integer","minimum":60,"maximum":86400,"description":"Registrar 200 Expires header when shorter than we requested (refresh/stale only; never Contact expires countdown)"},"otherRegistrations":{"type":"array","items":{"type":"string"},"description":"Edge trunks: other devices registered on the same carrier account (host:port), per the registrar; they ring too and can answer calls first"},"registrationRefreshSeconds":{"type":"integer","minimum":1,"maximum":86400,"description":"Computed REGISTER refresh interval in seconds (read-only; not stored)"},"srtpEnabled":{"type":"boolean","default":false,"description":"Whether this trunk offers SDES SRTP on outbound INVITEs (peer can answer with matching crypto or reject with 488 for plain-RTP retry)"},"registered":{"type":"boolean","description":"Whether the trunk is currently registered (maintained by the SIP stack for registration modes)"},"lastRegisteredAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"lastResolvedPeerIp":{"type":"string","description":"Last DNS-resolved peer IP (system-written)"},"destinationType":{"type":"string","enum":["user","user_group","ai_agent","external_number","external_bridge","conference_room"],"description":"Type of destination used by the inbound route"},"destinationId":{"type":"string","description":"Default inbound destination entity id"},"webhookUrl":{"type":"string","description":"Pre-answer CALL_INBOUND webhook URL (empty string when auto-disabled after repeated delivery failures)"},"tunnelType":{"type":"string","enum":["none","wireguard"],"default":"none","description":"NAT traversal: none or wireguard edge relay"},"contactHost":{"type":"string","enum":["phone_id","company_id","ip"],"description":"Host in our SIP Contact: phone_id (default), company_id, or ip (only for a proxy that mishandles a hostname). Ignored on edge trunks."},"edgeDeviceId":{"type":"string","description":"Bound edge device id when tunnelType is wireguard"},"trunkNumberCount":{"type":"integer","default":0,"description":"Total trunk numbers attached to this trunk"},"inboundTrunkNumberCount":{"type":"integer","default":0,"description":"Trunk numbers enabled for inbound routing"},"outboundCallerIdTrunkNumberCount":{"type":"integer","default":0,"description":"Trunk numbers enabled as outbound caller IDs"},"hasInboundTrunkNumbers":{"type":"boolean","default":false,"description":"True when this trunk has at least one inbound-enabled trunk number"},"inboundPeers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"sipTrunkId":{"type":"string","description":"SIP trunk this peer registered against"},"remoteAddress":{"type":"string","description":"Source IP observed for REGISTER traffic"},"remotePort":{"type":"integer","description":"UDP/TCP/TLS source port"},"transport":{"type":"string","enum":["udp","tcp","tls"],"description":"Transport used toward the peer"},"contactUri":{"type":"string","description":"Parsed Contact URI from REGISTER"},"fromUser":{"type":"string","description":"Username from REGISTER From header when available"},"registeredAt":{"type":"string","format":"date-time","description":"When we last acknowledged a successful REGISTER"},"expiresAt":{"type":"string","format":"date-time","description":"When this binding lapses unless refreshed by the peer"}},"required":["id","createdAt","active","createdBy","createdById","companyId","sipTrunkId","remoteAddress","remotePort","transport","contactUri","registeredAt","expiresAt"],"description":"Inbound peer registration — a carrier/PBX REGISTERed toward us on this tenant trunk. Survives app restarts; cleared when REGISTER expires or unregister is observed.","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","sipTrunkId":"507f1f77bcf86cd799439022","remoteAddress":"203.0.113.44","remotePort":5060,"transport":"udp","contactUri":"sip:user@carrier.example","fromUser":"user","registeredAt":"2026-05-01T10:00:00.000Z","expiresAt":"2026-05-01T10:05:00.000Z"}},"default":[],"description":"Carrier/PBX peers currently REGISTERed toward this trunk (non-expired; from durable store)"},"guidance":{"type":"string","description":"Connection outcome explanation, returned when the trunk is created"},"connectionInfo":{"type":"array","items":{"type":"string"},"description":"Key connection values as \"label: value\" lines (SBC address, SIP domain, platform signaling IP…), returned when the trunk is created"},"nextSteps":{"type":"array","items":{"type":"string"},"description":"Kind-specific steps to finish connecting this trunk (e.g. the SBC address to pair for Teams, the SIP domain to point a PBX at), returned when the trunk is created"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","port","transport","inboundAuthType","outboundAuthType","ipWhitelist","codecs","enabled","registered"],"description":"Response schema for a SIP trunk including company metadata, audit fields, and registration state","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Carrier A","host":"sip.carrier.example","port":5060,"transport":"udp","sipTrunkRole":"provider_trunk","source":"custom","supportsInbound":true,"supportsOutbound":true,"inboundAuthType":"ip_auth","outboundAuthType":"registration","username":"user","password":"secret","ipWhitelist":["203.0.113.10"],"domain":"carrier.example","sipProxy":"vpbx-sbc.carrier.example","defaultPhoneNumber":"2192192051","codecs":["pcmu","pcma","telephone-event"],"enabled":true,"allowOriginationThroughRemotePbx":false,"registered":true,"lastRegisteredAt":"2024-01-15T09:00:00.000Z","registrationExpiresSeconds":300,"registrationRefreshSeconds":240,"destinationType":"ai_agent","destinationId":"507f1f77bcf86cd799439022","trunkNumberCount":2,"inboundTrunkNumberCount":1,"outboundCallerIdTrunkNumberCount":2,"hasInboundTrunkNumbers":true,"inboundPeers":[]}},"description":"SIP trunks used for the campaign"},"extensionNumber":{"type":"string","description":"Autogenerated 2–3 digit extension users dial to join the campaign"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name"],"example":{"id":"123","companyId":"123","name":"Q4 Sales Campaign","description":"Outbound sales campaign for Q4 revenue generation","type":"phone","status":"active","retries":3,"retryDelayMinutes":30,"maximumConcurrentCalls":10,"notificationSettings":{"enabled":true,"emails":["test@example.com"],"sendAtHour":10}}}}}},"400":{"description":"Bad request - Invalid campaign configuration","content":{"application/json":{}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"404":{"description":"Campaign not found","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Name of the campaign"},"description":{"type":"string","description":"Description of the campaign purpose and goals"},"type":{"type":"string","enum":["email","phone","sms"],"description":"Primary channel type for the campaign"},"purpose":{"type":"string","enum":["appointment","lead_qualification","event_invite","payment_collection","custom"],"description":"What the campaign is trying to achieve. Non-custom purposes seed campaign-level analysis fields and call instructions; \"custom\" (default) leaves everything as-is"},"analysisProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Campaign-level analysis fields, merged with the agent's own analysis properties for calls of this campaign (campaign wins on name collision)"},"stages":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["success"]}},"required":["name","description","nextAction"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["failed"]}},"required":["name","description","nextAction"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["other"]}},"required":["name","description","nextAction"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","description":"Machine name the AI writes after the attempt"},"displayName":{"type":"string","maxLength":120,"description":"Human label shown in the campaign editor"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"Tells the AI when this stage applies — what happened on this attempt"},"followUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage"},"nextAction":{"type":"string","enum":["retry"]},"maxRetries":{"type":"integer","minimum":1,"maximum":10,"description":"Calls on this stage (1–10), counting the call that put the lead there: 5 = up to 4 more calls, 1 = no call-back"},"retryIntervalMinutes":{"type":"integer","minimum":30,"maximum":10080,"description":"Minutes to wait before the next attempt (min 30)"}},"required":["name","description","nextAction","maxRetries","retryIntervalMinutes"]}],"discriminator":{"propertyName":"nextAction"}},"maxItems":50,"description":"Stages the AI classifies the lead into after an attempt. Finished stages (success / failed / other) close the lead; retry queues another attempt on the campaign channel"},"maxRetriesFollowUp":{"type":"object","properties":{"sms":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":500,"default":"{{lead.phone_number}}","description":"Recipients, comma-separated. Default {{lead.phone_number}}"},"body":{"type":"string","minLength":1,"maxLength":1600,"description":"SMS text"}},"required":["body"]},"email":{"type":"object","properties":{"to":{"type":"string","minLength":1,"maxLength":1000,"default":"{{lead.email}}","description":"Recipients, comma-separated. Default {{lead.email}}"},"subject":{"type":"string","minLength":1,"maxLength":300},"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["subject","body"]}},"description":"Email and/or SMS sent when the AI assigns this stage","nullable":true},"promptSection":{"type":"string","maxLength":5000,"description":"Campaign call instructions injected into the agent context at the start of every campaign call"},"appointmentServiceKeys":{"type":"array","items":{"type":"string"},"description":"Appointment campaigns only: the agent services (serviceKey, from appointmentSettings.services) this campaign books. Left empty, a lead counts as already booked when ANY upcoming calendar event carries their phone number or email. With services picked, the event must ALSO name one of them — an upcoming event with only the phone number means a different service, so the lead is still called. Ignored for other goals."},"dynamicWelcomeMessage":{"type":"boolean","description":"When true, campaign calls open with an AI-generated greeting built from the campaign goal and lead context instead of the agent's fixed welcome message. Explicit opt-in: each call is then billed with a minimum duration of 10 seconds, even if it ends unanswered"},"welcomeMessage":{"type":"string","maxLength":2000,"description":"Static opening spoken on every campaign call. Used only when dynamicWelcomeMessage is not true. Empty means the agent welcome"},"acceptDynamicVariables":{"type":"boolean","description":"When true (default if omitted), extra columns on a lead list become dynamicVariables automatically. When false, only leadColumns (plus phone) are accepted as extra lead fields"},"leadColumns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1},"type":{"type":"string","enum":["string","number","boolean","date"]}},"required":["name","type"]},"description":"Static extra lead columns when acceptDynamicVariables is false. Echoed back when the toggle is on so a later switch-off keeps the schema"},"status":{"type":"string","enum":["draft","active","paused","completed"],"description":"Current status of the campaign"},"retries":{"type":"integer","minimum":0,"maximum":10,"description":"Number of retries for the campaign (0-10; defaults to 3)"},"maximumConcurrentCalls":{"type":"number","minimum":1,"maximum":100,"description":"Maximum number of concurrent calls for the campaign (max 100)"},"retryDelayMinutes":{"type":"integer","minimum":60,"maximum":40320,"description":"Delay between retry attempts in minutes (60-40320; defaults to 240 = 4 hours)"},"schedule":{"type":"object","properties":{"days":{"type":"array","items":{"type":"object","properties":{"runFromTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23},"minutes":{"type":"number","minimum":0,"maximum":59}},"required":["hours","minutes"]},"runToTime":{"type":"object","properties":{"hours":{"type":"number","minimum":0,"maximum":23},"minutes":{"type":"number","minimum":0,"maximum":59}},"required":["hours","minutes"]},"day":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]}},"required":["runFromTime","runToTime","day"]},"description":"Days of the week and hours of the day to run the campaign"},"timeZone":{"type":"string","description":"IANA time zone, e.g. Europe/Athens"},"runEverySeconds":{"oneOf":[{"type":"number","enum":[60]},{"type":"number","enum":[300]},{"type":"number","enum":[900]},{"type":"number","enum":[1800]},{"type":"number","enum":[3600]},{"type":"number","enum":[7200]},{"type":"number","enum":[14400]},{"type":"number","enum":[28800]},{"type":"number","enum":[57600]},{"type":"number","enum":[86400]}],"description":"How often the campaign checks for leads to call, in seconds: 60, 300, 900, 1800, 3600, 7200, 14400, 28800, 57600 or 86400. Use 60 unless asked otherwise."}},"required":["timeZone"],"description":"Campaign scheduling configuration"},"agentId":{"type":"string","description":"ID of the agent responsible for the campaign"},"sipTrunkIds":{"type":"array","items":{"type":"string"},"description":"SIP trunks to dial out from. Get IDs from POST /phones/sip-trunks/query. Required to go live unless verifiedCallerId is set."},"verifiedCallerId":{"type":"string","description":"Verified phone number used as caller ID when dialing on the company trunk"},"defaultCallerIds":{"type":"array","items":{"type":"string","maxLength":20},"description":"Pool of numbers presented to the people being called, for every lead that does not carry its own callerId. Each entry must be a number the campaign SIP trunks own (the trunk default number or an inbound trunk number / DID). One entry = every lead sees that number; several = the pool is spread across leads, each lead keeping the same number across its retries. Empty = the trunk decides, as before"},"notificationSettings":{"type":"object","properties":{"enabled":{"type":"boolean"},"emails":{"type":"array","items":{"type":"string","format":"email"}},"lastSentAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"}},"description":"Notifications configuration"},"lastRunAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"allowedPhoneNumbers":{"type":"array","items":{"type":"string"},"description":"Array of phone numbers that are allowed to be called"},"defaultCampaign":{"type":"boolean","description":"Whether this is the default campaign for the company"},"processingNow":{"type":"boolean","description":"Whether the campaign is currently being processed by the job service"},"processingNowSince":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"userSettings":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":50},"maxItems":100,"default":[],"description":"Company users who may dial into this campaign and take leads"},"dispatchStrategy":{"type":"string","enum":["random","least_answered","round_robin"],"default":"random","description":"How the next lead is given to a waiting user: random, fewest leads so far this session (least_answered), or longest wait (round_robin)"},"overflowToAi":{"type":"boolean","default":true,"description":"If a live lead cannot attach to an online assigned user, send it to the campaign AI instead of hold music. Default true. Campaigns with assigned users do not dial unless at least one of those users is online."},"wrapUpSeconds":{"type":"integer","minimum":0,"maximum":300,"default":5,"description":"Seconds after a lead hangup before the user is eligible for the next lead"},"restrictDialIn":{"type":"boolean","default":true,"description":"When true, only listed userIds may dial the campaign extension"}},"description":"Human users who dial into the campaign, how leads are dispatched to them, and whether unanswered leads overflow to AI"}},"required":["name"],"description":"Request schema for creating or updating a campaign","example":{"name":"Q4 Sales Campaign","description":"Outbound sales campaign for Q4 revenue generation","type":"phone","status":"draft","agentId":"507f1f77bcf86cd799439012","sipTrunkIds":["507f1f77bcf86cd799439011"],"retries":3,"retryDelayMinutes":240,"maximumConcurrentCalls":5,"schedule":{"days":[{"day":"monday","runFromTime":{"hours":9,"minutes":0},"runToTime":{"hours":17,"minutes":0}},{"day":"tuesday","runFromTime":{"hours":9,"minutes":0},"runToTime":{"hours":17,"minutes":0}}],"timeZone":"Europe/Athens","runEverySeconds":60}}},"example":{"name":"Q4 Sales Campaign","description":"Outbound sales campaign for Q4 revenue generation","type":"phone","status":"draft","agentId":"507f1f77bcf86cd799439012","sipTrunkIds":["507f1f77bcf86cd799439011"],"retries":3,"retryDelayMinutes":240,"maximumConcurrentCalls":5,"schedule":{"days":[{"day":"monday","runFromTime":{"hours":9,"minutes":0},"runToTime":{"hours":17,"minutes":0}},{"day":"tuesday","runFromTime":{"hours":9,"minutes":0},"runToTime":{"hours":17,"minutes":0}}],"timeZone":"Europe/Athens","runEverySeconds":60}}}}},"security":[{"apiKey":[]}],"tags":["Agentic - Campaigns"]}},"/api/v1/agentic/campaign-leads":{"post":{"summary":"Add leads to a campaign for automated outbound calling","description":"Upload one or more leads to a campaign. Each lead represents a contact that will be called by the AI agent. You can upload leads in bulk by providing an array of lead objects.\n\n**Required Fields:**\n- `campaignId`: ID of the campaign to add leads to\n- `phoneNumber` OR `email`: At least one contact method is required\n\n**Optional Fields:**\n- `sipTrunkId`: SIP trunk for this lead (get from POST /phones/sip-trunks/query). Falls back to the campaign `sipTrunkIds` when omitted.\n- `status`: Initial status (default: \"pending\")\n- `dynamicVariables`: Merge tags for personalization (e.g., firstName, lastName, company)\n- `contextForAi`: Additional context to help the AI agent during the call\n- `preferredChannel`: Preferred communication channel (phone, email, sms)\n- `timeZone`: Timezone for scheduling calls at appropriate times\n- `nextActionAt`: Schedule the first call attempt for a specific time\n\n**Dynamic Variables:**\nDynamic variables are used for personalization in AI conversations. Common examples:\n- `firstName`, `lastName`: For addressing the lead by name\n- `company`: Company name for context\n- `productInterest`: Specific product or service they're interested in\n- `lastInteraction`: Notes from previous interactions\n\n**Example:** send an array of leads, then activate the campaign so it starts dialing during its schedule.\n\n**Bulk Upload:**\nSend the full list in one request. The server drops duplicate phones in the list, matches against existing campaign numbers (including additional numbers), then writes in batches.","responses":{"200":{"description":"Leads added successfully","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"count":{"type":"number"},"message":{"type":"string"}},"required":["success","count","message"]}}}},"400":{"description":"Bad request - Invalid lead data","content":{"application/json":{}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"ID of the campaign this lead belongs to"},"phoneNumber":{"type":"string","description":"Phone number for the lead contact"},"additionalPhoneNumbers":{"oneOf":[{"oneOf":[{"type":"string"},{"type":"number"}]},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}}],"description":"Additional phone numbers for multi-number calling. Accepts a number, a string, or an array. Values may be comma- or space-separated; non-digit characters are stripped automatically."},"email":{"type":"string","description":"Email address for the lead contact (will be set to null if invalid)"},"sipTrunkId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"SIP trunk to use for this lead. Get IDs from POST /phones/sip-trunks/query. Falls back to the campaign sipTrunkIds when omitted."},"callerId":{"type":"string","description":"Caller ID (e.g. phone number or SIP identity) displayed to the lead when outbound calls are placed — overrides the SIP trunk default"},"prefix":{"type":"string","description":"Prefix to use for the lead"},"status":{"type":"string","enum":["pending","running","successful","cancelled","scheduled","paused","reachedMaxRetries","failed","askedToCallBackLater","askedToNeverCallAgain"],"description":"Current status of the campaign lead"},"statusUpdatedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"nextActionAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"currentFollowUpCount":{"type":"number","minimum":0,"default":0,"description":"Number of follow-up attempts made"},"currentStage":{"type":"string","maxLength":80,"description":"Last campaign stage assigned after an attempt"},"preferredChannel":{"type":"string","enum":["email","phone","sms"],"description":"Preferred communication channel for this lead"},"timeZone":{"type":"string","description":"IANA time zone, e.g. Europe/Athens"},"dynamicVariables":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Merge tags and dynamic variables for this lead"},"analysisResults":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","properties":{}}]},"description":"Analysis results - AI-generated analysis data from call processing"},"contextForAi":{"type":"string","description":"Free-text prompt booster for AI interactions"},"viewUrl":{"type":"string","description":"URL to view the lead in the campaign"},"assignedUserId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Company user who last took this lead — later campaign dials and post-call work stay with this user"}},"required":["campaignId","additionalPhoneNumbers","status"],"description":"Request schema for creating or updating a campaign lead","example":{"campaignId":"507f1f77bcf86cd799439011","phoneNumber":"+306912345678","email":"john.doe@example.com","sipTrunkId":"507f1f77bcf86cd799439015","status":"pending","dynamicVariables":{"firstName":"John","lastName":"Doe","company":"Acme Corp"},"contextForAi":"John requested a callback about order ORD-123.","nextActionAt":"2026-09-16T09:00:00.000Z"}},"description":"Array of campaign leads to upload","example":[{"campaignId":"507f1f77bcf86cd799439011","phoneNumber":"+306912345678","email":"john.doe@example.com","sipTrunkId":"507f1f77bcf86cd799439015","status":"pending","dynamicVariables":{"firstName":"John","lastName":"Doe","company":"Acme Corp","order_id":"ORD-123"},"contextForAi":"John requested a callback about order ORD-123. Prefers Greek.","nextActionAt":"2026-09-16T09:00:00.000Z"},{"campaignId":"507f1f77bcf86cd799439011","phoneNumber":"+306987654321","email":"jane.smith@example.com","status":"pending","dynamicVariables":{"firstName":"Jane","lastName":"Smith","quote_id":"Q-567"},"contextForAi":"Follow up on the quote sent last week."}]},"example":[{"campaignId":"507f1f77bcf86cd799439011","phoneNumber":"+306912345678","email":"john.doe@example.com","sipTrunkId":"507f1f77bcf86cd799439015","status":"pending","dynamicVariables":{"firstName":"John","lastName":"Doe","company":"Acme Corp","order_id":"ORD-123"},"contextForAi":"John requested a callback about order ORD-123. Prefers Greek.","nextActionAt":"2026-09-16T09:00:00.000Z"},{"campaignId":"507f1f77bcf86cd799439011","phoneNumber":"+306987654321","email":"jane.smith@example.com","status":"pending","dynamicVariables":{"firstName":"Jane","lastName":"Smith","quote_id":"Q-567"},"contextForAi":"Follow up on the quote sent last week."}]}}},"security":[{"apiKey":[]}],"tags":["Agentic - Campaign Leads"]}},"/api/v1/agentic/campaign-results/query":{"post":{"summary":"Campaign results: KPIs, groups and per-contact outcomes","description":"Computes the campaign results from existing calls and leads at request time. Every contact is in exactly one group; `reconciled` is true when the group counts add up to the number of contacts. Rows are paginated.","responses":{"200":{"description":"Campaign results","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","description":"The company the results were computed for"},"campaignId":{"type":"string"},"campaignName":{"type":"string"},"generatedAt":{"type":"string"},"kpis":{"type":"object","properties":{"contacts":{"type":"number"},"calls":{"type":"number"},"outboundCalls":{"type":"number"},"attempts":{"type":"number","description":"Outbound dial attempts, excluding technical failures"},"callsRang":{"type":"number"},"spoke":{"type":"number","description":"Contacts who gave a real answer on at least one call"},"positive":{"type":"number"},"conversionRate":{"type":"number","description":"positive ÷ spoke (0–1)"},"reachRate":{"type":"number","description":"spoke ÷ contacts (0–1)"},"inboundCalls":{"type":"number"},"inboundContacts":{"type":"number"},"callbacksDue":{"type":"number"},"callbacksOverdue":{"type":"number"},"doNotCall":{"type":"number"},"wrongNumbers":{"type":"number"},"invalidNumbers":{"type":"number"},"complaints":{"type":"number"},"introHangUpRate":{"type":"number","description":"Share of answered outbound calls that hung up within 20 s without answering (0–1)"},"reclassifiedCalls":{"type":"number","description":"Calls whose final outcome differs from the AI verdict"}},"required":["contacts","calls","outboundCalls","attempts","callsRang","spoke","positive","conversionRate","reachRate","inboundCalls","inboundContacts","callbacksDue","callbacksOverdue","doNotCall","wrongNumbers","invalidNumbers","complaints","introHangUpRate","reclassifiedCalls"]},"groupCounts":{"type":"object","additionalProperties":{"type":"number"}},"outcomeCounts":{"type":"object","additionalProperties":{"type":"number"}},"reconciled":{"type":"boolean","description":"true when the group counts add up to the number of contacts"},"total":{"type":"number","description":"Total contact rows"},"page":{"type":"number"},"pageSize":{"type":"number"},"rows":{"type":"array","items":{"type":"object","properties":{"campaignLeadId":{"type":"string"},"phoneNumber":{"type":"string"},"name":{"type":"string"},"columns":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"group":{"type":"string","description":"call_now | callback_calendar | called_back | no_answer | not_now | exclusions | pending"},"finalOutcome":{"type":"string"},"outcomeLabel":{"type":"string"},"priority":{"type":"string"},"priorityReasons":{"type":"array","items":{"type":"string"}},"nextAction":{"type":"string"},"ruleApplied":{"type":"string"},"attempts":{"type":"number"},"inboundCount":{"type":"number"},"positiveCount":{"type":"number"},"spoke":{"type":"boolean"},"firstContactAt":{"type":"string"},"firstPositiveAt":{"type":"string"},"lastContactAt":{"type":"string"},"suggestedCallAt":{"type":"string"},"overdue":{"type":"boolean"},"humanOnly":{"type":"boolean"},"complaint":{"type":"boolean"},"reasonTags":{"type":"array","items":{"type":"string"}},"keyQuote":{"type":"string"},"callbackRequestText":{"type":"string"},"historyLine":{"type":"string"},"notes":{"type":"string"}},"required":["campaignLeadId","phoneNumber","columns","group","finalOutcome","outcomeLabel","priorityReasons","nextAction","ruleApplied","attempts","inboundCount","positiveCount","spoke","overdue","humanOnly","complaint","reasonTags","historyLine"]}}},"required":["companyId","campaignId","campaignName","generatedAt","kpis","groupCounts","outcomeCounts","reconciled","total","page","pageSize","rows"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"404":{"description":"Campaign not found in your company","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"ID of the campaign"},"language":{"type":"string","enum":["el","en"],"default":"el","description":"Language of every label, sheet name and text: \"el\" (Greek, default) or \"en\" (English)."},"page":{"type":"integer","minimum":1,"default":1,"description":"1-based page of contact rows (default 1)"},"pageSize":{"type":"integer","minimum":1,"maximum":500,"default":100,"description":"Contact rows per page, 1–500 (default 100)"}},"required":["campaignId"]}}}},"security":[{"apiKey":[]}],"tags":["Agentic - Campaign Results"]}},"/api/v1/agentic/campaign-results/report":{"post":{"summary":"Export the client campaign report (XLSX)","description":"Builds the XLSX campaign report in Greek or English, stores it privately and returns a signed download link that expires after 7 days.","responses":{"200":{"description":"Report generated","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string"},"campaignId":{"type":"string"},"fileName":{"type":"string"},"downloadUrl":{"type":"string","description":"Signed link to the XLSX file"},"expiresAt":{"type":"string","description":"When the link stops working (ISO 8601)"},"contacts":{"type":"number"},"calls":{"type":"number"},"reconciled":{"type":"boolean"}},"required":["companyId","campaignId","fileName","downloadUrl","expiresAt","contacts","calls","reconciled"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"404":{"description":"Campaign not found in your company","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"ID of the campaign"},"format":{"type":"string","enum":["xlsx"],"default":"xlsx","description":"File format. Only \"xlsx\" for now."},"language":{"type":"string","enum":["el","en"],"default":"el","description":"Language of every label, sheet name and text: \"el\" (Greek, default) or \"en\" (English)."}},"required":["campaignId"]}}}},"security":[{"apiKey":[]}],"tags":["Agentic - Campaign Results"]}},"/api/v1/agentic/work-flows/run-workflow/{id}":{"post":{"summary":"Run a workflow","responses":{"200":{"description":"Workflow run successfully","content":{"application/json":{"schema":{"type":"object","properties":{"roomId":{"type":"string","description":"WebSocket room ID to subscribe to for real-time updates (only present if useWebsocket is true)"}},"example":{"roomId":"123e4567-e89b-12d3-a456-426614174000"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"workflowId":{"type":"string","description":"Workflow ID"},"connectionId":{"type":"string","description":"Connection ID"},"payload":{"type":"object","properties":{"agent_id":{"type":"string","description":"Agent ID"},"call":{"type":"object","properties":{"company_phone_number":{"type":"string","description":"Company phone number"},"call_direction":{"type":"string","enum":["inbound","outbound"],"description":"Call direction"},"phone_number":{"type":"string","description":"Phone number"},"id":{"type":"string","description":"Call ID"}},"required":["company_phone_number","call_direction","phone_number","id"]},"keyword_input":{"type":"string","description":"Keyword input"},"dtmf_input":{"type":"number","description":"DTMF input"}},"description":"Dynamic key-value pairs for workflow execution"},"triggerType":{"type":"string","enum":["onCallStart","onCallConnect","onCallEnd","onCallTransfer","onMissedCall","onDTMFInput","onKeywordDetected","duringCall","onEmailReceived","onAPICall","onContactCreated","onCompanyCreated","onDealCreated","onTicketCreated","onPropertyChange","onWooCommerce","onYubotoPbxChannelHangup","onYubotoPbxChannelAnswer","onYubotoPbxChannelCreate","onCampaignLeadStatusChanged","onShopifyEvent","onLeadReceived"],"description":"Trigger type (includes call, messaging, API, and integration triggers)"},"triggerId":{"type":"string","description":"Trigger ID"},"workflowVersionId":{"type":"string","description":"Saved workflow version to run instead of the live workflow"},"dryRunNotifications":{"type":"boolean","description":"When true, email/SMS/Viber nodes preview resolved recipients/content without sending"}},"example":{"workflowId":"1234567890","connectionId":"1234567890","payload":{"agent_id":"1234567890","call":{"company_phone_number":"1234567890","call_direction":"inbound","phone_number":"1234567890","call_id":"1234567890","id":"1234567890"},"client_name":"Example Client"},"triggerType":"onAPICall","triggerId":"1234567890","dryRunNotifications":true}},"example":{"workflowId":"1234567890","connectionId":"1234567890","payload":{"agent_id":"1234567890","call":{"company_phone_number":"1234567890","call_direction":"inbound","phone_number":"1234567890","call_id":"1234567890","id":"1234567890"},"client_name":"Example Client"},"triggerType":"onAPICall","triggerId":"1234567890","dryRunNotifications":true}}}},"security":[{"apiKey":[]}],"tags":["Agentic - Work Flows"]}},"/api/v1/agentic/work-flows/{id}":{"get":{"summary":"Get work flow by ID","responses":{"200":{"description":"Work Flow retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"name":{"type":"string","description":"Name of the function call"},"triggers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCallStart","onCallConnect","onCallEnd","onCallTransfer","onMissedCall","onDTMFInput","onKeywordDetected","duringCall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"functionName":{"type":"string","pattern":"^[a-z0-9_]+$"},"keywords":{"type":"array","items":{"type":"string"}},"condition":{"type":"string"},"parameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"id":"param1","name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"generateMessageBeforeRunningWorkflow":{"type":"boolean"},"messageAiGenerated":{"type":"boolean"},"messagePrompt":{"type":"string"},"playWaitMusic":{"type":"boolean","description":"When true (default), play keyboard wait music while this duringCall workflow tool runs"},"useProtectedValues":{"type":"boolean","description":"onCallEnd only. When true, the non-AI steps of this workflow (API call, integrations, booking, email, SMS, sheets, conditions) get the REAL values the caller said ({{protected.afm}}, {{afm_1}}, …) when the agent protects sensitive data; AI steps (llmCompletion, aiResponse, managedAgent, googleSearch) always get placeholders. Every use is audited. Only members who may reveal sensitive data can turn it on."}},"example":{"keywords":["hello","world"],"condition":"call_started","parameters":[{"name":"call_id","value":"123"}],"playWaitMusic":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onEmailReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"emailFilters":{"type":"object","properties":{"from":{"type":"array","items":{"type":"string"}},"subject":{"type":"array","items":{"type":"string"}},"labels":{"type":"array","items":{"type":"string"}}}}},"example":{"emailFilters":{"from":["test@test.com"],"subject":["test"],"labels":["test"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onAPICall"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"payloadSchema":{"type":"object","properties":{"type":{"type":"string","enum":["object"]},"properties":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","enum":["object","array","string","number","boolean","date","enum"]},"required":{"type":"boolean","default":false},"properties":{"type":"object","additionalProperties":{"type":"object","description":"Circular reference detected"}},"items":{"type":"object","description":"Circular reference detected"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"},"minimum":{"type":"number"},"maximum":{"type":"number"},"enum":{"type":"array","items":{"type":"string"}}},"required":["type"]}},"required":{"type":"array","items":{"type":"string"}}},"required":["type","properties"],"description":"Expected payload structure"}},"example":{"payloadSchema":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^TX-[0-9]{8}$"},"amount":{"type":"number","minimum":0},"currency":{"type":"string","enum":["USD","EUR","GBP"]}},"required":["transactionId","amount","currency"]}}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onContactCreated","onCompanyCreated","onDealCreated","onTicketCreated","onPropertyChange"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","property"]},"property":{"type":"string","enum":["hs_lead_status","lifecyclestage","hubspot_owner_id","companyname","domain","dealstage","amount","closedate","closed_won_reason","closed_lost_reason","pipeline","hs_pipeline_stage","hs_due_date"]}},"example":{"resource":"contact","property":"hs_lead_status"}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onWooCommerce"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"getCustomerOrders":{"type":"boolean"},"getProductByName":{"type":"boolean"},"getProductByCode":{"type":"boolean"},"productCodeType":{"type":"string","enum":["id","sku","global_unique_id"]},"createOrder":{"type":"boolean"},"getOrderById":{"type":"boolean"},"notifyEmailsOnOrderCreation":{"type":"array","items":{"type":"string"}}},"example":{"getCustomerOrders":true,"getProductByName":true,"getProductByCode":true,"productCodeType":"id","createOrder":true,"getOrderById":true,"notifyEmailsOnOrderCreation":["test@test.com"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onYubotoPbxChannelHangup","onYubotoPbxChannelAnswer","onYubotoPbxChannelCreate"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"agentId":{"type":"string"},"allowedExtensions":{"type":"array","items":{"type":"string"}}},"example":{"username":"test","password":"test","agentId":"test","allowedExtensions":["123","456"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onCampaignLeadStatusChanged"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"campaignId":{"type":"string","description":"Campaign to watch. Omit to fire for every campaign of the company."},"statuses":{"type":"array","items":{"type":"string","enum":["successful","failed","reachedMaxRetries","askedToCallBackLater","askedToNeverCallAgain","cancelled"]},"description":"Lead statuses that fire the workflow. Omit or empty = every outcome status."},"stages":{"type":"array","items":{"type":"string"},"description":"Only fire when the lead is in one of these campaign stage names. Omit or empty = any stage."}},"example":{"campaignId":"66f1c0ffee0000000000abcd","statuses":["failed","reachedMaxRetries"],"stages":[]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onShopifyEvent"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["orders/create","orders/paid","orders/fulfilled","orders/partially_fulfilled","orders/cancelled","refunds/create","fulfillments/create","fulfillments/update"]},"minItems":1,"description":"Shopify events that start the workflow."},"financialStatuses":{"type":"array","items":{"type":"string","enum":["pending","authorized","partially_paid","paid","partially_refunded","refunded","voided"]},"description":"Only when the order payment status is one of these. Empty = any."},"fulfillmentStatuses":{"type":"array","items":{"type":"string","enum":["unfulfilled","partial","fulfilled","restocked"]},"description":"Only when the order fulfillment status is one of these. Empty = any."},"shipmentStatuses":{"type":"array","items":{"type":"string","enum":["label_printed","label_purchased","confirmed","in_transit","out_for_delivery","attempted_delivery","ready_for_pickup","delivered","failure"]},"description":"Shipment topics only: only when the carrier status is one of these. Empty = any."},"paymentGateways":{"type":"array","items":{"type":"string"},"description":"Only when a payment gateway name contains one of these (case-insensitive), e.g. \"Cash on Delivery\". Empty = any."},"tags":{"type":"array","items":{"type":"string"},"description":"Only when the order has at least one of these tags (case-insensitive). Empty = any."},"minTotal":{"type":"number","minimum":0,"description":"Only when the order total is at least this amount."},"maxTotal":{"type":"number","minimum":0,"description":"Only when the order total is at most this amount."}},"required":["topics"],"example":{"topics":["orders/create"],"financialStatuses":["pending"],"paymentGateways":["Cash on Delivery"]}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"triggerType":{"type":"string","enum":["onLeadReceived"]},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"triggerConfig":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"string","enum":["tiktok","meta","google_ads","linkedin","webhook","form"]},"description":"Only leads from these sources start the workflow. Empty = any source, including ones added later."},"formIds":{"type":"array","items":{"type":"string","minLength":1},"description":"Only these forms: our lead form ids (from lead_forms_list_forms). A platform form id or a form name also matches, for older triggers. Empty = any."},"requirePhone":{"type":"boolean","description":"Skip a lead with no phone number."},"includeTestSubmissions":{"type":"boolean","description":"Also fire for test submissions. Off by default."}},"example":{"sources":["google_ads","form"],"requirePhone":true}}},"required":["triggerType","transitions"],"example":{"triggerType":"onCallStart","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"triggerType"}}},"required":["id","name","position","outputs"],"example":{"id":1,"name":"Call Start Trigger","position":{"x":100,"y":100},"outputs":{"default":[{"node":"2","output":"default"},{"node":"3","output":"default"}]},"className":"trigger-node","data":{"triggerType":"onCallStart","triggerConfig":{"enabled":true,"triggerType":"onCallEnd","description":"Trigger when a new call starts"},"transitions":[2,3]}}},"description":"Trigger node that starts the flow"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"]},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"},"label":{"type":"string"}},"required":["node"]}}},"className":{"type":"string"},"data":{"oneOf":[{"type":"object","properties":{"nodeType":{"type":"string","enum":["emailConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"emailConfig":{"type":"object","properties":{"type":{"type":"string","enum":["send_email","create_draft_email"]},"to":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"subject":{"type":"string"},"body":{"type":"string"},"mailboxId":{"type":"string"},"sendAs":{"type":"string"},"fromSystem":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["type","to","bcc","cc","body"],"example":{"type":"send_email","to":["recipient@example.com"],"cc":["cc@example.com"],"bcc":["bcc@example.com"],"subject":"Important Message","body":"This is the email body content.","mailboxId":"mailbox-123","sendAs":"sender@company.com","fromSystem":true,"attachments":["attachment-1","attachment-2"]}}},"required":["nodeType","nodeTitle","transitions","emailConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendSms"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}}},"required":["nodeType","nodeTitle","transitions","smsConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["apiCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["nodeType","nodeTitle","transitions","apiConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["codeExecution"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"codeConfig":{"type":"object","properties":{"code":{"type":"string"},"language":{"type":"string","enum":["javascript","python","java","cpp","php","ruby"]},"properties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Properties for the code"}},"required":["code","language"],"example":{"code":"console.log(\"Hello, world!\");","language":"javascript","properties":[{"name":"name","type":"string"}]}}},"required":["nodeType","nodeTitle","transitions","codeConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleDocConfig"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleDocConfig":{"type":"object","properties":{"docName":{"type":"string"},"body":{"type":"string"},"isPublic":{"type":"boolean"}},"required":["docName","body"],"example":{"docName":"Project Plan","body":"This is the content of the Google Doc.","isPublic":true}}},"required":["nodeType","nodeTitle","transitions","googleDocConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createEvent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"eventConfig":{"type":"object","properties":{"calendarId":{"type":"string","description":"Google calendar id. Empty = the company's primary calendar."},"summary":{"type":"string","description":"Event title."},"startDateTime":{"type":"string","description":"Start, ISO 8601 (\"2026-08-12T15:00:00\") or \"YYYY-MM-DD HH:mm\"."},"endDateTime":{"type":"string","description":"End. Empty = start + durationMinutes."},"durationMinutes":{"type":"number","minimum":1,"maximum":1440,"description":"Used only when endDateTime is empty. Defaults to 30."},"description":{"type":"string"},"location":{"type":"string"},"attendees":{"type":"string","description":"Comma-separated emails."},"timeZone":{"type":"string","description":"IANA zone. Empty = the company timezone."},"isOnline":{"type":"boolean","description":"When true, Google adds a Meet link to the event."}},"required":["durationMinutes"],"example":{"summary":"Callback for {{contact_name}}","startDateTime":"{{callback_datetime}}","durationMinutes":30,"description":"Requested during call {{call_id}}","attendees":"sales@example.com","isOnline":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendPhoneCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"phoneCallConfig":{"type":"object","properties":{"phoneNumber":{"type":"string"},"systemPrompt":{"type":"string"},"numberOfTries":{"type":"number"},"voipPhoneId":{"type":"string"},"sipTrunkId":{"type":"string"},"agentId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"keepOnlyPhoneCallConfigSystemPrompt":{"type":"boolean"},"callNow":{"type":"boolean"},"scheduleAt":{"type":"string"}},"required":["phoneNumber","systemPrompt","agentId"],"example":{"phoneNumber":"+1234567890","systemPrompt":"You are a helpful customer service agent.","numberOfTries":3,"voipPhoneId":"voip-phone-123","agentId":"agent-456","fallbackToSms":true,"keepOnlyPhoneCallConfigSystemPrompt":false}}},"required":["nodeType","nodeTitle","transitions","phoneCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["llmCompletion"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"llmCompletionConfig":{"type":"object","properties":{"prompt":{"type":"string","minLength":2},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"description":"Parameters for the function call"},"completionModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}}},"required":["prompt","completionModel"],"example":{"prompt":"What is the weather in Tokyo?","parameters":[],"completionModel":{"completionProvider":"openai","model":"gpt-5-mini","temperature":0.5,"maxCompletionTokens":1000}}}},"required":["nodeType","nodeTitle","transitions","llmCompletionConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheet"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetConfig":{"type":"object","properties":{"sheetId":{"type":"string"},"sheetName":{"type":"string"},"defaultParameters":{"type":"object","properties":{"date":{"type":"boolean"},"id":{"type":"boolean"},"status":{"type":"boolean"},"endCallReason":{"type":"boolean"},"caller":{"type":"boolean"},"receiver":{"type":"boolean"},"sender":{"type":"boolean"},"recording":{"type":"boolean"},"transcript":{"type":"boolean"},"duration":{"type":"boolean"},"entityType":{"type":"boolean"}},"required":["date","id","status","endCallReason","caller","receiver","sender","recording","transcript","duration","entityType"]},"properties":{"type":"array","items":{"type":"string"}}},"required":["sheetName"]}},"required":["nodeType","nodeTitle","transitions","googleSheetConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSearchConfig":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"string"}},"excludedSites":{"type":"array","items":{"type":"string"}},"dateRestrict":{"type":"string","enum":["d1","d7","w1","m1","m6","y1","y5"]},"searchQuery":{"type":"string"},"scrapeWebsiteResults":{"type":"boolean"},"topNumberOfResults":{"type":"number"},"topNumberOfResultsToScrape":{"type":"number"},"scrapeWithSlowService":{"type":"boolean"}},"required":["searchQuery"],"example":{"searchQuery":"latest AI news","sites":["techcrunch.com","thenextweb.com"],"excludedSites":["example.com"],"dateRestrict":"d7","scrapeWebsiteResults":true,"topNumberOfResults":10,"topNumberOfResultsToScrape":5,"scrapeWithSlowService":false}}},"required":["nodeType","nodeTitle","transitions","googleSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["sendViber"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"viberConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"},"viberProviderId":{"type":"string"},"fallbackToSms":{"type":"boolean"},"smsConfig":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"from":{"type":"string"}},"required":["to","body"],"example":{"to":["+1234567890","+0987654321"],"body":"Your verification code is: 123456","from":"+15551234567"}},"viberChannelId":{"type":"string","maxLength":50}},"required":["to","body","from","viberProviderId"],"example":{"to":["+1234567890","+0987654321"],"body":"Hello! This is a Viber message from our service.","from":"CompanyBot","viberProviderId":"viber-provider-123","fallbackToSms":true}}},"required":["nodeType","nodeTitle","transitions","viberConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["switch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"switchConfig":{"type":"object","properties":{"cases":{"type":"array","items":{"type":"object","properties":{"block":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]},"transition":{"type":"string"},"transitionIndex":{"type":"number"}},"required":["block"]}}},"required":["cases"],"example":{"cases":[{"transition":"Schedule Appointment","transitionIndex":1,"block":{"operator":"and","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"schedule_appointment","fieldType":"string"}]}},{"transition":"Cancel Appointment","transitionIndex":0,"block":{"operator":"or","type":"condition","conditions":[{"operator":"eq","field":"intent","fieldValue":"cancel_appointment","fieldType":"string"}]}}]}}},"required":["nodeType","nodeTitle","transitions","switchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["if"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"ifConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","ifConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["filter"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"filterConfig":{"type":"object","properties":{"conditionBlock":{"type":"object","properties":{"operator":{"type":"string","enum":["and","or"]},"type":{"type":"string","enum":["condition","block"]},"conditions":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"field":{"type":"string"},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"fieldType":{"type":"string","enum":["string","number","boolean","date","time","array","object","enum"]}},"required":["operator","field","fieldType"]}},"blocks":{"type":"array","items":{"type":"object","description":"Circular reference detected"}}},"required":["operator","type"]}},"required":["conditionBlock"],"example":{"conditionBlock":{"operator":"and","type":"condition","conditions":[{"field":"user_response","fieldValue":"yes","fieldType":"string"}],"blocks":[{"operator":"and","type":"block","conditions":[{"field":"year","fieldValue":"2025","fieldType":"string"}]}]}}}},"required":["nodeType","nodeTitle","transitions","filterConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["loop"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"loopConfig":{"type":"object","properties":{"array":{"type":"string"}},"required":["array"],"example":{"array":"user_response"}}},"required":["nodeType","nodeTitle","transitions","loopConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["tableNode"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"tableConfig":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","maxLength":128},"type":{"type":"string","enum":["string","number","boolean"]}},"required":["key","label"]},"maxItems":50},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"maxItems":500},"filters":{"type":"array","items":{"type":"object","properties":{"column":{"type":"string","minLength":1},"op":{"type":"string","enum":["equals","notEquals","contains","gt","lt","gte","lte"]},"value":{"type":"string"}},"required":["column","op","value"]}},"mode":{"type":"string","enum":["producer","lookup"]},"keyColumn":{"type":"string"},"keyValue":{"type":"string"}},"required":["columns","rows"],"example":{"columns":[{"key":"name","label":"Name","type":"string"},{"key":"phone","label":"Phone","type":"string"}],"rows":[{"name":"Alice","phone":"+30 210 1234567"},{"name":"Bob","phone":"+30 210 7654321"}],"mode":"producer"}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hubspotContact","hubspotCompany","hubspotDeal","hubspotTicket","hubspotTask","hubspotNote","hubspotMeeting","hubspotEmail","hubspotCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hubspotConfig":{"type":"object","properties":{"resource":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"operation":{"type":"string","enum":["get","create","createOrUpdate","getOrCreate","delete","update","search","list","exists"]},"value":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"associations":{"type":"array","items":{"type":"object","properties":{"associationType":{"type":"string","enum":["contact","company","deal","ticket","call","email","task","note","meeting"]},"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["associationType","valueType","value"],"example":{"associationType":"contact","valueType":"id","value":"123"}}},"owner":{"type":"object","properties":{"valueType":{"type":"string","enum":["id","email","phone","name","domain","company","contact","HubspotFilterByType"]},"value":{"type":"string"}},"required":["valueType","value"],"example":{"valueType":"id","value":"123"}},"contactData":{"type":"object","properties":{"properties":{"type":"object","properties":{"email":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"website":{"type":"string"}},"required":[]}},"example":{"email":"test@test.com","firstname":"John","lastname":"Doe","phone":"+1234567890","company":"Test Corp","website":"https://test.com","lifecyclestage":"marketingqualifiedlead","jobtitle":"Manager","hs_additional_emails":["test2@test.com"]}},"companyData":{"type":"object","properties":{"properties":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"industry":{"type":"string"},"description":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"}},"required":[]}},"example":{"name":"Test Corp","domain":"test.com","industry":"Technology","description":"Test Description","city":"Test City","country":"Test Country","phone":"1234567890","address":"Test Address","owner":{"valueType":"email","value":"test@test.com"}}},"dealData":{"type":"object","properties":{"properties":{"type":"object","properties":{"dealname":{"type":"string"},"pipeline":{"type":"string"},"stage":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string"},"closeDate":{"type":"string"},"dealType":{"type":"string","enum":["new","existing"]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["pipeline","stage"]}},"example":{"name":"Test Deal","description":"Test Description","amount":"1000","stage":"Test Stage"}},"ticketData":{"type":"object","properties":{"properties":{"type":"object","properties":{"pipeline":{"type":"string"},"stage":{"type":"string"},"priority":{"type":"string","enum":["HIGH","MEDIUM","LOW"]},"subject":{"type":"string"},"content":{"type":"string"}},"required":["pipeline","stage","subject"]}},"example":{"pipeline":"Test Pipeline","stage":"Test Stage","priority":"HIGH","subject":"Test Subject","content":"Test Content"}},"taskData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string"},"taskType":{"type":"string"},"priority":{"type":"string"},"dueDate":{"type":"string"},"repeatType":{"type":"object","properties":{"enabled":{"type":"boolean"},"type":{"type":"string","enum":["hour","day","week","month","year"]},"value":{"type":"string"}},"example":{"enabled":true,"type":"day","value":"1"}},"reminderTime":{"oneOf":[{"type":"number"},{"type":"string"}]},"notes":{"type":"string"}},"required":["title","dueDate"]}},"example":{"associations":[{"associationType":"contact","valueType":"email","value":"contact@example.com"}],"properties":{"title":"Task Title","taskType":"TODO","priority":"MEDIUM","associations":[],"timestamp":"2021-01-01","dueDate":"2021-01-01","notes":"Task Notes","ownerEmail":"owner@example.com","status":"NOT_STARTED","reminderTime":1000}}},"noteData":{"type":"object","properties":{"properties":{"type":"object","properties":{"body":{"type":"string"}},"required":[]}}},"meetingData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title of the meeting"},"body":{"type":"string","description":"Meeting description"}}}},"required":["properties"],"example":{"properties":{"title":"Initial Project Discussion","body":"Meeting to discuss project requirements and timeline"}}},"emailData":{"type":"object","properties":{"properties":{"type":"object","properties":{"subject":{"type":"string","description":"Subject of the email"},"body":{"type":"string","description":"Email body content"}},"required":[]}},"example":{"properties":{"subject":"Project Update","body":"Here are the latest updates on the project progress."}}},"callData":{"type":"object","properties":{"properties":{"type":"object","properties":{"title":{"type":"string","description":"Title/subject of the call"},"body":{"type":"string","description":"Call description and notes"},"direction":{"type":"string","enum":["INBOUND","OUTBOUND"],"description":"Call direction"},"caller":{"type":"string","description":"Caller phone number"},"callee":{"type":"string","description":"Callee phone number"},"duration":{"type":"string","description":"Call duration in milliseconds"},"disposition":{"type":"string","enum":["9d9162e7-6cf3-4944-bf63-4dff82258764","f240bbac-87c9-4f6e-bf70-924b57d47db7","a4c4c377-d246-4b32-a13b-75a56a4cd0ff","b2cf5968-551e-4856-9783-52b3da59a7d0","73a0d17f-1163-4015-bdd5-ec830791da20","17b47fee-58de-441e-a44c-c6300d46f273"],"description":"Call disposition"},"recordingUrl":{"type":"string","description":"Call recording URL"}},"required":[]}},"example":{"properties":{"title":"Test Call","body":"Test Body"}}}},"required":["resource","operation"],"example":{"resource":"call","operation":"create","owner":{"valueType":"email","value":"test@test.com"},"properties":{"callData":{"properties":{"callTitle":"Test Call","callBody":"Test Body"}}}}}},"required":["nodeType","nodeTitle","transitions","hubspotConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleSheetSettings"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleSheetSettingsConfig":{"type":"object","properties":{"googleSheetId":{"type":"string","minLength":1,"description":"The unique identifier of the Google Sheet"},"sheetName":{"type":"string","minLength":1,"description":"The name of the specific sheet within the Google Sheet"},"operation":{"type":"string","enum":["getRow","getRows","updateRow","appendRow","deleteRow","getData"],"description":"The operation to perform on the Google Sheet (getRow, getRows, updateRow, appendRow, deleteRow)"},"filter":{"type":"object","properties":{"filterType":{"type":"string","enum":["index","columnName"]},"column":{"type":"string"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","isNull","isNotNull","isTrue","isFalse","contains","notContains","startsWith","endsWith","in","notIn","between"]},"fieldType":{"type":"string","enum":["string","phone","email","number","boolean","date","time","enum"]},"fieldValue":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["filterType","column","operator","fieldType"],"example":{"filterType":"index","column":"1","operator":"eq","fieldType":"string","fieldValue":"Chris"},"description":"Filter to apply for selecting rows, such as by index or column name"},"values":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"object","description":"Any valid JSON value"}},"required":["key","value"]},"description":"Key-value pairs for the row data"}},"required":["googleSheetId","sheetName","operation"],"example":{"googleSheetId":"123","sheetName":"Sheet1","operation":"getRow","filter":{"filterType":"index","column":"1","operator":"eq","fieldType":"number","fieldValue":"152"},"values":[{"key":"Email","value":"john.doe@example.com"},{"key":"Name","value":"John Doe"}]}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["aiResponse"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"aiResponseConfig":{"type":"object","properties":{"contextForAi":{"type":"string","description":"Context for the AI response"},"generateMessage":{"type":"boolean","description":"Whether to generate a message"},"aiGeneratedMessage":{"type":"boolean","description":"Whether the message is AI-generated"},"message":{"type":"string","description":"Message for the AI response"},"properties":{"type":"object","additionalProperties":{"type":"string"},"description":"Properties for the AI response"},"doNotRespondToCall":{"type":"boolean","description":"Whether to not respond to the call"},"forwardCallTo":{"type":"string","description":"Forward to the call. User can either input a phone number or an agent id"},"addDelayBeforePickingUp":{"type":"string","description":"Add a delay before picking up the call in seconds"}},"example":{"contextForAi":"This is a context for the AI response","generateMessage":true,"forwardCallTo":"","aiGeneratedMessage":false,"message":"Hello, this is a generated message!","properties":{},"doNotRespondToCall":false,"addDelayBeforePickingUp":"0"}}},"required":["nodeType","nodeTitle","transitions","aiResponseConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["transferCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"transferCallConfig":{"type":"object","properties":{"typeOfTransfer":{"type":"string","enum":["User","External","Agent"],"description":"Type of transfer"},"transferCallReason":{"type":"string"},"agentId":{"type":"string"},"externalNumber":{"type":"string"},"generateMessage":{"type":"boolean"},"aiGeneratedMessage":{"type":"boolean"},"message":{"type":"string"},"transferMode":{"type":"string","enum":["blind","warm","attended"]},"blindTransfer":{"type":"boolean"},"showCallerId":{"type":"boolean"},"announceTransferReason":{"type":"boolean"}},"required":["typeOfTransfer"],"example":{"agentId":"507f1f77bcf86cd799439011"}}},"required":["nodeType","nodeTitle","transitions","transferCallConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["afmSearch"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"afmSearchConfig":{"type":"object","properties":{"afm":{"type":"string","description":"AFM of company"}},"required":["afm"],"example":{"afm":"8022188180"}}},"required":["nodeType","nodeTitle","transitions","afmSearchConfig"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["galaxyGetCustomer","galaxySearchItems","galaxyCheckStock","galaxyGetPrice","galaxyCalculateOrder","galaxyPlaceOrder","galaxyUpdateOrder","galaxyGetOrderStatus","galaxyGetTransactionHistory","galaxyGetCustomerBalance","galaxyGetCustomerAging","galaxyGetFinInfoPerDrugType","galaxyGetItemPurchases","galaxyGetCustomerKartelaLink","galaxyFindItemsByActiveIngredient","galaxyGetInvoicePdfLinks","galaxyGetNextRoute","galaxyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"galaxyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","checkStock","getPrice","calcLines","calculateOrder","placeOrder","updateOrder","getOrderStatus","getTransactionHistory","getCustomerBalance","getCustomerAging","getFinInfoPerDrugType","getItemPurchases","getCustomerKartelaLink","findItemsByActiveIngredient","getInvoicePdfLinks","getNextRoute","customRequest"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","custCode"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query (supports {{variables.x}})"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"checkStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"wrhsCode":{"type":"string","description":"Overrides the company default warehouse"}},"required":["itemCode"]},"getPrice":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"}},"required":["EntryType","Date","Quantity"]},"calcLines":{"type":"object","properties":{"ItemCode":{"type":"string"},"ItcpID":{"type":"string"},"CustCode":{"type":"string"},"CustID":{"type":"string"},"EntryType":{"type":"string"},"Date":{"type":"string"},"Quantity":{"type":"number"},"WrhsCode":{"type":"string"},"AlterCode":{"type":"string"},"Barcode":{"type":"string"}},"required":["EntryType","Date","Quantity","WrhsCode"]},"placeOrder":{"type":"object","properties":{"entry":{"type":"object","properties":{"CompID":{"type":"string"},"CompCode":{"type":"string"},"CmpsID":{"type":"string"},"CmpsCode":{"type":"string"},"WrhsID":{"type":"string"},"WrhsCode":{"type":"string"},"CoetID":{"type":"string"},"CoetCode":{"type":"string"},"DnumID":{"type":"string"},"TransDate":{"type":"string"},"TradeDate":{"type":"string"},"CustID":{"type":"string"},"CustCode":{"type":"string"},"CussID":{"type":"string"},"CussCode":{"type":"string"},"PytmID":{"type":"string"},"PytmCode":{"type":"string"},"MeroID":{"type":"string"},"CollMeroID":{"type":"string"},"RuteID":{"type":"string"},"UserID":{"type":"string"},"SourceType":{"type":"integer"},"RefTradeCode":{"type":"string"},"VoucherCode":{"type":"string"},"Comments":{"type":"string"},"ExecutionDate":{"type":"string"},"Street":{"type":"string"},"StreetNumber":{"type":"string"},"PostalCode":{"type":"string"},"Phone":{"type":"string"},"RegnDescription":{"type":"string"},"PrefDescription":{"type":"string"},"CntrDescription":{"type":"string"},"AddressDescr":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"EntryStatus":{"type":"integer"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1},"ID":{"type":"string"},"FastNumber":{"type":"string"},"TotalValue":{"type":"number"},"NetValue":{"type":"number"},"VatValue":{"type":"number"},"Lines":{"type":"array","items":{"type":"object","properties":{"ItcpID":{"type":"string"},"ItemCode":{"type":"string"},"RequestAQty":{"oneOf":[{"type":"number"},{"type":"string"}]},"WrhsID":{"type":"string"},"Price":{"type":"number"},"Disc1Pcnt":{"type":"number"},"Disc1Val":{"type":"number"},"Disc2Pcnt":{"type":"number"},"Disc2Val":{"type":"number"},"Disc3Pcnt":{"type":"number"},"Disc3Val":{"type":"number"},"Comments":{"type":"string"},"StringField1":{"type":"string"},"StringField2":{"type":"string"},"StringField3":{"type":"string"},"StringField4":{"type":"string"},"StringField5":{"type":"string"},"StringField6":{"type":"string"},"StringField7":{"type":"string"},"FloatField1":{"type":"number"},"FloatField2":{"type":"number"},"FloatField3":{"type":"number"},"FloatField4":{"type":"number"},"FloatField5":{"type":"number"},"FloatField6":{"type":"number"},"FloatField7":{"type":"number"},"DateField1":{"type":"string"},"DateField2":{"type":"string"},"DateField3":{"type":"string"},"DateField4":{"type":"string"},"BooleanField1":{"type":"integer","minimum":0,"maximum":1},"BooleanField2":{"type":"integer","minimum":0,"maximum":1},"BooleanField3":{"type":"integer","minimum":0,"maximum":1},"BooleanField4":{"type":"integer","minimum":0,"maximum":1},"LookupField1":{"type":"string"},"LookupField2":{"type":"string"},"LookupField3":{"type":"string"},"LookupField4":{"type":"string"},"LookupField5":{"type":"string"},"LookupField6":{"type":"string"},"LookupField7":{"type":"string"},"DiscountBehaviour":{"type":"integer","minimum":0,"maximum":2},"ZeroingDiscounts":{"type":"integer","minimum":0,"maximum":3,"description":"v103: suppress discounts"},"ApplyDscnID":{"type":"string"},"ApplyDrulID":{"type":"string"},"CicoID":{"type":"string","description":"v103: item-collection (bundle) ID"},"AQty":{"type":"number"},"DisposalAQty":{"type":"number"},"PickingQty":{"type":"number"},"NetValue":{"type":"number"},"GrossValue":{"type":"number"}},"required":["ItcpID","ItemCode","RequestAQty","WrhsID","Price","Disc1Pcnt","Disc1Val","Disc2Pcnt","Disc2Val","Disc3Pcnt","Disc3Val","Comments","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","DiscountBehaviour","ZeroingDiscounts","ApplyDscnID","ApplyDrulID","CicoID","AQty","DisposalAQty","PickingQty","NetValue","GrossValue"]},"nullable":true},"Taxes":{"type":"array","items":{"type":"object","properties":{"FiacID":{"type":"string"},"FiacCode":{"type":"string"},"TrnValue":{"oneOf":[{"type":"number"},{"type":"string"}]},"ExchVatValue":{"type":"number"}},"required":["FiacID","FiacCode","ExchVatValue"]},"nullable":true}},"required":["CompID","CompCode","CmpsID","CmpsCode","WrhsID","WrhsCode","CoetID","CoetCode","DnumID","TransDate","TradeDate","CustID","CustCode","CussID","CussCode","PytmID","PytmCode","MeroID","CollMeroID","RuteID","UserID","SourceType","RefTradeCode","VoucherCode","Comments","ExecutionDate","Street","StreetNumber","PostalCode","Phone","RegnDescription","PrefDescription","CntrDescription","AddressDescr","StringField1","StringField2","StringField3","StringField4","StringField5","StringField6","StringField7","FloatField1","FloatField2","FloatField3","FloatField4","FloatField5","FloatField6","FloatField7","DateField1","DateField2","DateField3","DateField4","BooleanField1","BooleanField2","BooleanField3","BooleanField4","LookupField1","LookupField2","LookupField3","LookupField4","LookupField5","LookupField6","LookupField7","EntryStatus","LockTransaction","ID","FastNumber","TotalValue","NetValue","VatValue","Lines","Taxes"]},"previewFirst":{"type":"boolean","default":false}},"required":["entry"]},"updateOrder":{"type":"object","properties":{"ID":{"type":"string"},"EntryStatus":{"type":"integer"},"Comments":{"type":"string"},"LockTransaction":{"type":"integer","minimum":0,"maximum":1}},"required":["ID"]},"getOrderStatus":{"type":"object","properties":{"id":{"type":"string","description":"Optional specific transaction ID — omit to list all"},"revNum":{"type":"integer","minimum":0,"default":0},"custCode":{"type":"string","description":"List the orders of this customer instead (GetTransactions by CustCode, per branch). Template strings supported."},"dateFrom":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"With custCode: ISO date YYYY-MM-DD. Defaults to today."}}},"getTransactionHistory":{"type":"object","properties":{"CustCode":{"type":"string"},"DateFrom":{"type":"string"},"DateTo":{"type":"string"}},"required":["CustCode","DateFrom","DateTo"]},"getCustomerBalance":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."}},"required":["custCode"]},"getCustomerAging":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"getFinInfoPerDrugType":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"fromDate":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."}},"required":["custCode"]},"getItemPurchases":{"type":"object","properties":{"custCode":{"type":"string","minLength":1,"description":"Galaxy customer code. Template strings supported."},"itemCode":{"type":"string","minLength":1,"description":"Galaxy item code (from item search). Template strings supported."},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."},"compCode":{"type":"string","description":"Branch/company code. Defaults to the customer's branch."}},"required":["custCode","itemCode"]},"getCustomerKartelaLink":{"type":"object","properties":{"custCode":{"type":"string","minLength":1},"dateFrom":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to start of current year."},"dateTo":{"type":"string","description":"ISO date YYYY-MM-DD. Defaults to today."}},"required":["custCode"]},"findItemsByActiveIngredient":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Active ingredient name or AtloID. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}},"required":["query"]},"getInvoicePdfLinks":{"type":"object","properties":{"custCode":{"type":"string"},"custTin":{"type":"string"},"cussCode":{"type":"string"},"id":{"type":"string"},"dateFrom":{"type":"string"},"dateTo":{"type":"string"}}},"getNextRoute":{"type":"object","properties":{"custCode":{"type":"string","minLength":1}},"required":["custCode"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"POST"},"path":{"type":"string","minLength":1,"description":"Path added after the Galaxy ERP base URL, e.g. /api/crossdomain/advancedcustomviews/<guid>. Supports {{variables}}."},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Key/value properties sent as the query string. Values support {{variables}}."},"body":{"type":"string","description":"Optional raw JSON request body (supports {{variables}}). Example for an advanced custom view: {\"filters\":[{\"CompCode\":\"01\",\"CustCode\":\"{{node_1.custCode}}\"}],\"MasterDetailTree\":false}"},"apiResponse":{"type":"string","description":"Editor-only: JSON schema of the expected response (same as the apiCall node's \"API Response\"). Powers the variable picker so downstream nodes can reference individual response fields; at runtime the real response is flattened into node_N.* regardless."}},"required":["path"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["salesforceGetContact","salesforceCreateLead","salesforceLogCall"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"salesforceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","createLead","logCall"]},"getContact":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{variables.x}} / {{call.phoneNumber}}"},"objectType":{"type":"string","enum":["Contact","Lead"],"description":"For by=id: which SObject the Id belongs to (default Contact)."}},"required":["by","value"]},"createLead":{"type":"object","properties":{"lastName":{"type":"string","minLength":1,"description":"Lead last name — required by Salesforce. Supports templates."},"company":{"type":"string","minLength":1,"description":"Lead company — required by Salesforce. Supports templates."},"firstName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"description":{"type":"string","description":"Short summary of the request / call reason."}},"required":["lastName","company"]},"logCall":{"type":"object","properties":{"whoId":{"type":"string","minLength":1,"description":"Contact or Lead Id the call is logged against. Supports templates."},"subject":{"type":"string","minLength":1,"description":"Task subject, e.g. \"Inbound call — order status\"."},"description":{"type":"string","description":"Call notes."}},"required":["whoId","subject"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"by":"phone","value":"{{call.phoneNumber}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["guestyFindOwner","guestyFindGuest","guestyIdentifyCaller","guestyGetListings","guestyGetListing","guestyGetReservations","guestyGetReservation","guestyGetHouseRules","guestyCustomRequest"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"guestyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["findOwner","findGuest","identifyCaller","getListings","getListing","getReservations","getReservation","getHouseRules","customRequest"]},"findOwner":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email"],"default":"phone","description":"Which field to search the owner by"},"value":{"type":"string","minLength":1,"description":"Search term (template, e.g. {{call.phone_number}})"}},"required":["value"]},"findGuest":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Guest phone to look up via their reservations (template)"}},"required":["value"]},"identifyCaller":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"Caller phone (template) — matched against owners AND guests"}},"required":["value"]},"getListings":{"type":"object","properties":{"ids":{"type":"string","description":"Comma-separated listing ids (template) — e.g. {{node_X.owner.listings}}"},"ownerId":{"type":"string","description":"Resolve the owner's listing ids first, then fetch them (template)"},"q":{"type":"string","description":"Free-text search across title/nickname/address (template)"}}},"getListing":{"type":"object","properties":{"id":{"type":"string","description":"Listing _id (template) — returns the full property"},"nickname":{"type":"string","description":"Listing nickname (template) — used when no id is known"},"fields":{"type":"string","description":"Space-separated field selection; omit for the full listing"}}},"getReservations":{"type":"object","properties":{"listingIds":{"type":"string","description":"Comma-separated listing ids to scope to (template)"},"listingNickname":{"type":"string","description":"Scope to a single listing by its nickname (template)"},"ownerId":{"type":"string","description":"Scope to all of an owner's listings (resolved to ids) (template)"},"guestPhone":{"type":"string","description":"Scope to a guest's reservations by their phone (template)"},"dateFrom":{"type":"string","description":"Window start: ISO date, `today`, or relative like `-7d` (template)"},"dateTo":{"type":"string","description":"Window end: ISO date, `today`, or relative like `+7d` (template)"},"windowDays":{"type":"integer","minimum":0,"description":"When dateFrom/dateTo are omitted, use today∓windowDays as the overlap window"},"status":{"type":"string","description":"Filter by reservation status (template)"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Reservation _id / confirmation id (template)"}},"required":["id"]},"getHouseRules":{"type":"object","properties":{"listingIds":{"type":"string","minLength":1,"description":"Comma-separated listing ids (template) — house rules are keyed by listing/unit-type"}},"required":["listingIds"]},"customRequest":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"default":"GET"},"path":{"type":"string","minLength":1,"description":"Path after the base URL, e.g. /v1/reservations (template)"},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Query params (templates)"},"body":{"type":"string","description":"Raw JSON body (template) — ignored for GET"}},"required":["path"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"value":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["helpdeskCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"helpdeskConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createTicket"]},"createTicket":{"type":"object","properties":{"subject":{"type":"string","description":"Ticket subject (template, e.g. \"Call from {{call.phone_number}}\")"},"description":{"type":"string","description":"Ticket body (template, e.g. {{call.summary}})"},"requesterPhone":{"type":"string","description":"Requester phone (template, defaults to {{call.phone_number}})"},"requesterEmail":{"type":"string","description":"Requester email (template)"},"requesterName":{"type":"string","description":"Requester display name (template)"},"priority":{"type":"string","enum":["low","medium","high","urgent"],"description":"Ticket priority"}}}},"required":["operation"],"example":{"operation":"createTicket","createTicket":{"subject":"Call from {{call.phone_number}}","description":"{{call.summary}}","requesterPhone":"{{call.phone_number}}","priority":"medium"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["courierTrackVoucher"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"courierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["trackVoucher"]},"trackVoucher":{"type":"object","properties":{"courier":{"type":"string","description":"Courier to query (acs_courier, speedex, geniki_taxydromiki, elta_courier, boxnow, skroutz_lastmile, taxydema). Omit to try every connected courier."},"voucher":{"type":"string","description":"Voucher/tracking number (template, e.g. {{node_5.order.meta.voucher}})"}}}},"required":["operation"],"example":{"operation":"trackVoucher","trackVoucher":{"voucher":"{{node_5.order.meta.voucher}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["vivaCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"vivaConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["createPaymentLink"]},"createPaymentLink":{"type":"object","properties":{"amount":{"type":"string","description":"Amount in EUR as a decimal (template, e.g. \"25.50\" or {{node_3.order.total}})"},"description":{"type":"string","description":"Shown to the customer on the checkout page (template)"},"customerName":{"type":"string","description":"Customer full name (template)"},"customerPhone":{"type":"string","description":"Customer phone (template, e.g. {{call.phone_number}})"},"language":{"type":"string","enum":["el","en"],"description":"Checkout page language"}}}},"required":["operation"],"example":{"operation":"createPaymentLink","createPaymentLink":{"amount":"25.50","description":"Πληρωμή παραγγελίας","customerPhone":"{{call.phone_number}}","language":"el"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["createTrackedPage"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"trackedPageConfig":{"type":"object","properties":{"html":{"type":"string","description":"Page HTML (template, e.g. {{node_2.html}} from an llmCompletion node). Scripts and forms are stripped; styles are kept."},"title":{"type":"string","description":"Browser tab title (template)"},"expiresInDays":{"type":"integer","minimum":1,"maximum":365,"description":"How long the link stays open (default 30 days)"}},"required":["html"],"example":{"html":"{{node_2.html}}","title":"Η σύνοψη της κλήσης σας","expiresInDays":30}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["shopifyGetCustomer","shopifyGetOrdersByCustomer","shopifyGetOrderById","shopifySearchProducts","shopifyGetProductById","shopifySyncProductsToSkroutz"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"shopifyConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","syncProductsToSkroutz"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search — mapped to vendor / product_type / handle."},"vendor":{"type":"string"},"productType":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric Shopify product id."}},"required":["productId"]},"syncProductsToSkroutz":{"type":"object","properties":{"maxRecords":{"type":"integer","minimum":0}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["soft1GetCustomer","soft1SearchItems","soft1GetCustomerBalance","soft1GetCustomerAging","soft1GetCustomerHistory","soft1CreateSalesDoc","soft1TransmitEInvoice"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"soft1Config":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","getCustomerHistory","createSalesDoc","transmitEInvoice"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerAging":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"getCustomerHistory":{"type":"object","properties":{"trdr":{"type":"string"},"tin":{"type":"string"},"code":{"type":"string"},"from":{"type":"string","description":"ISO date YYYY-MM-DD"},"to":{"type":"string","description":"ISO date YYYY-MM-DD"},"limit":{"type":"integer","minimum":1,"maximum":500,"default":50}}},"createSalesDoc":{"type":"object","properties":{"trdr":{"oneOf":[{"type":"string"},{"type":"number"}]},"custCode":{"type":"string"},"series":{"oneOf":[{"type":"string"},{"type":"number"}]},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"mtrl":{"oneOf":[{"type":"string"},{"type":"number"}]},"code":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"transmit":{"type":"boolean"}},"required":["lines"]},"transmitEInvoice":{"type":"object","properties":{"key":{"type":"string","minLength":1},"template":{"type":"string","minLength":1}},"required":["key"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["exelixisSmartGetContact","exelixisSmartListCompanyContacts","exelixisSmartListSupportMembers","exelixisSmartCreateTicket"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"exelixisSmartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getContact","listCompanyContacts","listSupportMembers","createTicket"]},"getContact":{"type":"object","properties":{"phone":{"type":"string","description":"Template — e.g. {{call.phone_number}}"},"afm":{"type":"string","description":"Template — e.g. {{dynamicVariables.afm}}"}}},"listCompanyContacts":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) to list contacts for"}},"required":["companyId"]},"listSupportMembers":{"type":"object","properties":{}},"createTicket":{"type":"object","properties":{"companyId":{"type":"string","minLength":1,"description":"Smart company_id (template) — required by the ERP"},"contactId":{"type":"string"},"supportMemberId":{"type":"string"},"title":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"callUrl":{"type":"string","description":"Template — defaults to {{call.call_url}}"}},"required":["companyId","title","summary"]}},"required":["operation"],"example":{"operation":"getContact","getContact":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["pylonGetCustomer","pylonSearchItems","pylonGetCustomerBalance","pylonCreateSalesOrder","pylonGetData","pylonPostData"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"pylonConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","createSalesOrder","getData","postData"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search query"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"tin":{"type":"string"},"code":{"type":"string"}}},"createSalesOrder":{"type":"object","properties":{"customerTin":{"type":"string","description":"Customer TIN — supports {{dynamicVariables.x}}. Optional when rawData supplies the customer."},"seriesCode":{"type":"string"},"customerBranch":{"type":"string"},"paymentMethod":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0}},"required":["itemCode","quantity"]}},"rawData":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Advanced: a JSON object merged verbatim into the Pylon order payload, overriding the structured fields above. Use native Pylon column names, e.g. {\"Lines\":[{\"CenlItemCode\":\"GG11\",\"CenlAMeasurementQty\":2}],\"CsdcRemarks\":\"…\"}. String values support {{dynamicVariables.x}} templates. Bypasses the structured-field validation, so it must match the target Script exactly."}}},"getData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined getjsondata Script code, e.g. itemsVoiceAgent or custInfoVoice"},"extras":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Param name, e.g. @ItemCode or @phone"},"value":{"type":"string","description":"Param value — supports {{dynamicVariables.x}}"}},"required":["name","value"]},"description":"Script parameters; omit or [] for none"},"packageSize":{"type":"integer","minimum":1,"maximum":5000,"description":"Page size (default 200)"},"allPages":{"type":"boolean","description":"Walk every page until exhausted; otherwise just page 1"}},"required":["entitycode"]},"postData":{"type":"object","properties":{"entitycode":{"type":"string","minLength":1,"description":"Operator-defined postdata Script code, e.g. orderVoice or SalesOrders"},"data":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"JSON object serialized into the postdata `data` field. Use the shape the target Script expects. String values support {{dynamicVariables.x}} templates."}},"required":["entitycode","data"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["entersoftGetCustomer","entersoftSearchItems","entersoftGetCustomerBalance","entersoftGetCustomerAging","entersoftRunPublicQuery","entersoftRunEbsService","entersoftCreateSalesDoc"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"entersoftOneConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchItems","getCustomerBalance","getCustomerAging","runPublicQuery","runEbsService","createSalesDoc"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","tin","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchItems":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getCustomerBalance":{"type":"object","properties":{"code":{"type":"string","minLength":1,"description":"Customer code — supports templates"}},"required":["code"]},"getCustomerAging":{"type":"object","properties":{"code":{"type":"string","minLength":1}},"required":["code"]},"runPublicQuery":{"type":"object","properties":{"publicQueryGid":{"type":"string"},"groupId":{"type":"string"},"filterId":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Param object — values may be templates"}}},"runEbsService":{"type":"object","properties":{"serviceName":{"type":"string","minLength":1},"parameters":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}}},"required":["serviceName"]},"createSalesDoc":{"type":"object","properties":{"customerGid":{"type":"string"},"customerCode":{"type":"string"},"series":{"type":"string"},"comments":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"itemGid":{"type":"string"},"itemCode":{"type":"string"},"quantity":{"type":"number","minimum":0},"price":{"type":"number","minimum":0},"discount":{"type":"number","minimum":0,"maximum":100},"comments":{"type":"string"}},"required":["quantity"]},"minItems":1},"ebsServiceName":{"type":"string"}},"required":["lines"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["wooGetCustomer","wooGetOrdersByCustomer","wooGetOrderById","wooSearchProducts","wooGetProductById","wooCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"wooCommerceConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric WooCommerce customer id"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string"},"sku":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Numeric customer id (0 for guest)"},"lineItems":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"integer","minimum":0},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","lineItems"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["opencartGetCustomer","opencartGetOrdersByCustomer","opencartGetOrderById","opencartSearchProducts","opencartGetProductById","opencartCreateOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"opencartConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"manufacturer":{"type":"string","description":"Exact manufacturer filter. Optional."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"OpenCart product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Existing OpenCart customer id (for logged-in orders)."},"firstname":{"type":"string"},"lastname":{"type":"string"},"email":{"type":"string"},"telephone":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0}},"required":["product_id","quantity"]},"minItems":1},"comment":{"type":"string"}},"required":["products"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["magentoGetCustomer","magentoGetOrdersByCustomer","magentoGetOrderById","magentoSearchProducts","magentoGetProductById","magentoListShippingOptions"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"magentoConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","listShippingOptions"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento order increment id (receipt number) or numeric entity id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Magento product id."}},"required":["productId"]},"listShippingOptions":{"type":"object","properties":{"countryId":{"type":"string","description":"Destination country as ISO-2 code, e.g. \"GR\". Defaults to \"GR\"."},"postcode":{"type":"string","description":"Destination postcode. Supports templates."},"region":{"type":"string","description":"Optional region/state name."},"sku":{"type":"string","description":"Optional product SKU to price against."}}}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["megasoftGetCustomer","megasoftSearchProducts","megasoftGetProductByCode","megasoftListShippingMethods","megasoftListPaymentMethods","megasoftGetCustomerBalance","megasoftGetCustomerOrders","megasoftGetOrderStatus","megasoftGetCustomerPurchases","megasoftListOffers","megasoftGetItemPrice","megasoftGetProductStock","megasoftCreateOrder","megasoftCancelOrder"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"megasoftConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","searchProducts","getProductByCode","listShippingMethods","listPaymentMethods","getCustomerBalance","getCustomerOrders","getOrderStatus","getCustomerPurchases","listOffers","getItemPrice","getProductStock","createOrder","cancelOrder"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","code"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text search. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}},"required":["query"]},"getProductByCode":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"getCustomerBalance":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."}},"required":["customerCode"]},"getCustomerOrders":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"orderNo":{"type":"string","description":"Optional order number filter. Supports templates."}},"required":["customerCode"]},"getOrderStatus":{"type":"object","properties":{"orderNo":{"type":"string","description":"Optional order number. Supports templates."},"date":{"type":"string","description":"Optional modified-since date (yyyy-MM-dd)."}}},"getCustomerPurchases":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"itemCode":{"type":"string"}},"required":["customerCode"]},"listOffers":{"type":"object","properties":{"offerId":{"type":"string"},"activeOnly":{"type":"boolean","default":true},"dateFrom":{"type":"string"}}},"getItemPrice":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["customerCode","itemCode"]},"getProductStock":{"type":"object","properties":{"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."}},"required":["itemCode"]},"createOrder":{"type":"object","properties":{"customerCode":{"type":"string","minLength":1,"description":"Megasoft customer code. Supports templates."},"itemCode":{"type":"string","minLength":1,"description":"Megasoft item code. Supports templates."},"qty":{"oneOf":[{"type":"number","minimum":0},{"type":"string","minLength":1}],"description":"Quantity. Number or template string."},"comments":{"type":"string"}},"required":["customerCode","itemCode","qty"]},"cancelOrder":{"type":"object","properties":{"orderNo":{"type":"string","minLength":1,"description":"Megasoft order number. Supports templates."},"seiraPar":{"type":"string","minLength":1,"description":"Order series / parastatiko code. Supports templates."}},"required":["orderNo","seiraPar"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["gonnaOrderSearchCatalog","gonnaOrderCheckDeliveryAddress","gonnaOrderGetCustomer","gonnaOrderGetCustomerOrders","gonnaOrderGetOrderStatus","gonnaOrderCreatePaymentLink"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"gonnaOrderConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["searchCatalog","checkDeliveryAddress","getCustomer","getCustomerOrders","getOrderStatus","createPaymentLink"]},"searchCatalog":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text menu search. Supports {{dynamicVariables.x}}."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"checkDeliveryAddress":{"type":"object","properties":{"address":{"type":"string","minLength":1,"description":"Delivery address. Supports templates."}},"required":["address"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","name"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getCustomerOrders":{"type":"object","properties":{"customerId":{"type":"string","minLength":1,"description":"Customer id. Supports templates."},"limit":{"type":"integer","minimum":1,"maximum":10,"default":5}},"required":["customerId"]},"getOrderStatus":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid. Supports templates."}},"required":["orderUuid"]},"createPaymentLink":{"type":"object","properties":{"orderUuid":{"type":"string","minLength":1,"description":"Order uuid to charge for. Supports templates."},"amount":{"type":"string","description":"Amount override. Leave blank to use the order total."}},"required":["orderUuid"]}},"required":["operation"],"example":{"operation":"checkDeliveryAddress","checkDeliveryAddress":{"address":"{{dynamicVariables.callerAddress}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["webhotelierCheckAvailability","webhotelierSearchBookings","webhotelierGetReservation","webhotelierGetAvailabilityCalendar","webhotelierGetRooms","webhotelierGetRates"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"webhotelierConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["checkAvailability","searchBookings","getReservation","getAvailabilityCalendar","getRooms","getRates"]},"checkAvailability":{"type":"object","properties":{"checkin":{"type":"string","minLength":1,"description":"Check-in date YYYY-MM-DD. Supports templates."},"checkout":{"type":"string","minLength":1,"description":"Check-out date YYYY-MM-DD. Supports templates."},"adults":{"type":"string","minLength":1,"description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"rooms":{"type":"string","description":"Number of rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["checkin","checkout","adults"]},"searchBookings":{"type":"object","properties":{"lastName":{"type":"string","description":"Guest last name. Supports templates. Provide this or email."},"email":{"type":"string","description":"Guest email. Supports templates. Provide this or lastName."},"checkinFrom":{"type":"string","description":"Earliest check-in YYYY-MM-DD. Supports templates."},"checkinTo":{"type":"string","description":"Latest check-in YYYY-MM-DD. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getReservation":{"type":"object","properties":{"resId":{"type":"string","minLength":1,"description":"Reservation id. Supports templates."}},"required":["resId"]},"getAvailabilityCalendar":{"type":"object","properties":{"fromd":{"type":"string","minLength":1,"description":"Calendar start / check-in date YYYY-MM-DD. Supports templates."},"tod":{"type":"string","description":"Calendar end / check-out date YYYY-MM-DD (max 3 months from fromd). Supports templates."},"adults":{"type":"string","description":"Number of adults. Supports templates."},"children":{"type":"string","description":"Number of children. Supports templates."},"room":{"type":"string","description":"Room-type code filter. Supports templates."},"rate":{"type":"string","description":"Rate id filter. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}},"required":["fromd"]},"getRooms":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code for a single room. Empty = list all rooms. Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}},"getRates":{"type":"object","properties":{"roomCode":{"type":"string","description":"Room-type code to scope rates. Supports templates."},"rateId":{"type":"string","description":"Rate id for a single rate (requires roomCode). Supports templates."},"propertyCode":{"type":"string","description":"Property code override. Empty = default property."}}}},"required":["operation"],"example":{"operation":"getReservation","getReservation":{"resId":"{{dynamicVariables.resId}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["hosthubIdentifyCaller","hosthubSearchReservations","hosthubGetReservation","hosthubListRentals","hosthubCheckAvailability"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"hosthubConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["identifyCaller","searchReservations","getReservation","listRentals","checkAvailability"]},"identifyCaller":{"type":"object","properties":{"phone":{"type":"string","minLength":1,"description":"Caller phone number. Supports templates (e.g. {{call.phone_number}})."}},"required":["phone"]},"searchReservations":{"type":"object","properties":{"name":{"type":"string","description":"Guest name. Supports templates. Provide one of name / phone / confirmationCode."},"phone":{"type":"string","description":"Guest phone. Supports templates."},"confirmationCode":{"type":"string","description":"Channel confirmation code. Supports templates."}}},"getReservation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Hosthub reservation (calendar-event) id. Supports templates."}},"required":["id"]},"getRental":{"type":"object","properties":{"rentalId":{"type":"string","description":"Rental id for a single rental. Empty = list all rentals. Supports templates."}}},"checkAvailability":{"type":"object","properties":{"rentalId":{"type":"string","minLength":1,"description":"Rental id to check. Supports templates."},"from":{"type":"string","minLength":1,"description":"Start date YYYY-MM-DD. Supports templates."},"to":{"type":"string","minLength":1,"description":"End date YYYY-MM-DD. Supports templates."}},"required":["rentalId","from","to"]}},"required":["operation"],"example":{"operation":"identifyCaller","identifyCaller":{"phone":"{{call.phone_number}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["prestashopGetCustomer","prestashopGetOrdersByCustomer","prestashopGetOrderById","prestashopSearchProducts","prestashopGetProductById","prestashopCreateOrder","prestashopUpdateOrderStatus"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"prestashopConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getCustomer","getOrdersByCustomer","getOrderById","searchProducts","getProductById","createOrder","updateOrderStatus"]},"getCustomer":{"type":"object","properties":{"by":{"type":"string","enum":["phone","email","id"],"description":"Which field to look up by"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"getOrdersByCustomer":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id. Template strings supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20}},"required":["customerId"]},"getOrderById":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id."}},"required":["orderId"]},"searchProducts":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search. Supports templates."},"reference":{"type":"string","description":"Exact reference (SKU) filter."},"ean13":{"type":"string","description":"Exact EAN-13 barcode filter."},"mpn":{"type":"string","description":"Exact MPN filter."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":10}}},"getProductById":{"type":"object","properties":{"productId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop product id."}},"required":["productId"]},"createOrder":{"type":"object","properties":{"customerId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop customer id."},"addressDeliveryId":{"oneOf":[{"type":"number"},{"type":"string"}]},"addressInvoiceId":{"oneOf":[{"type":"number"},{"type":"string"}]},"cartId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Pre-existing cart id (PrestaShop requires it)."},"currencyId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"langId":{"oneOf":[{"type":"number"},{"type":"string"}],"default":1},"carrierId":{"oneOf":[{"type":"number"},{"type":"string"}]},"payment":{"type":"string","minLength":1,"description":"Human-readable payment label."},"module":{"type":"string","description":"Payment module code, e.g. \"ps_checkpayment\"."},"totalPaid":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProducts":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalProductsWithTax":{"oneOf":[{"type":"number"},{"type":"string"}]},"totalShipping":{"oneOf":[{"type":"number"},{"type":"string"}]},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"product_attribute_id":{"oneOf":[{"type":"number"},{"type":"string"}]},"quantity":{"type":"integer","minimum":0},"product_name":{"type":"string"},"unit_price":{"oneOf":[{"type":"number"},{"type":"string"}]}},"required":["product_id","quantity"]},"minItems":1}},"required":["customerId","addressDeliveryId","addressInvoiceId","cartId","carrierId","payment","totalPaid","totalProducts","totalProductsWithTax","products"]},"updateOrderStatus":{"type":"object","properties":{"orderId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"PrestaShop order id to update."},"orderStateId":{"oneOf":[{"type":"number"},{"type":"string"}],"description":"Target order_state id (numeric, store-specific)."}},"required":["orderId","orderStateId"]}},"required":["operation"],"example":{"operation":"getCustomer","getCustomer":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["airtableGetRecord","airtableSearchRecords","airtableCreateRecord","airtableUpdateRecord"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"airtableConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getRecord","searchRecords","createRecord","updateRecord"]},"getRecord":{"type":"object","properties":{"by":{"type":"string","enum":["phone","id"],"description":"Look up by mapped phone field, or by Airtable record id"},"value":{"type":"string","minLength":1,"description":"Template string — supports {{dynamicVariables.x}}"}},"required":["by","value"]},"searchRecords":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Free-text query — supports templates"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"required":["query"]},"createRecord":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["fields"]},"updateRecord":{"type":"object","properties":{"recordId":{"type":"string","minLength":1,"description":"Airtable record id (rec...) — supports templates"},"fields":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"},"description":"Field name → value map. String values support templates."}},"required":["recordId","fields"]}},"required":["operation"],"example":{"operation":"getRecord","getRecord":{"by":"phone","value":"{{callerPhone}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["jiraGetIssue","jiraSearchIssues","jiraCreateIssue","jiraUpdateIssue","jiraAddComment","jiraTransitionIssue"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"jiraConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["getIssue","searchIssues","createIssue","updateIssue","addComment","transitionIssue"]},"getIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key, e.g. SUP-1234 — supports {{dynamicVariables.x}}"}},"required":["issueKey"]},"searchIssues":{"type":"object","properties":{"text":{"type":"string","description":"Free-text query — supports templates"},"jql":{"type":"string","description":"Raw JQL — overrides text when present"},"projectKey":{"type":"string","description":"Scope the search to a project key"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}}},"createIssue":{"type":"object","properties":{"summary":{"type":"string","minLength":1,"description":"Issue summary — supports templates"},"description":{"type":"string","description":"Issue description — supports templates"},"projectKey":{"type":"string","description":"Project key — falls back to the connection default"},"issueType":{"type":"string","description":"Issue type name — falls back to the connection default"},"priority":{"type":"string","description":"Priority name (e.g. High)"},"assignee":{"type":"string","description":"Assign to a person by email or name — supports templates"}},"required":["summary"]},"updateIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key to update — supports templates"},"summary":{"type":"string","description":"New summary — supports templates"},"description":{"type":"string","description":"New description — supports templates"},"priority":{"type":"string","description":"New priority name"}},"required":["issueKey"]},"addComment":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"body":{"type":"string","minLength":1,"description":"Comment body — supports templates"}},"required":["issueKey","body"]},"transitionIssue":{"type":"object","properties":{"issueKey":{"type":"string","minLength":1,"description":"Issue key — supports templates"},"status":{"type":"string","minLength":1,"description":"Target status name, e.g. \"In Progress\" — supports templates"}},"required":["issueKey","status"]}},"required":["operation"],"example":{"operation":"createIssue","createIssue":{"summary":"Callback requested by {{callerPhone}}","description":"{{transcript}}"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["googleChatSendMessage","googleChatSendToDefaultSpace","googleChatSendViaWebhook"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"googleChatConfig":{"type":"object","properties":{"operation":{"type":"string","enum":["sendMessage","sendToDefaultSpace","sendViaWebhook"]},"sendMessage":{"type":"object","properties":{"spaceName":{"type":"string","minLength":1,"description":"Opaque Google Chat space resource (spaces/AAQA...) — set via UI picker"},"spaceDisplayName":{"type":"string","description":"Cached display name for the node summary"},"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string","description":"Optional thread key for in-thread replies"}},"required":["spaceName","body"]},"sendToDefaultSpace":{"type":"object","properties":{"body":{"type":"string","minLength":1,"description":"Message text — supports {{dynamicVariables.x}}"},"threadKey":{"type":"string"}},"required":["body"]},"sendViaWebhook":{"type":"object","properties":{"webhookId":{"type":"string","minLength":1,"description":"GoogleChatWebhook document id — set via UI picker"},"webhookLabel":{"type":"string","description":"Cached webhook label for the node summary"},"body":{"type":"string","minLength":1},"threadKey":{"type":"string"}},"required":["webhookId","body"]}},"required":["operation"],"example":{"operation":"sendToDefaultSpace","sendToDefaultSpace":{"body":"New lead from {{caller_name}} ({{caller_phone}})"}}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["searchContact"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"searchContactConfig":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Phone number to look up (template). Most reliable identifier: matched on the stored phone index, so +30/30/national forms all hit the same contact."},"email":{"type":"string","description":"Email address to look up (template). Matched case-insensitively on the main email and every listed email."},"name":{"type":"string","description":"Name to look up (template). Fuzzy: case- and accent-insensitive, Greek/Latin spellings and common inflections. May match several contacts."}},"example":{"phoneNumber":"{{call.phone_number}}","email":"","name":""}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}},{"type":"object","properties":{"nodeType":{"type":"string","enum":["managedAgent"]},"nodeTitle":{"type":"string"},"transitions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["success","failure","no_wait","orderCreated","loop"]},"label":{"type":"string"},"index":{"type":"number"},"connectedTo":{"type":"array","items":{"type":"number"}}},"required":["type"],"example":{"type":"success","label":"Continue to next step","index":0,"connectedTo":[2,3]}}},"managedAgentConfig":{"type":"object","properties":{"prompt":{"type":"string","maxLength":10000,"default":"","description":"System prompt rendered with {{transcript}}, {{call_summary}}, {{contact}}, {{extracted_entities}}"},"builtInTools":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object","description":"Any valid JSON value"}},"default":[],"description":"Full AgentTool configurations the LLM may call."},"apiTools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_]{1,40}$","description":"Tool name shown to the LLM; must be unique within the node"},"description":{"type":"string","minLength":10,"maxLength":500,"description":"How the LLM decides when to call this tool"},"parameters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"index":{"type":"integer","minimum":0},"description":{"type":"string"},"aiGenerated":{"type":"boolean"},"type":{"type":"string","enum":["string","number","boolean","array","date","time","enum","object"]},"arrayType":{"type":"string","enum":["string","number","boolean","date","time","enum","object"]},"objectProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["string","number","boolean","date","time","enum"]},"options":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."}},"required":["name","type"],"example":{"id":"prop1","name":"propertyName","description":"A sample property","type":"string","required":true,"value":"sample value"}}},"enumOptions":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"},"value":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"object","description":"Any valid JSON value"}],"description":"Tool parameters: the fixed value used when aiGenerated is false. Post-call analysis properties: a fallback saved only when the analysis cannot produce a value (call shorter than minimumDuration, not answered, no caller speech, or the AI left the field empty). It never replaces a value the AI extracted. Supports {{variables}}. Ignored on top-level object/array properties. Pass it as a plain string, number or boolean (e.g. \"{{customer_name}}\"), never wrapped in an object."},"isConstantForContactEntity":{"type":"boolean"}},"required":["name","type"],"example":{"name":"parameterName","displayName":"Parameter Name","index":0,"description":"A sample parameter","aiGenerated":false,"type":"string","required":true,"value":"default value","isConstantForContactEntity":false}},"default":[],"description":"Input schema for the LLM"},"apiConfig":{"type":"object","properties":{"url":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"Authorization","value":"Bearer token123"}}},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"]},"params":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"example":{"key":"id","value":"123"}}},"bodyType":{"type":"string","enum":["raw","form-data"]},"rawType":{"type":"string","enum":["json","xml","text","html"]},"body":{"type":"object","description":"Any valid JSON value"},"formBody":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["file","text"]},"key":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["type","key","value"],"example":{"type":"text","key":"description","value":"This is a description."}}},"apiResponse":{"type":"string"},"sendNotificationOnFailure":{"type":"boolean"},"cacheEnabled":{"type":"boolean"},"cacheTtl":{"type":"string","enum":["1m","15m","30m","45m","1h","2h","4h","1d","3d","7d","2w","1M","always"]},"timeoutSeconds":{"type":"number","minimum":1,"maximum":300},"responseHeaderVariables":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Response header name, matched case-insensitively"},"value":{"type":"string","pattern":"^\\w+$","description":"Variable name: read it as {{node_<id>.<name>}}"}},"required":["key","value"],"example":{"key":"X-Session-Token","value":"token"}},"maxItems":10,"description":"Save response headers into variables: {key: header name, value: variable name}. The next node reads {{node_<id>.<variable>}}. For APIs that renew a token in a response header; chain the calls inside one workflow run."}},"required":["url","headers","method","params","apiResponse","responseHeaderVariables"],"description":"HTTP request configuration (URL, headers, method, body) — reused from function-call api runner","example":{"url":"https://api.example.com/orders","method":"POST","headers":[{"key":"Authorization","value":"Bearer token123"}],"params":[{"key":"id","value":"123"}],"bodyType":"raw","rawType":"json","body":{"orderId":"12345"}}}},"required":["name","description","apiConfig"]},"default":[],"description":"Inline API tools with name + description + HTTP config"},"mcpServers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the MCP server"},"description":{"type":"string","description":"Optional description"},"serverUrl":{"type":"string","format":"uri","description":"MCP server endpoint"},"transport":{"type":"string","enum":["http","sse"],"description":"Transport: http or sse"},"authType":{"type":"string","enum":["none","bearer","oauth"],"description":"Authentication mode"},"authValue":{"type":"string","description":"Token / credential value — encrypted at rest"},"enabledTools":{"type":"array","items":{"type":"string"},"description":"Whitelist of tools exposed to the LLM. Omit to expose every tool the server publishes."}},"required":["name","serverUrl","transport","authType"]},"default":[],"description":"MCP servers whose tools the LLM may call"},"models":{"type":"object","properties":{"primary":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"description":"Model used by the loop by default","example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"}},"escalation":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"priority":{"type":"boolean"},"model":{"type":"string"},"temperature":{"type":"number"},"maxCompletionTokens":{"type":"number"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"openAiTranscriptionModel":{"type":"string","enum":["whisper-1","gpt-live-transcribe","gpt-realtime-whisper","gpt-4o-transcribe","gpt-4o-mini-transcribe","fromTranscriptionProvider"]},"transcriptionPrompt":{"type":"string"},"fallbackModel":{"type":"object","properties":{"completionProvider":{"type":"string","enum":["openai","groq","together","mistral","anthropic","gemini","grok","minimax","custom-llm"]},"model":{"type":"string"}},"required":["completionProvider","model"]}},"required":["completionProvider","model"],"example":{"completionProvider":"openai","model":"gpt-5.6-terra","priority":false,"temperature":0.5,"maxCompletionTokens":1000,"reasoningEffort":"medium"},"description":"Optional fallback model rerun on the whole session if primary failed/stuck. Must use the same provider as primary."}},"required":["primary"]},"limits":{"type":"object","properties":{"maxIterations":{"type":"integer","minimum":0,"maximum":50,"default":15,"description":"Hard cap on LLM turns per run. Set to 0 for no limit (cost cap still enforced)."},"maxCostUsd":{"type":"number","minimum":0,"maximum":0.5,"default":0.5,"description":"Hard cap on total cost (USD) per run. Range: 0 to 0.5."},"stuckDetection":{"type":"boolean","default":true,"description":"Bail if the model calls the same tool with the same args twice in a row"}},"default":{}},"routing":{"type":"object","properties":{"onSuccess":{"type":"string","description":"Next workflow node ID when the run completes successfully"},"onPartial":{"type":"string","description":"Next workflow node ID when the run completed but with partial results"},"onFailure":{"type":"string","description":"Next workflow node ID when the run failed"}},"default":{}},"dryRun":{"type":"boolean","default":false},"enableSubagents":{"type":"boolean","default":false},"maxConcurrentSubagents":{"type":"integer","minimum":1,"maximum":10,"default":5},"maxSubagentIterations":{"type":"integer","minimum":1,"maximum":20,"default":8},"knowledgeFileIds":{"type":"array","items":{"type":"string"},"default":[],"description":"Knowledge files the agent can search via search_knowledge. Empty list = no knowledge tool offered."},"knowledgeRerank":{"type":"object","properties":{"enabled":{"type":"boolean","default":true,"description":"Run the rerank pass. When off, top-K is taken directly from the raw retrieval score (faster but noisier context for the main agent)."},"model":{"type":"string","default":"gpt-5.6-luna","description":"Model used for the rerank pass. Should be small/cheap — its job is ranking, not reasoning. Same provider as the node's primary model."},"candidatesK":{"type":"integer","minimum":5,"maximum":200,"default":50,"description":"How many candidates to retrieve from Pinecone before reranking. Higher = better recall, more rerank tokens. 50 is the sweet spot."},"returnK":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"How many chunks to return after reranking. The main agent sees only these."}},"default":{}},"enableScraping":{"type":"boolean","default":false,"description":"When true, agent gets scrape_website(url) tool that fetches+summarises a page via ScraperService."},"workflowToolIds":{"type":"array","items":{"type":"string"},"default":[],"description":"IDs of during-call workflows the agent may call as tools. Only their duringCall triggers run; onCallEnd-triggered or managed-agent-containing workflows are rejected to prevent recursion."}},"example":{"prompt":"You are an order assistant. From the call transcript, identify the requested products, look them up, and create an order. Use the provided tools.","builtInTools":[],"apiTools":[],"mcpServers":[],"models":{"primary":{"completionProvider":"openai","model":"gpt-5.6-terra","temperature":0}},"limits":{"maxIterations":15,"maxCostUsd":0.5,"stuckDetection":true},"routing":{"onSuccess":"node-success","onFailure":"node-create-ticket"},"dryRun":false}}},"required":["nodeType","nodeTitle","transitions"],"example":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"discriminator":{"propertyName":"nodeType"}},"html":{"type":"string"},"typenode":{"oneOf":[{"type":"boolean"},{"type":"string"}]}},"required":["id","name","position","inputs","outputs"],"example":{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"conversation","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]},"html":"<div>Welcome Message</div>","typenode":false}},"description":"Action nodes in the flow"},"fileIds":{"type":"array","items":{"type":"string"},"description":"Array of file IDs linked with this function call"},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"filename":{"type":"string","description":"Name of the file"},"contentType":{"type":"string","description":"MIME type of the file"},"size":{"type":"number","minimum":0,"description":"File size in bytes"},"content":{"type":"object","description":"Any valid JSON value"},"path":{"type":"string","description":"File path on storage"},"url":{"type":"string","format":"uri","description":"Public URL of the file"},"text":{"type":"string","description":"Text content extracted from file"},"source":{"type":"string","enum":["EMAIL","FUNCTION_CALL","APPOINTMENT","DOCUMENT","RECORDING","TRANSCRIPTION","ATTACHMENT","OTHER","VOIP_CALL","TRANSFER_HOLD_SOUND","FEATURE_ANNOUNCEMENT","TICKET_ATTACHMENT","CALL_EXPORT","DATA_SUBJECT_EXPORT","WIDGET_AVATAR","CHAT_ATTACHMENT","AFFILIATE_AGREEMENT"],"description":"Source of the file"},"s3Id":{"type":"string","description":"S3 object ID"},"pcmS3Id":{"type":"string","description":"S3 key for PCM16 8kHz mono derivative (transfer hold / mid-call music)"},"public":{"type":"boolean","description":"Whether the file is publicly accessible"},"temporary":{"type":"boolean","description":"Whether the file should be cleaned up after expiration"},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"coldExpiresAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"storageMode":{"type":"string","enum":["active","cold","deleted"],"description":"Storage mode of the file"},"googleDriveId":{"type":"string","description":"Google Drive file ID"},"googleDriveUrl":{"type":"string","format":"uri","description":"Google Drive file URL"},"downloadToken":{"type":"string","description":"Unguessable token for the public tracked-download link"},"storageId":{"type":"string","description":"The company's own recording storage holding this file; absent = platform storage"},"pendingMove":{"type":"boolean","description":"Encrypted temporary copy still waiting to move to the company's own storage"},"downloadCount":{"type":"number","description":"Number of times the file has been downloaded via a tracked link"},"downloads":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"When the file was downloaded through a tracked link"},"ip":{"type":"string","description":"IP address of the downloader"},"userAgent":{"type":"string","description":"User agent of the downloader"}},"required":["at"],"description":"A single tracked download of the file"},"description":"Individual tracked download events"}},"required":["id","createdAt","active","createdBy","createdById","companyId","filename","contentType","size","storageMode"],"description":"Response schema for file including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","filename":"example-document.pdf","contentType":"application/pdf","size":1024000,"path":"/uploads/documents/example-document.pdf","url":"https://example.com/files/example-document.pdf","text":"This is the extracted text content from the PDF file.","source":"DOCUMENT","s3Id":"s3://bucket/example-document.pdf","public":false,"temporary":false,"expiresAt":"2024-01-22T10:30:00.000Z","storageMode":"active","googleDriveId":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","googleDriveUrl":"https://drive.google.com/file/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/view"}},"description":"Linked files"},"visibility":{"type":"string","enum":["private","resellerRead","resellerWrite","globalRead"],"description":"Workflow visibility and access control"},"production":{"type":"object","properties":{"versionId":{"type":"string","description":"WorkFlowVersion document id currently published to prod"},"versionNumber":{"type":"integer","description":"Version number of the published snapshot"},"publishedAt":{"oneOf":[{"type":"string","format":"date-time","description":"ISO 8601 date string"},{"type":"string"}],"description":"When this version was (re)published"},"publishedBy":{"type":"string","description":"Display name of the user who published"},"publishedById":{"type":"string","description":"User id of the publisher"}},"required":["versionId","versionNumber","publishedAt"],"description":"Published-to-prod version pointer; absent for workflows that have never published (live doc is prod)"}},"required":["id","createdAt","active","createdBy","createdById","companyId","name","visibility"],"description":"Response schema for function call including all details and relationships","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Handle Incoming Call","description":"Automated call handling flow","type":"flow","executeAt":"immediate","visibility":"private","trigger":{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}},"nodes":[{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"llmCompletionConfig","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"connections":[{"node":"2","input":"default","output":"default","label":"Continue"}],"files":[{"id":"file_123","filename":"welcome.wav","s3Id":"s3-file-123","displayUrl":"https://example.com/files/welcome.wav"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"404":{"description":"Work Flow not found","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Agentic - Work Flows"]}},"/api/v1/agentic/work-flows/query":{"post":{"summary":"Get work flow by query","responses":{"200":{"description":"Got paginated result successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"_def":{"unknownKeys":"strip","catchall":{"_def":{"typeName":"ZodNever"},"~standard":{"version":1,"vendor":"zod"}},"typeName":"ZodObject","meta":{"example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","name":"Handle Incoming Call","description":"Automated call handling flow","type":"flow","executeAt":"immediate","visibility":"private","trigger":{"nodeType":"onCallStart","nodeTitle":"Call Start Trigger","triggerConfig":{"enabled":true,"triggerType":"onCallStart","description":"Trigger when a new call starts"}},"nodes":[{"id":1,"name":"Welcome Message","position":{"x":100,"y":100},"inputs":{},"outputs":{"default":[{"node":"2","output":"default"}]},"className":"conversation-node","data":{"nodeType":"llmCompletionConfig","nodeTitle":"Welcome Message","transitions":[{"type":"success","label":"Continue to next step"}]}}],"connections":[{"node":"2","input":"default","output":"default","label":"Continue"}],"files":[{"id":"file_123","filename":"welcome.wav","s3Id":"s3-file-123","displayUrl":"https://example.com/files/welcome.wav"}]}},"description":"Response schema for function call including all details and relationships"},"~standard":{"version":1,"vendor":"zod"},"_cached":null},"description":"Array of response data"},"total":{"type":"integer","description":"Total number of records"},"nextId":{"type":"string","nullable":true,"description":"ID of the next page, if available"},"currentTotal":{"type":"integer","description":"Number of records in the current response"}},"required":["data","total","currentTotal"],"example":{"data":[{}],"total":1,"nextId":null,"currentTotal":1}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"404":{"description":"Data not found","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"pagedListRequest":{"type":"object","properties":{"nextId":{"type":"string","nullable":true,"description":"The ID of the next page"},"pageSize":{"type":"integer","default":10,"description":"The number of items per page"}}},"queryOptionsRequest":{"type":"object","properties":{"filtersRequest":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"The name of the column filter is going to be applied on"},"matchMode":{"type":"integer","enum":["Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Like","Contains","Any","Between","In","NotIn","NotContains","StartsWith","EndsWith",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"description":"The mode of the filter, which determines how the filter is applied.\n                Possible values include:\n                - Equal: Matches values that are exactly the same.\n                - NotEqual: Matches values that are not the same.\n                - LessThan: Matches values that are less than the specified value.\n                - LessThanOrEqual: Matches values that are less than or equal to the specified value.\n                - GreaterThan: Matches values that are greater than the specified value.\n                - GreaterThanOrEqual: Matches values that are greater than or equal to the specified value.\n                - Like: Matches values that are similar to the specified pattern.\n                - Contains: Matches values that contain the specified substring.\n                - NotContains: Matches values that do not contain the specified substring.\n                - Any: Matches any value.\n                - Between: Matches values that fall within a specified range.\n                - In: Matches values that are within a specified set.\n                - NotIn: Matches values that are not within a specified set.\n                - StartsWith: Matches values that start with the specified substring.\n                - EndsWith: Matches values that end with the specified substring.\n                Equal, NotEqual, LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual, Like, Contains, Any, Between, In, NotIn, NotContains, StartsWith, EndsWith, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15"},"operator":{"type":"integer","enum":["And","Or",1,2],"nullable":true,"description":"The operator of the filter, which determines how multiple filters are combined.\n                Possible values include:\n                - And: All specified filters must be satisfied.\n                - Or: At least one of the specified filters must be satisfied.\n                And, Or, 1, 2"},"value":{"nullable":true,"description":"The value against which the filter is going to be applied (can be any type: string, number, boolean, object, array, or null)"},"values":{"type":"array","items":{},"nullable":true,"description":"The values against which the filter is going to be applied (array items can be any type)"},"rangeValues":{"type":"object","properties":{"start":{"description":"The start value of the range (can be any type: string, number, date, etc.)"},"end":{"description":"The end value of the range (can be any type: string, number, date, etc.)"}},"nullable":true,"description":"The range of values to be checked between"},"ignoreCase":{"type":"boolean","nullable":true,"description":"Whether case should be ignored or not"}},"required":["field","matchMode"]},"description":"The list of filters to be applied"},"sortRequest":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"The name of the column to be sorted"},"direction":{"type":"integer","enum":["Ascending","Descending",0,1],"description":"The direction of sorting, which indicates how the results should be ordered.\n                Possible values include:\n                - Ascending (0): Sorts the results from the lowest to the highest value.\n                - Descending (1): Sorts the results from the highest to the lowest value.\n                Ascending, Descending, 0, 1"},"priority":{"type":"integer","description":"The priority of sorting"}},"required":["field","direction","priority"]},"description":"The list of sort requests"},"includes":{"type":"array","items":{"type":"string"},"description":"The list of table names whose records are needed to be fetched along with current table's records"},"selectFields":{"type":"array","items":{"type":"string"},"description":"The list of field names that should be included in the response. If not specified, all fields will be returned. Note: Essential fields like _id, createdAt, companyId, etc. are always included for proper toResponse() functionality."}}}}}}}},"security":[{"apiKey":[]}],"tags":["Agentic - Work Flows"]}},"/api/v1/mcp-settings":{"put":{"summary":"","responses":{"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Mcp-settings"]},"get":{"summary":"","responses":{"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Mcp-settings"]}},"/api/v1/mcp-connections":{"post":{"summary":"","responses":{"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Mcp-connections"]}},"/api/v1/mcp-connections/:id":{"get":{"summary":"","responses":{"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Mcp-connections"]},"put":{"summary":"","responses":{"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Mcp-connections"]},"delete":{"summary":"","responses":{"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Mcp-connections"]}},"/api/v1/mcp-connections/:id/authorize":{"post":{"summary":"","responses":{"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Mcp-connections - Authorize"]}},"/api/v1/mcp-connections/:id/list-tools":{"post":{"summary":"","responses":{"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["Mcp-connections - List Tools"]}},"/api/v1/sms/query":{"post":{"summary":"Query SMS history (paginated). Filter by recipient (`to`) and `createdAt` date range via queryOptionsRequest; page with pagedListRequest { nextId, pageSize }. Returns { data, total, nextId, currentTotal }.","responses":{"200":{"description":"Paginated SMS history","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"_def":{"unknownKeys":"strip","catchall":{"_def":{"typeName":"ZodNever"},"~standard":{"version":1,"vendor":"zod"}},"typeName":"ZodObject","meta":{"example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","contactId":"60a7e1e5e4b0d3a3a8f3a1b2","to":"+30 698 765 4321","from":"VoiceLogica","body":"Hi! Just confirming your appointment tomorrow at 10:00.","direction":"outbound","source":"user","status":"sent","segments":1}},"description":"SMS record. One document per recipient."},"~standard":{"version":1,"vendor":"zod"},"_cached":null},"description":"Array of response data"},"total":{"type":"integer","description":"Total number of records"},"nextId":{"type":"string","nullable":true,"description":"ID of the next page, if available"},"currentTotal":{"type":"integer","description":"Number of records in the current response"}},"required":["data","total","currentTotal"],"example":{"data":[{}],"total":1,"nextId":null,"currentTotal":1}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"pagedListRequest":{"type":"object","properties":{"nextId":{"type":"string","nullable":true,"default":null,"description":"Cursor for the next page. null for the first page; pass the `nextId` returned in the response for subsequent pages."},"pageSize":{"type":"integer","default":20,"description":"Number of SMS records per page (default 20)."}},"description":"Pagination settings. Omit for the latest 20."},"queryOptionsRequest":{"type":"object","properties":{"filtersRequest":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"Field to filter on (e.g. \"to\", \"from\", \"status\", \"direction\", \"source\", \"callId\", \"createdAt\")."},"matchMode":{"type":"number","description":"Match mode: 1=Equal, 8=Contains, 10=Between (for date ranges), 11=In."},"operator":{"type":"number","nullable":true,"default":null,"description":"Logical operator between filters: 1=AND, 2=OR."},"value":{"type":"object","description":"Single value (for Equal, Contains, ...).","nullable":true},"values":{"type":"array","items":{"type":"object","description":"Any valid JSON value"},"nullable":true,"default":null,"description":"Array of values (for In)."},"rangeValues":{"type":"object","properties":{"start":{"type":"object","description":"Range start (ISO 8601 date string for date fields)."},"end":{"type":"object","description":"Range end (ISO 8601 date string for date fields)."}},"required":["start","end"],"nullable":true,"default":null,"description":"Range values for Between (date ranges)."},"ignoreCase":{"type":"boolean","nullable":true,"default":null,"description":"Case-insensitive comparison."}},"required":["field","matchMode"]},"description":"Filters to apply to the SMS history query."}},"required":["filtersRequest"],"description":"Query filter and pagination options. Omit for no filter."}},"description":"Request schema for querying SMS history with filters and pagination","example":{"pagedListRequest":{"nextId":null,"pageSize":20},"queryOptionsRequest":{"filtersRequest":[{"field":"to","matchMode":8,"operator":1,"value":"+3069","values":null,"rangeValues":null,"ignoreCase":true},{"field":"createdAt","matchMode":10,"operator":1,"value":null,"values":null,"rangeValues":{"start":"2026-06-01T00:00:00.000Z","end":"2026-06-30T23:59:59.999Z"},"ignoreCase":null}]}}},"example":{"pagedListRequest":{"nextId":null,"pageSize":20},"queryOptionsRequest":{"filtersRequest":[{"field":"to","matchMode":8,"operator":1,"value":"+3069","values":null,"rangeValues":null,"ignoreCase":true},{"field":"createdAt","matchMode":10,"operator":1,"value":null,"values":null,"rangeValues":{"start":"2026-06-01T00:00:00.000Z","end":"2026-06-30T23:59:59.999Z"},"ignoreCase":null}]}}}}},"security":[{"apiKey":[]}],"tags":["SMS"]}},"/api/v1/sms/send-sms":{"post":{"summary":"Send one or more SMS. Each `messages` item has `to` (phones), `body`, optional `sender`. One item with multiple `to` = same text to all; multiple items = separate messages. Every send is persisted to SMS history.","responses":{"200":{"description":"Send result for the SMS batch","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success","error"],"description":"Overall result of the send request."},"message":{"type":"string","description":"Error detail when status is \"error\"; omitted on success."}},"required":["status"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","items":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Recipient phone numbers (E.164 recommended, e.g. +306912345678). Multiple numbers = same `body` sent to each."},"body":{"type":"string","minLength":1,"description":"SMS message text"},"sender":{"type":"string","description":"Sender ID to present to recipients. Omit to use the company default. Use /sms/list-senders for available IDs."}},"required":["to","body"]},"minItems":1,"maxItems":50,"description":"One or more SMS batches. One item with multiple `to` = same message to everyone; multiple items = different text or recipient groups."}},"required":["messages"],"description":"Send one or more SMS. Every message sent is persisted to SMS history."}}}},"security":[{"apiKey":[]}],"tags":["SMS"]}},"/api/v1/sms/list-senders":{"post":{"summary":"List the verified SMS sender IDs available to the current company. Use a returned `senderId` as the `sender` field in send-sms.","responses":{"200":{"description":"Verified SMS senders for the company","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Internal sender record id."},"senderId":{"type":"string","description":"The sender ID string to pass as `sender` in send_sms."},"verified":{"type":"boolean","description":"Whether this sender ID is verified for use."}},"required":["id","senderId","verified"]},"description":"Verified SMS sender IDs available to the current company."}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"description":"No parameters required."}}}},"security":[{"apiKey":[]}],"tags":["SMS"]}},"/api/v1/sms/senders":{"post":{"summary":"Register an SMS sender ID for the current company. Optionally attach verification documents as multipart files. New senders start unverified pending review.","responses":{"200":{"description":"SMS sender registered","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"senderId":{"type":"string","description":"Sender ID for SMS"},"documentIds":{"type":"array","items":{"type":"string"},"description":"Array of document IDs"},"documents":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"size":{"type":"number"},"data":{"type":"object","description":"Any valid JSON value"}},"required":["id","name","type","size"]},"description":"Array of document objects"},"verified":{"type":"boolean","description":"Whether the sender is verified"},"notes":{"type":"string","description":"Additional notes"}},"required":["id","createdAt","active","createdBy","createdById","companyId","senderId","verified"],"description":"Response schema for Yuboto SMS sender including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","senderId":"SMS_SENDER_123","documentIds":["doc_1","doc_2"],"documents":[{"id":"doc_1","name":"business_license.pdf","type":"application/pdf","size":1024000,"data":"base64_encoded_data"}],"verified":true,"notes":"SMS sender setup notes"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"senderId":{"type":"string","description":"Sender ID to register (alphanumeric ≤11 chars or a short code; must be pre-approved with the carrier)."},"notes":{"type":"string","description":"Free-text notes for the approval reviewer."},"documentIds":{"type":"array","items":{"type":"string"},"description":"IDs of previously uploaded verification documents."}},"required":["senderId"],"description":"Register a Yuboto SMS sender. New senders always start UNVERIFIED — an admin reviews and verifies them. Verification documents may be attached as multipart files.","example":{"senderId":"YouBath","notes":"Company brand name for order notifications","documentIds":[]}},"example":{"senderId":"YouBath","notes":"Company brand name for order notifications","documentIds":[]}}}},"security":[{"apiKey":[]}],"tags":["SMS"]}},"/api/v1/sms/senders/{id}":{"delete":{"summary":"Remove an SMS sender ID by its id for the current company.","responses":{"200":{"description":"SMS sender removed","content":{"application/json":{}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"security":[{"apiKey":[]}],"tags":["SMS"]}},"/api/v1/sms/senders/{id}/verify":{"post":{"summary":"Verify (or un-verify) an SMS sender by id. Admins verify any sender; account managers verify senders for the company they manage.","responses":{"200":{"description":"Sender verification updated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"createdAt":{"type":"string","format":"date-time","description":"Creation timestamp"},"active":{"type":"boolean","description":"Whether the entity is active"},"createdBy":{"type":"string","description":"Name of the user who created the entity"},"createdById":{"type":"string","description":"ID of the user who created the entity"},"modifiedAt":{"type":"string","format":"date-time","description":"ISO 8601 date string"},"modifiedBy":{"type":"string","description":"Name of the user who last modified the entity"},"modifiedById":{"type":"string","description":"ID of the user who last modified the entity"},"companyId":{"type":"string","description":"Company identifier"},"company":{"type":"object","description":"Any valid JSON value"},"groupIds":{"type":"array","items":{"type":"string"},"description":"Linked group IDs"},"senderId":{"type":"string","description":"Sender ID for SMS"},"documentIds":{"type":"array","items":{"type":"string"},"description":"Array of document IDs"},"documents":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"size":{"type":"number"},"data":{"type":"object","description":"Any valid JSON value"}},"required":["id","name","type","size"]},"description":"Array of document objects"},"verified":{"type":"boolean","description":"Whether the sender is verified"},"notes":{"type":"string","description":"Additional notes"}},"required":["id","createdAt","active","createdBy","createdById","companyId","senderId","verified"],"description":"Response schema for Yuboto SMS sender including company metadata","example":{"id":"507f1f77bcf86cd799439011","createdAt":"2024-01-15T10:30:00.000Z","active":true,"createdBy":"John Doe","createdById":"123","modifiedAt":"2024-01-15T10:30:00.000Z","modifiedBy":"Jane Doe","modifiedById":"456","companyId":"507f1f77bcf86cd799439012","senderId":"SMS_SENDER_123","documentIds":["doc_1","doc_2"],"documents":[{"id":"doc_1","name":"business_license.pdf","type":"application/pdf","size":1024000,"data":"base64_encoded_data"}],"verified":true,"notes":"SMS sender setup notes"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{}}},"403":{"description":"Invalid CSRF","content":{"application/json":{}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key for authentication. Required for all endpoints."},{"name":"x-company-id","in":"header","required":false,"schema":{"type":"string"},"description":"Optional company ID for resellers. When provided, the API request will operate on behalf of the specified subsidiary company. The API key must have access to the specified company."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"verified":{"type":"boolean","description":"Set true to verify the sender (default), or false to un-verify."}},"description":"Verify or un-verify an SMS sender. Admin only."}}}},"security":[{"apiKey":[]}],"tags":["SMS"]}}}}