[{"data":1,"prerenderedAt":1279},["ShallowReactive",2],{"docs-navigation":3,"content-query-nlxwVSV8y7":297},[4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294],{"_path":5,"title":6},"/docs/account/account-management","Account management",{"_path":8,"title":9},"/docs/account/mfa","Multi-factor authentication (MFA)",{"_path":11,"title":12},"/docs/account/team","Teams and sub-accounts",{"_path":14,"title":15},"/docs/account/billing-and-subscriptions","Billing & subscriptions",{"_path":17,"title":18},"/docs/clawhub","Webhook Relay on ClawHub",{"_path":20,"title":21},"/docs/email","Receive emails as webhooks",{"_path":23,"title":24},"/docs/email/payload","Email webhook payload",{"_path":26,"title":27},"/docs/email/filtering-and-policy","Sender filtering & policy",{"_path":29,"title":30},"/docs/email/cli","Create & poll email addresses from the CLI",{"_path":32,"title":33},"/docs","Getting Started",{"_path":35,"title":36},"/docs/installation/cli","CLI",{"_path":38,"title":39},"/docs/installation/docker","Docker container",{"_path":41,"title":42},"/docs/installation/docker-compose","Docker Compose",{"_path":44,"title":45},"/docs/installation/kubernetes","Kubernetes",{"_path":47,"title":48},"/docs/installation/autostart-windows","Autostart (Windows)",{"_path":50,"title":51},"/docs/installation/autostart-linux","Autostart (Linux)",{"_path":53,"title":54},"/docs/installation/autostart-macos","Autostart (MacOS)",{"_path":56,"title":57},"/docs/installation/behind-proxy","HTTP proxy configuration",{"_path":59,"title":60},"/docs/mcp","MCP Server",{"_path":62,"title":63},"/docs/security","Security & Tech",{"_path":65,"title":66},"/docs/service-connections","Service Connections",{"_path":68,"title":69},"/docs/service-connections/ai-providers","AI provider connections",{"_path":71,"title":72},"/docs/service-connections/aws_s3","AWS S3",{"_path":74,"title":75},"/docs/service-connections/aws_sns","AWS SNS",{"_path":77,"title":78},"/docs/service-connections/aws_sqs","AWS SQS",{"_path":80,"title":81},"/docs/service-connections/azure","Azure",{"_path":83,"title":84},"/docs/service-connections/gcp_gcs","GCP Cloud Storage",{"_path":86,"title":87},"/docs/service-connections/gcp_pubsub","GCP Pub/Sub",{"_path":89,"title":90},"/docs/service-connections/secrets","Secrets",{"_path":92,"title":93},"/docs/skills","Agent Skills",{"_path":95,"title":96},"/docs/skills-cli","skills.sh — the Agent Skills CLI",{"_path":98,"title":99},"/docs/tunnels/demoing-your-website","Demoing your website",{"_path":101,"title":102},"/docs/tunnels/regions","Regions",{"_path":104,"title":105},"/docs/tutorials/cicd/jenkins-bitbucket","Jenkins and Bitbucket",{"_path":107,"title":108},"/docs/tutorials/cicd/jenkins-github","Jenkins and GitHub",{"_path":110,"title":111},"/docs/tutorials/cicd/jenkins-plugin","Jenkins Plugin",{"_path":113,"title":114},"/docs/tutorials/cicd/jenkins-plugin-multibranch","Jenkins Multibranch Pipelines",{"_path":116,"title":117},"/docs/tutorials/cicd/kubernetes-operator","Kubernetes Operator",{"_path":119,"title":120},"/docs/tutorials/cicd/terraform-atlantis","Terraform Atlantis",{"_path":122,"title":123},"/docs/tutorials/cicd/webhook-exec","Execute scripts on webhook",{"_path":125,"title":126},"/docs/tutorials/edge/home-assistant","Home Assistant",{"_path":128,"title":129},"/docs/tutorials/edge/javascript-app","JavaScript app",{"_path":131,"title":132},"/docs/tutorials/edge/node-red","Node-RED",{"_path":134,"title":135},"/docs/tutorials/email/airtable","Email to Airtable",{"_path":137,"title":138},"/docs/tutorials/email/api","Email to API",{"_path":140,"title":141},"/docs/tutorials/email/database","Email to Database",{"_path":143,"title":144},"/docs/tutorials/email/discord","Email to Discord",{"_path":146,"title":147},"/docs/tutorials/email/google-sheets","Email to Google Sheets",{"_path":149,"title":150},"/docs/tutorials/email/microsoft-teams","Email to Microsoft Teams",{"_path":152,"title":153},"/docs/tutorials/email/notion","Email to Notion",{"_path":155,"title":156},"/docs/tutorials/email/slack","Email to Slack",{"_path":158,"title":159},"/docs/tutorials","Tutorials",{"_path":161,"title":162},"/docs/tutorials/n8n/email-trigger","n8n Email Trigger (Inbound Email)",{"_path":164,"title":165},"/docs/tutorials/n8n/webhook-trigger","n8n Webhook Trigger (No Public IP)",{"_path":167,"title":168},"/docs/tutorials/n8n/whatsapp-cloud-api-webhook","n8n WhatsApp Cloud API Webhook Setup",{"_path":170,"title":171},"/docs/tutorials/transform/docker-to-slack","DockerHub webhook to Slack notification",{"_path":173,"title":174},"/docs/tutorials/transform/enrich-webhooks","Enrich webhooks from APIs",{"_path":176,"title":177},"/docs/tutorials/warehouse/bigquery","GCP BigQuery",{"_path":179,"title":180},"/docs/webhooks/alerts","Alerts",{"_path":182,"title":183},"/docs/webhooks/auth/username-password","Username and password",{"_path":185,"title":186},"/docs/webhooks/auth/hmac","HMAC",{"_path":188,"title":189},"/docs/webhooks/auth/jwt","JWT authentication",{"_path":191,"title":192},"/docs/webhooks/auth/http-method","Auth using request method",{"_path":194,"title":195},"/docs/webhooks/cors","CORS for webhooks",{"_path":197,"title":198},"/docs/webhooks/cron/using-cron-webhooks","Schedule recurring webhooks",{"_path":200,"title":201},"/docs/webhooks/custom-domains","Custom webhook domains",{"_path":203,"title":204},"/docs/webhooks/custom-subdomains","Custom webhook subdomains",{"_path":206,"title":207},"/docs/webhooks/custom-webhook-response","Custom response to webhooks",{"_path":209,"title":210},"/docs/webhooks/durable-webhooks","Durable webhooks: reliable delivery with automatic retries",{"_path":212,"title":213},"/docs/webhooks/functions/manipulating-json","JSON encoding",{"_path":215,"title":216},"/docs/webhooks/functions/make-http-request","Make HTTP request",{"_path":218,"title":219},"/docs/webhooks/functions/modify-request","Modify webhook headers, body, method and path",{"_path":221,"title":222},"/docs/webhooks/functions/multipart-form-data","Multipart form to JSON",{"_path":224,"title":225},"/docs/webhooks/functions/url-encoded-data","URL Encoded Form",{"_path":227,"title":228},"/docs/webhooks/functions/working-with-time","Working with time",{"_path":230,"title":231},"/docs/webhooks/functions/send-emails","Sending emails",{"_path":233,"title":234},"/docs/webhooks/functions/crypto-functions","Base64, encryption",{"_path":236,"title":237},"/docs/webhooks/functions/integrate-into-cicd","Integrating into CI/CD",{"_path":239,"title":177},"/docs/webhooks/functions/big-query",{"_path":241,"title":242},"/docs/webhooks/functions/accessing-metadata","Accessing metadata",{"_path":244,"title":245},"/docs/webhooks/functions/response-functions","Response (post-delivery) functions",{"_path":247,"title":248},"/docs/webhooks/functions/alerting","Alerting from functions",{"_path":250,"title":251},"/docs/webhooks/functions/helper-libraries","Helper libraries",{"_path":253,"title":254},"/docs/webhooks/functions/transform-webhook-payload","Transform a webhook payload",{"_path":256,"title":257},"/docs/webhooks/functions/filter-webhooks","Filter or drop webhooks before forwarding",{"_path":259,"title":260},"/docs/webhooks/functions/provider-helpers","Provider-aware function helpers",{"_path":262,"title":263},"/docs/webhooks/functions","Webhook transformations (functions): modify body, headers, method and path",{"_path":265,"title":266},"/docs/webhooks/internal/localhost","Receive webhooks on localhost with the relay CLI",{"_path":268,"title":269},"/docs/webhooks/large-webhooks","Large Webhooks",{"_path":271,"title":272},"/docs/webhooks/outbound-throttling","Outbound throttling: control webhook delivery speed",{"_path":274,"title":275},"/docs/webhooks/polling-webhooks","Polling webhooks with /v1/events",{"_path":277,"title":278},"/docs/webhooks/public/public-destination","Forward to public URL",{"_path":280,"title":281},"/docs/webhooks/public/multiple-destination-urls","Forward webhooks to multiple destinations",{"_path":283,"title":284},"/docs/webhooks/replay-on-agent-connect","Webhook replay on agent connect: recover missed webhooks",{"_path":286,"title":287},"/docs/webhooks/static-ip-address","Static IP Address",{"_path":289,"title":290},"/docs/webhooks/tls-ssl-errors","Fix TLS/SSL handshake errors: unsupported protocol, wrong version number, handshake failure",{"_path":292,"title":293},"/docs/webhooks/websocket-server","Connecting to websocket server",{"_path":295,"title":296},"/docs/webhooks/zero-retention-buckets","Zero Retention Buckets",{"_path":68,"_dir":298,"_draft":299,"_partial":299,"_locale":300,"title":69,"description":301,"layout":302,"tags":303,"body":306,"_type":1272,"_id":1273,"_source":1274,"_file":1275,"_stem":1276,"_extension":1277,"sitemap":1278},"service-connections",false,"","Use credential-free Webhook Relay AI or store provider API keys and bind them to Webhook Relay functions for ai.generate().","doc",[66,304,305],"Functions","AI",{"type":307,"children":308,"toc":1265},"root",[309,325,332,465,486,492,550,555,938,983,989,1046,1101,1106,1118,1124,1226,1232,1259],{"type":310,"tag":311,"props":312,"children":313},"element","p",{},[314,317,323],{"type":315,"value":316},"text","AI provider connections enable bounded, synchronous enrichment inside a\n",{"type":310,"tag":318,"props":319,"children":320},"a",{"href":262},[321],{"type":315,"value":322},"Function",{"type":315,"value":324},". Webhook Relay AI uses the platform's\nmanaged model and needs no credential. Customer-provider keys are encrypted at\nrest, write-only through the dashboard and API, and never become values that\nfunction code can read.",{"type":310,"tag":326,"props":327,"children":329},"h2",{"id":328},"supported-connection-types",[330],{"type":315,"value":331},"Supported connection types",{"type":310,"tag":333,"props":334,"children":335},"table",{},[336,360],{"type":310,"tag":337,"props":338,"children":339},"thead",{},[340],{"type":310,"tag":341,"props":342,"children":343},"tr",{},[344,350,355],{"type":310,"tag":345,"props":346,"children":347},"th",{},[348],{"type":315,"value":349},"Connection type",{"type":310,"tag":345,"props":351,"children":352},{},[353],{"type":315,"value":354},"Credential",{"type":310,"tag":345,"props":356,"children":357},{},[358],{"type":315,"value":359},"API used",{"type":310,"tag":361,"props":362,"children":363},"tbody",{},[364,383,401,424,441],{"type":310,"tag":341,"props":365,"children":366},{},[367,373,378],{"type":310,"tag":368,"props":369,"children":370},"td",{},[371],{"type":315,"value":372},"Webhook Relay AI",{"type":310,"tag":368,"props":374,"children":375},{},[376],{"type":315,"value":377},"None",{"type":310,"tag":368,"props":379,"children":380},{},[381],{"type":315,"value":382},"Webhook Relay managed model",{"type":310,"tag":341,"props":384,"children":385},{},[386,391,396],{"type":310,"tag":368,"props":387,"children":388},{},[389],{"type":315,"value":390},"OpenAI",{"type":310,"tag":368,"props":392,"children":393},{},[394],{"type":315,"value":395},"API key",{"type":310,"tag":368,"props":397,"children":398},{},[399],{"type":315,"value":400},"Chat Completions",{"type":310,"tag":341,"props":402,"children":403},{},[404,409,414],{"type":310,"tag":368,"props":405,"children":406},{},[407],{"type":315,"value":408},"Google Gemini",{"type":310,"tag":368,"props":410,"children":411},{},[412],{"type":315,"value":413},"Gemini API key",{"type":310,"tag":368,"props":415,"children":416},{},[417],{"type":310,"tag":418,"props":419,"children":421},"code",{"className":420},[],[422],{"type":315,"value":423},"generateContent",{"type":310,"tag":341,"props":425,"children":426},{},[427,432,436],{"type":310,"tag":368,"props":428,"children":429},{},[430],{"type":315,"value":431},"Anthropic",{"type":310,"tag":368,"props":433,"children":434},{},[435],{"type":315,"value":395},{"type":310,"tag":368,"props":437,"children":438},{},[439],{"type":315,"value":440},"Messages API",{"type":310,"tag":341,"props":442,"children":443},{},[444,449,454],{"type":310,"tag":368,"props":445,"children":446},{},[447],{"type":315,"value":448},"Custom LLM",{"type":310,"tag":368,"props":450,"children":451},{},[452],{"type":315,"value":453},"API key and HTTPS base URL",{"type":310,"tag":368,"props":455,"children":456},{},[457,459],{"type":315,"value":458},"OpenAI-compatible ",{"type":310,"tag":418,"props":460,"children":462},{"className":461},[],[463],{"type":315,"value":464},"POST /chat/completions",{"type":310,"tag":311,"props":466,"children":467},{},[468,470,476,478,484],{"type":315,"value":469},"For a custom connection, enter the API root, for example\n",{"type":310,"tag":418,"props":471,"children":473},{"className":472},[],[474],{"type":315,"value":475},"https://llm.example.com/v1",{"type":315,"value":477},". Webhook Relay appends ",{"type":310,"tag":418,"props":479,"children":481},{"className":480},[],[482],{"type":315,"value":483},"/chat/completions",{"type":315,"value":485},". The\nbase URL cannot contain embedded credentials, a query or a fragment.",{"type":310,"tag":326,"props":487,"children":489},{"id":488},"create-and-bind-a-connection",[490],{"type":315,"value":491},"Create and bind a connection",{"type":310,"tag":493,"props":494,"children":495},"ol",{},[496,511,516,529],{"type":310,"tag":497,"props":498,"children":499},"li",{},[500,502,509],{"type":315,"value":501},"Open ",{"type":310,"tag":318,"props":503,"children":507},{"href":504,"rel":505},"https://my.webhookrelay.com/service-connections",[506],"nofollow",[508],{"type":315,"value":66},{"type":315,"value":510},"\nand choose Webhook Relay AI, OpenAI, Gemini, Anthropic or Custom Chat\nCompletions API.",{"type":310,"tag":497,"props":512,"children":513},{},[514],{"type":315,"value":515},"For Webhook Relay AI, no credential is needed. For a customer provider,\npaste the server-side API key; a custom provider also needs its HTTPS base\nURL.",{"type":310,"tag":497,"props":517,"children":518},{},[519,521,527],{"type":315,"value":520},"Import an alias in the function, such as ",{"type":310,"tag":418,"props":522,"children":524},{"className":523},[],[525],{"type":315,"value":526},"require(\"ai:classifier\")",{"type":315,"value":528},".",{"type":310,"tag":497,"props":530,"children":531},{},[532,534,540,542,548],{"type":315,"value":533},"Save the function and use its ",{"type":310,"tag":535,"props":536,"children":537},"strong",{},[538],{"type":315,"value":539},"Connections",{"type":315,"value":541}," tab to bind ",{"type":310,"tag":418,"props":543,"children":545},{"className":544},[],[546],{"type":315,"value":547},"classifier",{"type":315,"value":549}," to\nthe provider connection. A missing binding links directly to the filtered\nService Connections dialog and returns you to the function after setup.",{"type":310,"tag":311,"props":551,"children":552},{},[553],{"type":315,"value":554},"Enter customer-provider API keys only in that write-only dialog. The account\nagent can inspect and bind an existing connection, but it never asks for or\naccepts a credential in chat.",{"type":310,"tag":556,"props":557,"children":558},"code-switcher",{},[559,758],{"type":310,"tag":560,"props":561,"children":562},"template",{"v-slot:javascript":300},[563],{"type":310,"tag":564,"props":565,"children":569},"pre",{"className":566,"code":567,"language":568,"meta":300,"style":300},"language-javascript shiki shiki-themes github-dark","const ai = require(\"ai:classifier\")\n\nconst result = ai.generate(\"Classify this webhook as low, medium, or high risk\", {\n  system: \"Return one lowercase label.\",\n  maxTokens: 16\n})\n\nr.setHeader(\"X-Risk\", result.text.trim())\n","javascript",[570],{"type":310,"tag":418,"props":571,"children":572},{"__ignoreMap":300},[573,619,629,670,689,703,712,720],{"type":310,"tag":574,"props":575,"children":578},"span",{"class":576,"line":577},"line",1,[579,585,591,596,602,608,614],{"type":310,"tag":574,"props":580,"children":582},{"style":581},"--shiki-default:#F97583",[583],{"type":315,"value":584},"const",{"type":310,"tag":574,"props":586,"children":588},{"style":587},"--shiki-default:#79B8FF",[589],{"type":315,"value":590}," ai",{"type":310,"tag":574,"props":592,"children":593},{"style":581},[594],{"type":315,"value":595}," =",{"type":310,"tag":574,"props":597,"children":599},{"style":598},"--shiki-default:#B392F0",[600],{"type":315,"value":601}," require",{"type":310,"tag":574,"props":603,"children":605},{"style":604},"--shiki-default:#E1E4E8",[606],{"type":315,"value":607},"(",{"type":310,"tag":574,"props":609,"children":611},{"style":610},"--shiki-default:#9ECBFF",[612],{"type":315,"value":613},"\"ai:classifier\"",{"type":310,"tag":574,"props":615,"children":616},{"style":604},[617],{"type":315,"value":618},")\n",{"type":310,"tag":574,"props":620,"children":622},{"class":576,"line":621},2,[623],{"type":310,"tag":574,"props":624,"children":626},{"emptyLinePlaceholder":625},true,[627],{"type":315,"value":628},"\n",{"type":310,"tag":574,"props":630,"children":632},{"class":576,"line":631},3,[633,637,642,646,651,656,660,665],{"type":310,"tag":574,"props":634,"children":635},{"style":581},[636],{"type":315,"value":584},{"type":310,"tag":574,"props":638,"children":639},{"style":587},[640],{"type":315,"value":641}," result",{"type":310,"tag":574,"props":643,"children":644},{"style":581},[645],{"type":315,"value":595},{"type":310,"tag":574,"props":647,"children":648},{"style":604},[649],{"type":315,"value":650}," ai.",{"type":310,"tag":574,"props":652,"children":653},{"style":598},[654],{"type":315,"value":655},"generate",{"type":310,"tag":574,"props":657,"children":658},{"style":604},[659],{"type":315,"value":607},{"type":310,"tag":574,"props":661,"children":662},{"style":610},[663],{"type":315,"value":664},"\"Classify this webhook as low, medium, or high risk\"",{"type":310,"tag":574,"props":666,"children":667},{"style":604},[668],{"type":315,"value":669},", {\n",{"type":310,"tag":574,"props":671,"children":673},{"class":576,"line":672},4,[674,679,684],{"type":310,"tag":574,"props":675,"children":676},{"style":604},[677],{"type":315,"value":678},"  system: ",{"type":310,"tag":574,"props":680,"children":681},{"style":610},[682],{"type":315,"value":683},"\"Return one lowercase label.\"",{"type":310,"tag":574,"props":685,"children":686},{"style":604},[687],{"type":315,"value":688},",\n",{"type":310,"tag":574,"props":690,"children":692},{"class":576,"line":691},5,[693,698],{"type":310,"tag":574,"props":694,"children":695},{"style":604},[696],{"type":315,"value":697},"  maxTokens: ",{"type":310,"tag":574,"props":699,"children":700},{"style":587},[701],{"type":315,"value":702},"16\n",{"type":310,"tag":574,"props":704,"children":706},{"class":576,"line":705},6,[707],{"type":310,"tag":574,"props":708,"children":709},{"style":604},[710],{"type":315,"value":711},"})\n",{"type":310,"tag":574,"props":713,"children":715},{"class":576,"line":714},7,[716],{"type":310,"tag":574,"props":717,"children":718},{"emptyLinePlaceholder":625},[719],{"type":315,"value":628},{"type":310,"tag":574,"props":721,"children":723},{"class":576,"line":722},8,[724,729,734,738,743,748,753],{"type":310,"tag":574,"props":725,"children":726},{"style":604},[727],{"type":315,"value":728},"r.",{"type":310,"tag":574,"props":730,"children":731},{"style":598},[732],{"type":315,"value":733},"setHeader",{"type":310,"tag":574,"props":735,"children":736},{"style":604},[737],{"type":315,"value":607},{"type":310,"tag":574,"props":739,"children":740},{"style":610},[741],{"type":315,"value":742},"\"X-Risk\"",{"type":310,"tag":574,"props":744,"children":745},{"style":604},[746],{"type":315,"value":747},", result.text.",{"type":310,"tag":574,"props":749,"children":750},{"style":598},[751],{"type":315,"value":752},"trim",{"type":310,"tag":574,"props":754,"children":755},{"style":604},[756],{"type":315,"value":757},"())\n",{"type":310,"tag":560,"props":759,"children":760},{"v-slot:lua":300},[761],{"type":310,"tag":564,"props":762,"children":766},{"className":763,"code":764,"language":765,"meta":300,"style":300},"language-lua shiki shiki-themes github-dark","local ai = require(\"ai:classifier\")\n\nlocal result = ai.generate(\"Classify this webhook as low, medium, or high risk\", {\n  system = \"Return one lowercase label.\",\n  maxTokens = 16\n})\n\nr:SetRequestHeader(\"X-Risk\", result.text)\n","lua",[767],{"type":310,"tag":418,"props":768,"children":769},{"__ignoreMap":300},[770,804,811,847,868,885,892,899],{"type":310,"tag":574,"props":771,"children":772},{"class":576,"line":577},[773,778,783,788,792,796,800],{"type":310,"tag":574,"props":774,"children":775},{"style":581},[776],{"type":315,"value":777},"local",{"type":310,"tag":574,"props":779,"children":780},{"style":604},[781],{"type":315,"value":782}," ai ",{"type":310,"tag":574,"props":784,"children":785},{"style":581},[786],{"type":315,"value":787},"=",{"type":310,"tag":574,"props":789,"children":790},{"style":587},[791],{"type":315,"value":601},{"type":310,"tag":574,"props":793,"children":794},{"style":604},[795],{"type":315,"value":607},{"type":310,"tag":574,"props":797,"children":798},{"style":610},[799],{"type":315,"value":613},{"type":310,"tag":574,"props":801,"children":802},{"style":604},[803],{"type":315,"value":618},{"type":310,"tag":574,"props":805,"children":806},{"class":576,"line":621},[807],{"type":310,"tag":574,"props":808,"children":809},{"emptyLinePlaceholder":625},[810],{"type":315,"value":628},{"type":310,"tag":574,"props":812,"children":813},{"class":576,"line":631},[814,818,823,827,831,835,839,843],{"type":310,"tag":574,"props":815,"children":816},{"style":581},[817],{"type":315,"value":777},{"type":310,"tag":574,"props":819,"children":820},{"style":604},[821],{"type":315,"value":822}," result ",{"type":310,"tag":574,"props":824,"children":825},{"style":581},[826],{"type":315,"value":787},{"type":310,"tag":574,"props":828,"children":829},{"style":604},[830],{"type":315,"value":650},{"type":310,"tag":574,"props":832,"children":833},{"style":587},[834],{"type":315,"value":655},{"type":310,"tag":574,"props":836,"children":837},{"style":604},[838],{"type":315,"value":607},{"type":310,"tag":574,"props":840,"children":841},{"style":610},[842],{"type":315,"value":664},{"type":310,"tag":574,"props":844,"children":845},{"style":604},[846],{"type":315,"value":669},{"type":310,"tag":574,"props":848,"children":849},{"class":576,"line":672},[850,855,859,864],{"type":310,"tag":574,"props":851,"children":852},{"style":604},[853],{"type":315,"value":854},"  system ",{"type":310,"tag":574,"props":856,"children":857},{"style":581},[858],{"type":315,"value":787},{"type":310,"tag":574,"props":860,"children":861},{"style":610},[862],{"type":315,"value":863}," \"Return one lowercase label.\"",{"type":310,"tag":574,"props":865,"children":866},{"style":604},[867],{"type":315,"value":688},{"type":310,"tag":574,"props":869,"children":870},{"class":576,"line":691},[871,876,880],{"type":310,"tag":574,"props":872,"children":873},{"style":604},[874],{"type":315,"value":875},"  maxTokens ",{"type":310,"tag":574,"props":877,"children":878},{"style":581},[879],{"type":315,"value":787},{"type":310,"tag":574,"props":881,"children":882},{"style":587},[883],{"type":315,"value":884}," 16\n",{"type":310,"tag":574,"props":886,"children":887},{"class":576,"line":705},[888],{"type":310,"tag":574,"props":889,"children":890},{"style":604},[891],{"type":315,"value":711},{"type":310,"tag":574,"props":893,"children":894},{"class":576,"line":714},[895],{"type":310,"tag":574,"props":896,"children":897},{"emptyLinePlaceholder":625},[898],{"type":315,"value":628},{"type":310,"tag":574,"props":900,"children":901},{"class":576,"line":722},[902,907,912,917,921,925,930,934],{"type":310,"tag":574,"props":903,"children":904},{"style":598},[905],{"type":315,"value":906},"r",{"type":310,"tag":574,"props":908,"children":909},{"style":604},[910],{"type":315,"value":911},":",{"type":310,"tag":574,"props":913,"children":914},{"style":587},[915],{"type":315,"value":916},"SetRequestHeader",{"type":310,"tag":574,"props":918,"children":919},{"style":604},[920],{"type":315,"value":607},{"type":310,"tag":574,"props":922,"children":923},{"style":610},[924],{"type":315,"value":742},{"type":310,"tag":574,"props":926,"children":927},{"style":604},[928],{"type":315,"value":929},", result.",{"type":310,"tag":574,"props":931,"children":932},{"style":598},[933],{"type":315,"value":315},{"type":310,"tag":574,"props":935,"children":936},{"style":604},[937],{"type":315,"value":618},{"type":310,"tag":311,"props":939,"children":940},{},[941,943,949,951,957,959,965,967,973,975,981],{"type":315,"value":942},"The examples above use a Webhook Relay AI connection, so the model is selected\nfor you. For customer providers, add ",{"type":310,"tag":418,"props":944,"children":946},{"className":945},[],[947],{"type":315,"value":948},"model",{"type":315,"value":950}," (",{"type":310,"tag":418,"props":952,"children":954},{"className":953},[],[955],{"type":315,"value":956},"model =",{"type":315,"value":958}," in Lua). Example values are\n",{"type":310,"tag":418,"props":960,"children":962},{"className":961},[],[963],{"type":315,"value":964},"gpt-5-mini",{"type":315,"value":966}," for OpenAI, ",{"type":310,"tag":418,"props":968,"children":970},{"className":969},[],[971],{"type":315,"value":972},"gemini-2.5-flash",{"type":315,"value":974}," for Gemini,\n",{"type":310,"tag":418,"props":976,"children":978},{"className":977},[],[979],{"type":315,"value":980},"claude-haiku-4-5",{"type":315,"value":982}," for Anthropic, or a model name supported by your custom\nendpoint.",{"type":310,"tag":326,"props":984,"children":986},{"id":985},"limits-and-delivery-behavior",[987],{"type":315,"value":988},"Limits and delivery behavior",{"type":310,"tag":311,"props":990,"children":991},{},[992,998,1000,1005,1007,1013,1015,1021,1022,1028,1030,1036,1038,1044],{"type":310,"tag":418,"props":993,"children":995},{"className":994},[],[996],{"type":315,"value":997},"ai.generate(prompt, options)",{"type":315,"value":999}," accepts a prompt up to 64 KiB. ",{"type":310,"tag":418,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":315,"value":948},{"type":315,"value":1006}," is\nrequired for customer providers and must be omitted for Webhook Relay AI.\n",{"type":310,"tag":418,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":315,"value":1012},"system",{"type":315,"value":1014},", ",{"type":310,"tag":418,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":315,"value":1020},"maxTokens",{"type":315,"value":1014},{"type":310,"tag":418,"props":1023,"children":1025},{"className":1024},[],[1026],{"type":315,"value":1027},"timeoutMs",{"type":315,"value":1029}," and ",{"type":310,"tag":418,"props":1031,"children":1033},{"className":1032},[],[1034],{"type":315,"value":1035},"jsonSchema",{"type":315,"value":1037}," are optional for every\nprovider. Temperature accepts 0–2 for OpenAI, Gemini and custom providers, but\nis not supported by Webhook Relay AI.\nFor Anthropic, the only accepted explicit value is its default, ",{"type":310,"tag":418,"props":1039,"children":1041},{"className":1040},[],[1042],{"type":315,"value":1043},"1",{"type":315,"value":1045},"; omit the\noption to use the provider default.\nOutput is capped at 4,096 tokens, timeouts can be 1–30 seconds,\nresponses are capped at 1 MiB, and one function execution can make at most\nthree AI calls.",{"type":310,"tag":311,"props":1047,"children":1048},{},[1049,1051,1057,1058,1063,1064,1069,1070,1076,1078,1084,1086,1091,1093,1099],{"type":315,"value":1050},"The helper returns normalized ",{"type":310,"tag":418,"props":1052,"children":1054},{"className":1053},[],[1055],{"type":315,"value":1056},"provider",{"type":315,"value":1014},{"type":310,"tag":418,"props":1059,"children":1061},{"className":1060},[],[1062],{"type":315,"value":948},{"type":315,"value":1014},{"type":310,"tag":418,"props":1065,"children":1067},{"className":1066},[],[1068],{"type":315,"value":315},{"type":315,"value":1014},{"type":310,"tag":418,"props":1071,"children":1073},{"className":1072},[],[1074],{"type":315,"value":1075},"finish_reason",{"type":315,"value":1077}," and\n",{"type":310,"tag":418,"props":1079,"children":1081},{"className":1080},[],[1082],{"type":315,"value":1083},"usage",{"type":315,"value":1085}," fields. With ",{"type":310,"tag":418,"props":1087,"children":1089},{"className":1088},[],[1090],{"type":315,"value":1035},{"type":315,"value":1092},", it also validates and returns ",{"type":310,"tag":418,"props":1094,"children":1096},{"className":1095},[],[1097],{"type":315,"value":1098},"json",{"type":315,"value":1100},".\nOpenAI, Gemini and Anthropic receive their native structured-output setting;\nfor Anthropic, choose a model that supports structured outputs. Anthropic's\nstrict format makes every declared object property present and disallows\nundeclared properties during generation; the schema supplied by the function\nis still used unchanged for local validation. Custom Chat Completions endpoints\nare validated locally because response-format extensions are not portable\nacross OpenAI-compatible providers. Webhook Relay AI receives the schema as a\ngeneration instruction and validates the result locally.",{"type":310,"tag":311,"props":1102,"children":1103},{},[1104],{"type":315,"value":1105},"Webhook Relay AI usage is charged to the same monthly AI token allowance as\nthe account agent. Function calls add token usage to that shared ledger but do\nnot count as conversational agent turns. The allowance and reset time shown by\nthe account agent therefore already include managed Function enrichment.",{"type":310,"tag":311,"props":1107,"children":1108},{},[1109,1111,1116],{"type":315,"value":1110},"AI generation is synchronous enrichment, so do not use it as an unbounded\nagent loop. Writes to Slack, databases and other destinations should remain\n",{"type":310,"tag":318,"props":1112,"children":1113},{"href":277},[1114],{"type":315,"value":1115},"outputs",{"type":315,"value":1117},", where retries, logs,\nthrottling and response functions continue to apply.",{"type":310,"tag":326,"props":1119,"children":1121},{"id":1120},"api-and-mcp-fields",[1122],{"type":315,"value":1123},"API and MCP fields",{"type":310,"tag":311,"props":1125,"children":1126},{},[1127,1129,1135,1137,1143,1144,1150,1151,1157,1158,1164,1166,1172,1174,1179,1181,1187,1188,1194,1196,1202,1204,1209,1211,1217,1218,1224],{"type":315,"value":1128},"Create a standard service connection with one of these ",{"type":310,"tag":418,"props":1130,"children":1132},{"className":1131},[],[1133],{"type":315,"value":1134},"service_type",{"type":315,"value":1136}," values:\n",{"type":310,"tag":418,"props":1138,"children":1140},{"className":1139},[],[1141],{"type":315,"value":1142},"webhookrelay_ai",{"type":315,"value":1014},{"type":310,"tag":418,"props":1145,"children":1147},{"className":1146},[],[1148],{"type":315,"value":1149},"openai",{"type":315,"value":1014},{"type":310,"tag":418,"props":1152,"children":1154},{"className":1153},[],[1155],{"type":315,"value":1156},"gemini",{"type":315,"value":1014},{"type":310,"tag":418,"props":1159,"children":1161},{"className":1160},[],[1162],{"type":315,"value":1163},"anthropic",{"type":315,"value":1165}," or ",{"type":310,"tag":418,"props":1167,"children":1169},{"className":1168},[],[1170],{"type":315,"value":1171},"custom_llm",{"type":315,"value":1173},".\n",{"type":310,"tag":418,"props":1175,"children":1177},{"className":1176},[],[1178],{"type":315,"value":1142},{"type":315,"value":1180}," accepts no credential fields. REST uses the nested\n",{"type":310,"tag":418,"props":1182,"children":1184},{"className":1183},[],[1185],{"type":315,"value":1186},"llm_service_connection.api_key",{"type":315,"value":1029},{"type":310,"tag":418,"props":1189,"children":1191},{"className":1190},[],[1192],{"type":315,"value":1193},"llm_service_connection.base_url",{"type":315,"value":1195}," fields\nfor customer providers. External MCP clients can use ",{"type":310,"tag":418,"props":1197,"children":1199},{"className":1198},[],[1200],{"type":315,"value":1201},"create_service_connection",{"type":315,"value":1203},"\nwith no key for ",{"type":310,"tag":418,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":315,"value":1142},{"type":315,"value":1210},", or with ",{"type":310,"tag":418,"props":1212,"children":1214},{"className":1213},[],[1215],{"type":315,"value":1216},"llm_api_key",{"type":315,"value":1029},{"type":310,"tag":418,"props":1219,"children":1221},{"className":1220},[],[1222],{"type":315,"value":1223},"llm_base_url",{"type":315,"value":1225}," for\ncustomer providers. Credential-bearing write tools are intentionally not\noffered to the dashboard account agent, so credentials cannot enter persisted\nchat history. API keys are omitted or masked on every read surface.",{"type":310,"tag":326,"props":1227,"children":1229},{"id":1228},"next-steps",[1230],{"type":315,"value":1231},"Next steps",{"type":310,"tag":1233,"props":1234,"children":1235},"ul",{},[1236,1244,1251],{"type":310,"tag":497,"props":1237,"children":1238},{},[1239],{"type":310,"tag":318,"props":1240,"children":1241},{"href":259},[1242],{"type":315,"value":1243},"Provider-aware helper examples",{"type":310,"tag":497,"props":1245,"children":1246},{},[1247],{"type":310,"tag":318,"props":1248,"children":1249},{"href":250},[1250],{"type":315,"value":251},{"type":310,"tag":497,"props":1252,"children":1253},{},[1254],{"type":310,"tag":318,"props":1255,"children":1256},{"href":89},[1257],{"type":315,"value":1258},"Secret service connections",{"type":310,"tag":1260,"props":1261,"children":1262},"style",{},[1263],{"type":315,"value":1264},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":300,"searchDepth":631,"depth":631,"links":1266},[1267,1268,1269,1270,1271],{"id":328,"depth":621,"text":331},{"id":488,"depth":621,"text":491},{"id":985,"depth":621,"text":988},{"id":1120,"depth":621,"text":1123},{"id":1228,"depth":621,"text":1231},"markdown","content:docs:service-connections:ai-providers.md","content","docs/service-connections/ai-providers.md","docs/service-connections/ai-providers","md",{"loc":68},1789016354942]