[{"data":1,"prerenderedAt":1371},["ShallowReactive",2],{"docs-navigation":3,"content-query-UZMO9xRjxu":315},[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,241,244,247,250,253,256,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312],{"_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/account/access-tokens","Webhook Relay access tokens: permissions and subscription scopes",{"_path":20,"title":21},"/docs/clawhub","Webhook Relay on ClawHub",{"_path":23,"title":24},"/docs/email","Receive emails as webhooks",{"_path":26,"title":27},"/docs/email/payload","Email webhook payload",{"_path":29,"title":30},"/docs/email/filtering-and-policy","Sender filtering & policy",{"_path":32,"title":33},"/docs/email/cli","Create & poll email addresses from the CLI",{"_path":35,"title":36},"/docs","Getting Started",{"_path":38,"title":39},"/docs/installation/cli","CLI",{"_path":41,"title":42},"/docs/installation/docker","Docker container",{"_path":44,"title":45},"/docs/installation/docker-compose","Docker Compose",{"_path":47,"title":48},"/docs/installation/kubernetes","Kubernetes",{"_path":50,"title":51},"/docs/installation/autostart-windows","Autostart (Windows)",{"_path":53,"title":54},"/docs/installation/autostart-linux","Autostart (Linux)",{"_path":56,"title":57},"/docs/installation/autostart-macos","Autostart (MacOS)",{"_path":59,"title":60},"/docs/installation/behind-proxy","HTTP proxy configuration",{"_path":62,"title":63},"/docs/mcp","MCP Server",{"_path":65,"title":66},"/docs/outbound","Outbound Gateway: send webhooks to your customers",{"_path":68,"title":69},"/docs/outbound/setup","Set up the Outbound Gateway",{"_path":71,"title":72},"/docs/outbound/receiving","Receive and verify outbound webhooks",{"_path":74,"title":75},"/docs/outbound/operating","Monitor, retry and recover deliveries",{"_path":77,"title":78},"/docs/security","Security & Tech",{"_path":80,"title":81},"/docs/service-connections","Service Connections",{"_path":83,"title":84},"/docs/service-connections/ai-providers","AI provider connections",{"_path":86,"title":87},"/docs/service-connections/aws_s3","AWS S3",{"_path":89,"title":90},"/docs/service-connections/aws_sns","AWS SNS",{"_path":92,"title":93},"/docs/service-connections/aws_sqs","AWS SQS",{"_path":95,"title":96},"/docs/service-connections/azure","Azure",{"_path":98,"title":99},"/docs/service-connections/gcp_gcs","GCP Cloud Storage",{"_path":101,"title":102},"/docs/service-connections/gcp_pubsub","GCP Pub/Sub",{"_path":104,"title":105},"/docs/service-connections/secrets","Secrets",{"_path":107,"title":108},"/docs/skills","Agent Skills",{"_path":110,"title":111},"/docs/skills-cli","skills.sh — the Agent Skills CLI",{"_path":113,"title":114},"/docs/tunnels/demoing-your-website","Demoing your website",{"_path":116,"title":117},"/docs/tunnels/regions","Regions",{"_path":119,"title":120},"/docs/tutorials/cicd/jenkins-bitbucket","Jenkins and Bitbucket",{"_path":122,"title":123},"/docs/tutorials/cicd/jenkins-github","Jenkins and GitHub",{"_path":125,"title":126},"/docs/tutorials/cicd/jenkins-plugin","Jenkins Plugin",{"_path":128,"title":129},"/docs/tutorials/cicd/jenkins-plugin-multibranch","Jenkins Multibranch Pipelines",{"_path":131,"title":132},"/docs/tutorials/cicd/kubernetes-operator","Kubernetes Operator",{"_path":134,"title":135},"/docs/tutorials/cicd/terraform-atlantis","Terraform Atlantis",{"_path":137,"title":138},"/docs/tutorials/cicd/webhook-exec","Execute scripts on webhook",{"_path":140,"title":141},"/docs/tutorials/edge/home-assistant","Home Assistant",{"_path":143,"title":144},"/docs/tutorials/edge/javascript-app","JavaScript app",{"_path":146,"title":147},"/docs/tutorials/edge/node-red","Node-RED",{"_path":149,"title":150},"/docs/tutorials/email/airtable","Email to Airtable",{"_path":152,"title":153},"/docs/tutorials/email/api","Email to API",{"_path":155,"title":156},"/docs/tutorials/email/database","Email to Database",{"_path":158,"title":159},"/docs/tutorials/email/discord","Email to Discord",{"_path":161,"title":162},"/docs/tutorials/email/google-sheets","Email to Google Sheets",{"_path":164,"title":165},"/docs/tutorials/email/microsoft-teams","Email to Microsoft Teams",{"_path":167,"title":168},"/docs/tutorials/email/notion","Email to Notion",{"_path":170,"title":171},"/docs/tutorials/email/slack","Email to Slack",{"_path":173,"title":174},"/docs/tutorials","Tutorials",{"_path":176,"title":177},"/docs/tutorials/n8n/email-trigger","n8n Email Trigger (Inbound Email)",{"_path":179,"title":180},"/docs/tutorials/n8n/webhook-trigger","n8n Webhook Trigger (No Public IP)",{"_path":182,"title":183},"/docs/tutorials/n8n/whatsapp-cloud-api-webhook","n8n WhatsApp Cloud API Webhook Setup",{"_path":185,"title":186},"/docs/tutorials/transform/docker-to-slack","DockerHub webhook to Slack notification",{"_path":188,"title":189},"/docs/tutorials/transform/enrich-webhooks","Enrich webhooks from APIs",{"_path":191,"title":192},"/docs/tutorials/transform/stripe-to-plain","Sync Stripe subscriptions to Plain.com tenants",{"_path":194,"title":195},"/docs/tutorials/warehouse/bigquery","GCP BigQuery",{"_path":197,"title":198},"/docs/webhooks/alerts","Alerts",{"_path":200,"title":201},"/docs/webhooks/auth/username-password","Username and password",{"_path":203,"title":204},"/docs/webhooks/auth/hmac","HMAC",{"_path":206,"title":207},"/docs/webhooks/auth/jwt","JWT authentication",{"_path":209,"title":210},"/docs/webhooks/auth/http-method","Auth using request method",{"_path":212,"title":213},"/docs/webhooks/cors","CORS for webhooks",{"_path":215,"title":216},"/docs/webhooks/cron/using-cron-webhooks","Schedule recurring webhooks",{"_path":218,"title":219},"/docs/webhooks/custom-domains","Custom webhook domains",{"_path":221,"title":222},"/docs/webhooks/custom-subdomains","Custom webhook subdomains",{"_path":224,"title":225},"/docs/webhooks/custom-webhook-response","Custom response to webhooks",{"_path":227,"title":228},"/docs/webhooks/durable-webhooks","Durable webhooks: reliable delivery with automatic retries",{"_path":230,"title":231},"/docs/webhooks/functions/manipulating-json","JSON encoding",{"_path":233,"title":234},"/docs/webhooks/functions/make-http-request","Make HTTP request",{"_path":236,"title":237},"/docs/webhooks/functions/modify-request","Modify webhook headers, body, method and path",{"_path":239,"title":240},"/docs/webhooks/functions/multipart-form-data","Multipart form to JSON",{"_path":242,"title":243},"/docs/webhooks/functions/url-encoded-data","URL Encoded Form",{"_path":245,"title":246},"/docs/webhooks/functions/working-with-time","Working with time",{"_path":248,"title":249},"/docs/webhooks/functions/send-emails","Sending emails",{"_path":251,"title":252},"/docs/webhooks/functions/crypto-functions","Base64, encryption",{"_path":254,"title":255},"/docs/webhooks/functions/integrate-into-cicd","Integrating into CI/CD",{"_path":257,"title":195},"/docs/webhooks/functions/big-query",{"_path":259,"title":260},"/docs/webhooks/functions/accessing-metadata","Accessing metadata",{"_path":262,"title":263},"/docs/webhooks/functions/response-functions","Response (post-delivery) functions",{"_path":265,"title":266},"/docs/webhooks/functions/alerting","Alerting from functions",{"_path":268,"title":269},"/docs/webhooks/functions/helper-libraries","Helper libraries",{"_path":271,"title":272},"/docs/webhooks/functions/transform-webhook-payload","Transform a webhook payload",{"_path":274,"title":275},"/docs/webhooks/functions/filter-webhooks","Filter or drop webhooks before forwarding",{"_path":277,"title":278},"/docs/webhooks/functions/provider-helpers","Provider-aware function helpers",{"_path":280,"title":281},"/docs/webhooks/functions","Webhook transformations (functions): modify body, headers, method and path",{"_path":283,"title":284},"/docs/webhooks/internal/localhost","Receive webhooks on localhost with the relay CLI",{"_path":286,"title":287},"/docs/webhooks/large-webhooks","Large Webhooks",{"_path":289,"title":290},"/docs/webhooks/outbound-throttling","Outbound throttling: control webhook delivery speed",{"_path":292,"title":293},"/docs/webhooks/polling-webhooks","Polling webhooks with /v1/events",{"_path":295,"title":296},"/docs/webhooks/public/public-destination","Forward to public URL",{"_path":298,"title":299},"/docs/webhooks/public/multiple-destination-urls","Forward webhooks to multiple destinations",{"_path":301,"title":302},"/docs/webhooks/replay-on-agent-connect","Webhook replay on agent connect: recover missed webhooks",{"_path":304,"title":305},"/docs/webhooks/static-ip-address","Static IP Address",{"_path":307,"title":308},"/docs/webhooks/tls-ssl-errors","Fix TLS/SSL handshake errors: unsupported protocol, wrong version number, handshake failure",{"_path":310,"title":311},"/docs/webhooks/websocket-server","Connecting to websocket server",{"_path":313,"title":314},"/docs/webhooks/zero-retention-buckets","Zero Retention Buckets",{"_path":104,"_dir":316,"_draft":317,"_partial":317,"_locale":318,"title":105,"description":319,"layout":320,"tags":321,"body":323,"_type":1364,"_id":1365,"_source":1366,"_file":1367,"_stem":1368,"_extension":1369,"sitemap":1370},"service-connections",false,"","Store API tokens, signing secrets and passwords as encrypted, write-only secret service connections and import them into Webhook Relay functions with require(\"secret:alias\").","doc",[81,322,105],"Functions",{"type":324,"children":325,"toc":1355},"root",[326,349,354,703,710,787,792,813,819,838,878,898,904,924,1042,1062,1075,1095,1217,1222,1228,1298,1303,1309,1349],{"type":327,"tag":328,"props":329,"children":330},"element","p",{},[331,334,339,341,347],{"type":332,"value":333},"text","Secret service connections store API tokens, signing secrets and passwords for your ",{"type":327,"tag":335,"props":336,"children":337},"a",{"href":280},[338],{"type":332,"value":322},{"type":332,"value":340},". They are encrypted at rest and ",{"type":327,"tag":342,"props":343,"children":344},"strong",{},[345],{"type":332,"value":346},"write-only",{"type":332,"value":348}," — once saved, the value can be used by your functions but never read back through the API or the dashboard.",{"type":327,"tag":328,"props":350,"children":351},{},[352],{"type":332,"value":353},"Instead of pasting credentials into function source code, functions import a secret by alias:",{"type":327,"tag":355,"props":356,"children":357},"code-switcher",{},[358,503],{"type":327,"tag":359,"props":360,"children":361},"template",{"v-slot:javascript":318},[362],{"type":327,"tag":363,"props":364,"children":368},"pre",{"className":365,"code":366,"language":367,"meta":318,"style":318},"language-javascript shiki shiki-themes github-dark","const apiToken = require(\"secret:api-token\")\n\nconst resp = http.get(\"https://api.example.com/data\", {\n  headers: { Authorization: \"Bearer \" + apiToken }\n})\n","javascript",[369],{"type":327,"tag":370,"props":371,"children":372},"code",{"__ignoreMap":318},[373,419,429,470,494],{"type":327,"tag":374,"props":375,"children":378},"span",{"class":376,"line":377},"line",1,[379,385,391,396,402,408,414],{"type":327,"tag":374,"props":380,"children":382},{"style":381},"--shiki-default:#F97583",[383],{"type":332,"value":384},"const",{"type":327,"tag":374,"props":386,"children":388},{"style":387},"--shiki-default:#79B8FF",[389],{"type":332,"value":390}," apiToken",{"type":327,"tag":374,"props":392,"children":393},{"style":381},[394],{"type":332,"value":395}," =",{"type":327,"tag":374,"props":397,"children":399},{"style":398},"--shiki-default:#B392F0",[400],{"type":332,"value":401}," require",{"type":327,"tag":374,"props":403,"children":405},{"style":404},"--shiki-default:#E1E4E8",[406],{"type":332,"value":407},"(",{"type":327,"tag":374,"props":409,"children":411},{"style":410},"--shiki-default:#9ECBFF",[412],{"type":332,"value":413},"\"secret:api-token\"",{"type":327,"tag":374,"props":415,"children":416},{"style":404},[417],{"type":332,"value":418},")\n",{"type":327,"tag":374,"props":420,"children":422},{"class":376,"line":421},2,[423],{"type":327,"tag":374,"props":424,"children":426},{"emptyLinePlaceholder":425},true,[427],{"type":332,"value":428},"\n",{"type":327,"tag":374,"props":430,"children":432},{"class":376,"line":431},3,[433,437,442,446,451,456,460,465],{"type":327,"tag":374,"props":434,"children":435},{"style":381},[436],{"type":332,"value":384},{"type":327,"tag":374,"props":438,"children":439},{"style":387},[440],{"type":332,"value":441}," resp",{"type":327,"tag":374,"props":443,"children":444},{"style":381},[445],{"type":332,"value":395},{"type":327,"tag":374,"props":447,"children":448},{"style":404},[449],{"type":332,"value":450}," http.",{"type":327,"tag":374,"props":452,"children":453},{"style":398},[454],{"type":332,"value":455},"get",{"type":327,"tag":374,"props":457,"children":458},{"style":404},[459],{"type":332,"value":407},{"type":327,"tag":374,"props":461,"children":462},{"style":410},[463],{"type":332,"value":464},"\"https://api.example.com/data\"",{"type":327,"tag":374,"props":466,"children":467},{"style":404},[468],{"type":332,"value":469},", {\n",{"type":327,"tag":374,"props":471,"children":473},{"class":376,"line":472},4,[474,479,484,489],{"type":327,"tag":374,"props":475,"children":476},{"style":404},[477],{"type":332,"value":478},"  headers: { Authorization: ",{"type":327,"tag":374,"props":480,"children":481},{"style":410},[482],{"type":332,"value":483},"\"Bearer \"",{"type":327,"tag":374,"props":485,"children":486},{"style":381},[487],{"type":332,"value":488}," +",{"type":327,"tag":374,"props":490,"children":491},{"style":404},[492],{"type":332,"value":493}," apiToken }\n",{"type":327,"tag":374,"props":495,"children":497},{"class":376,"line":496},5,[498],{"type":327,"tag":374,"props":499,"children":500},{"style":404},[501],{"type":332,"value":502},"})\n",{"type":327,"tag":359,"props":504,"children":505},{"v-slot:lua":318},[506],{"type":327,"tag":363,"props":507,"children":511},{"className":508,"code":509,"language":510,"meta":318,"style":318},"language-lua shiki shiki-themes github-dark","local api_token = require(\"secret:api-token\")\nlocal http = require(\"http\")\n\nlocal resp, err = http.get(\"https://api.example.com/data\", {\n  headers = { Authorization = \"Bearer \" .. api_token }\n})\nif err then error(err) end\n","lua",[512],{"type":327,"tag":370,"props":513,"children":514},{"__ignoreMap":318},[515,549,582,589,625,661,669],{"type":327,"tag":374,"props":516,"children":517},{"class":376,"line":377},[518,523,528,533,537,541,545],{"type":327,"tag":374,"props":519,"children":520},{"style":381},[521],{"type":332,"value":522},"local",{"type":327,"tag":374,"props":524,"children":525},{"style":404},[526],{"type":332,"value":527}," api_token ",{"type":327,"tag":374,"props":529,"children":530},{"style":381},[531],{"type":332,"value":532},"=",{"type":327,"tag":374,"props":534,"children":535},{"style":387},[536],{"type":332,"value":401},{"type":327,"tag":374,"props":538,"children":539},{"style":404},[540],{"type":332,"value":407},{"type":327,"tag":374,"props":542,"children":543},{"style":410},[544],{"type":332,"value":413},{"type":327,"tag":374,"props":546,"children":547},{"style":404},[548],{"type":332,"value":418},{"type":327,"tag":374,"props":550,"children":551},{"class":376,"line":421},[552,556,561,565,569,573,578],{"type":327,"tag":374,"props":553,"children":554},{"style":381},[555],{"type":332,"value":522},{"type":327,"tag":374,"props":557,"children":558},{"style":404},[559],{"type":332,"value":560}," http ",{"type":327,"tag":374,"props":562,"children":563},{"style":381},[564],{"type":332,"value":532},{"type":327,"tag":374,"props":566,"children":567},{"style":387},[568],{"type":332,"value":401},{"type":327,"tag":374,"props":570,"children":571},{"style":404},[572],{"type":332,"value":407},{"type":327,"tag":374,"props":574,"children":575},{"style":410},[576],{"type":332,"value":577},"\"http\"",{"type":327,"tag":374,"props":579,"children":580},{"style":404},[581],{"type":332,"value":418},{"type":327,"tag":374,"props":583,"children":584},{"class":376,"line":431},[585],{"type":327,"tag":374,"props":586,"children":587},{"emptyLinePlaceholder":425},[588],{"type":332,"value":428},{"type":327,"tag":374,"props":590,"children":591},{"class":376,"line":472},[592,596,601,605,609,613,617,621],{"type":327,"tag":374,"props":593,"children":594},{"style":381},[595],{"type":332,"value":522},{"type":327,"tag":374,"props":597,"children":598},{"style":404},[599],{"type":332,"value":600}," resp, err ",{"type":327,"tag":374,"props":602,"children":603},{"style":381},[604],{"type":332,"value":532},{"type":327,"tag":374,"props":606,"children":607},{"style":404},[608],{"type":332,"value":450},{"type":327,"tag":374,"props":610,"children":611},{"style":387},[612],{"type":332,"value":455},{"type":327,"tag":374,"props":614,"children":615},{"style":404},[616],{"type":332,"value":407},{"type":327,"tag":374,"props":618,"children":619},{"style":410},[620],{"type":332,"value":464},{"type":327,"tag":374,"props":622,"children":623},{"style":404},[624],{"type":332,"value":469},{"type":327,"tag":374,"props":626,"children":627},{"class":376,"line":496},[628,633,637,642,646,651,656],{"type":327,"tag":374,"props":629,"children":630},{"style":404},[631],{"type":332,"value":632},"  headers ",{"type":327,"tag":374,"props":634,"children":635},{"style":381},[636],{"type":332,"value":532},{"type":327,"tag":374,"props":638,"children":639},{"style":404},[640],{"type":332,"value":641}," { Authorization ",{"type":327,"tag":374,"props":643,"children":644},{"style":381},[645],{"type":332,"value":532},{"type":327,"tag":374,"props":647,"children":648},{"style":410},[649],{"type":332,"value":650}," \"Bearer \" ",{"type":327,"tag":374,"props":652,"children":653},{"style":381},[654],{"type":332,"value":655},"..",{"type":327,"tag":374,"props":657,"children":658},{"style":404},[659],{"type":332,"value":660}," api_token }\n",{"type":327,"tag":374,"props":662,"children":664},{"class":376,"line":663},6,[665],{"type":327,"tag":374,"props":666,"children":667},{"style":404},[668],{"type":332,"value":502},{"type":327,"tag":374,"props":670,"children":672},{"class":376,"line":671},7,[673,678,683,688,693,698],{"type":327,"tag":374,"props":674,"children":675},{"style":381},[676],{"type":332,"value":677},"if",{"type":327,"tag":374,"props":679,"children":680},{"style":404},[681],{"type":332,"value":682}," err ",{"type":327,"tag":374,"props":684,"children":685},{"style":381},[686],{"type":332,"value":687},"then",{"type":327,"tag":374,"props":689,"children":690},{"style":387},[691],{"type":332,"value":692}," error",{"type":327,"tag":374,"props":694,"children":695},{"style":404},[696],{"type":332,"value":697},"(err) ",{"type":327,"tag":374,"props":699,"children":700},{"style":381},[701],{"type":332,"value":702},"end\n",{"type":327,"tag":704,"props":705,"children":707},"h2",{"id":706},"how-it-works",[708],{"type":332,"value":709},"How it works",{"type":327,"tag":711,"props":712,"children":713},"ol",{},[714,733,760,777],{"type":327,"tag":715,"props":716,"children":717},"li",{},[718,723,725,731],{"type":327,"tag":342,"props":719,"children":720},{},[721],{"type":332,"value":722},"Declare",{"type":332,"value":724}," — your function imports ",{"type":327,"tag":370,"props":726,"children":728},{"className":727},[],[729],{"type":332,"value":730},"require(\"secret:\u003Calias>\")",{"type":332,"value":732},". Secret imports are detected statically when the function is created or updated, so the platform always knows which secrets a function needs.",{"type":327,"tag":715,"props":734,"children":735},{},[736,741,743,748,750,758],{"type":327,"tag":342,"props":737,"children":738},{},[739],{"type":332,"value":740},"Store",{"type":332,"value":742}," — create a ",{"type":327,"tag":342,"props":744,"children":745},{},[746],{"type":332,"value":747},"Secret",{"type":332,"value":749}," service connection at ",{"type":327,"tag":335,"props":751,"children":755},{"href":752,"rel":753},"https://my.webhookrelay.com/service-connections",[754],"nofollow",[756],{"type":332,"value":757},"my.webhookrelay.com/service-connections",{"type":332,"value":759}," holding the credential value.",{"type":327,"tag":715,"props":761,"children":762},{},[763,768,770,775],{"type":327,"tag":342,"props":764,"children":765},{},[766],{"type":332,"value":767},"Bind",{"type":332,"value":769}," — on the function's ",{"type":327,"tag":342,"props":771,"children":772},{},[773],{"type":332,"value":774},"Connections",{"type":332,"value":776}," tab, bind each alias to one of your secret connections. The same connection can be reused across many functions.",{"type":327,"tag":715,"props":778,"children":779},{},[780,785],{"type":327,"tag":342,"props":781,"children":782},{},[783],{"type":332,"value":784},"Run",{"type":332,"value":786}," — before your code executes, every imported alias is preflighted. If an alias is not bound, execution stops with a clear error before any user code runs. Resolved values are injected only into the execution runtime.",{"type":327,"tag":328,"props":788,"children":789},{},[790],{"type":332,"value":791},"The account agent directs missing aliases to this secure Connections flow. It\nnever asks you to paste a secret into chat; create or rotate the value only in\nthe write-only Service Connections dialog.",{"type":327,"tag":328,"props":793,"children":794},{},[795,797,803,805,811],{"type":332,"value":796},"Alias names must start with a letter and contain only letters, numbers, underscores or hyphens (64 characters max) — for example ",{"type":327,"tag":370,"props":798,"children":800},{"className":799},[],[801],{"type":332,"value":802},"api-token",{"type":332,"value":804},", ",{"type":327,"tag":370,"props":806,"children":808},{"className":807},[],[809],{"type":332,"value":810},"stripe_signing_secret",{"type":332,"value":812},".",{"type":327,"tag":704,"props":814,"children":816},{"id":815},"binding-secrets-in-the-dashboard",[817],{"type":332,"value":818},"Binding secrets in the dashboard",{"type":327,"tag":328,"props":820,"children":821},{},[822,824,828,830,836],{"type":332,"value":823},"Open a function and switch to the ",{"type":327,"tag":342,"props":825,"children":826},{},[827],{"type":332,"value":774},{"type":332,"value":829}," tab. It lists every ",{"type":327,"tag":370,"props":831,"children":833},{"className":832},[],[834],{"type":332,"value":835},"secret:",{"type":332,"value":837}," import found in the source, together with its binding status:",{"type":327,"tag":839,"props":840,"children":841},"ul",{},[842,852],{"type":327,"tag":715,"props":843,"children":844},{},[845,850],{"type":327,"tag":342,"props":846,"children":847},{},[848],{"type":332,"value":849},"missing",{"type":332,"value":851}," — the alias is not bound yet. Use the deep-linked setup flow to create a new secret (or pick an existing one) and bind it; you'll be returned to the function afterwards.",{"type":327,"tag":715,"props":853,"children":854},{},[855,860,862,868,870,876],{"type":327,"tag":342,"props":856,"children":857},{},[858],{"type":332,"value":859},"connected",{"type":332,"value":861}," — the alias is bound to a healthy secret connection and the function is ready to run. A bound alias can also show the underlying connection's ",{"type":327,"tag":370,"props":863,"children":865},{"className":864},[],[866],{"type":332,"value":867},"pending",{"type":332,"value":869}," or ",{"type":327,"tag":370,"props":871,"children":873},{"className":872},[],[874],{"type":332,"value":875},"error",{"type":332,"value":877}," status.",{"type":327,"tag":328,"props":879,"children":880},{},[881,883,889,891,896],{"type":332,"value":882},"When you remove a ",{"type":327,"tag":370,"props":884,"children":886},{"className":885},[],[887],{"type":332,"value":888},"require(\"secret:...\")",{"type":332,"value":890}," import from the source, its stale binding is pruned automatically on save. Restoring an older ",{"type":327,"tag":335,"props":892,"children":893},{"href":280},[894],{"type":332,"value":895},"function version",{"type":332,"value":897}," re-checks the imports of that version.",{"type":327,"tag":704,"props":899,"children":901},{"id":900},"managing-secrets-via-the-api",[902],{"type":332,"value":903},"Managing secrets via the API",{"type":327,"tag":328,"props":905,"children":906},{},[907,909,914,916,922],{"type":332,"value":908},"Secret connections use the standard ",{"type":327,"tag":335,"props":910,"children":911},{"href":80},[912],{"type":332,"value":913},"service connections",{"type":332,"value":915}," API with ",{"type":327,"tag":370,"props":917,"children":919},{"className":918},[],[920],{"type":332,"value":921},"service_type: secret",{"type":332,"value":923},". Function bindings have their own endpoints:",{"type":327,"tag":925,"props":926,"children":927},"table",{},[928,952],{"type":327,"tag":929,"props":930,"children":931},"thead",{},[932],{"type":327,"tag":933,"props":934,"children":935},"tr",{},[936,942,947],{"type":327,"tag":937,"props":938,"children":939},"th",{},[940],{"type":332,"value":941},"Method",{"type":327,"tag":937,"props":943,"children":944},{},[945],{"type":332,"value":946},"Path",{"type":327,"tag":937,"props":948,"children":949},{},[950],{"type":332,"value":951},"Description",{"type":327,"tag":953,"props":954,"children":955},"tbody",{},[956,983,1017],{"type":327,"tag":933,"props":957,"children":958},{},[959,969,978],{"type":327,"tag":960,"props":961,"children":962},"td",{},[963],{"type":327,"tag":370,"props":964,"children":966},{"className":965},[],[967],{"type":332,"value":968},"GET",{"type":327,"tag":960,"props":970,"children":971},{},[972],{"type":327,"tag":370,"props":973,"children":975},{"className":974},[],[976],{"type":332,"value":977},"/v1/functions/{id}/connections",{"type":327,"tag":960,"props":979,"children":980},{},[981],{"type":332,"value":982},"List connection requirements (alias, status, bound connection)",{"type":327,"tag":933,"props":984,"children":985},{},[986,995,1004],{"type":327,"tag":960,"props":987,"children":988},{},[989],{"type":327,"tag":370,"props":990,"children":992},{"className":991},[],[993],{"type":332,"value":994},"PUT",{"type":327,"tag":960,"props":996,"children":997},{},[998],{"type":327,"tag":370,"props":999,"children":1001},{"className":1000},[],[1002],{"type":332,"value":1003},"/v1/functions/{id}/connections/{alias}",{"type":327,"tag":960,"props":1005,"children":1006},{},[1007,1009,1015],{"type":332,"value":1008},"Bind an alias to a secret connection (",{"type":327,"tag":370,"props":1010,"children":1012},{"className":1011},[],[1013],{"type":332,"value":1014},"{\"service_connection_id\": \"...\"}",{"type":332,"value":1016},")",{"type":327,"tag":933,"props":1018,"children":1019},{},[1020,1029,1037],{"type":327,"tag":960,"props":1021,"children":1022},{},[1023],{"type":327,"tag":370,"props":1024,"children":1026},{"className":1025},[],[1027],{"type":332,"value":1028},"DELETE",{"type":327,"tag":960,"props":1030,"children":1031},{},[1032],{"type":327,"tag":370,"props":1033,"children":1035},{"className":1034},[],[1036],{"type":332,"value":1003},{"type":327,"tag":960,"props":1038,"children":1039},{},[1040],{"type":332,"value":1041},"Unbind an alias",{"type":327,"tag":328,"props":1043,"children":1044},{},[1045,1047,1053,1055,1060],{"type":332,"value":1046},"Function reads also return a ",{"type":327,"tag":370,"props":1048,"children":1050},{"className":1049},[],[1051],{"type":332,"value":1052},"requirements",{"type":332,"value":1054}," field so automation (including the ",{"type":327,"tag":335,"props":1056,"children":1057},{"href":62},[1058],{"type":332,"value":1059},"MCP server",{"type":332,"value":1061},") can detect unbound secrets. All endpoints are covered by audit logs.",{"type":327,"tag":704,"props":1063,"children":1065},{"id":1064},"secrets-vs-function-config-cfg",[1066,1068,1074],{"type":332,"value":1067},"Secrets vs function config (",{"type":327,"tag":370,"props":1069,"children":1071},{"className":1070},[],[1072],{"type":332,"value":1073},"cfg",{"type":332,"value":1016},{"type":327,"tag":328,"props":1076,"children":1077},{},[1078,1080,1085,1087,1093],{"type":332,"value":1079},"Functions also have a per-function ",{"type":327,"tag":335,"props":1081,"children":1082},{"href":280},[1083],{"type":332,"value":1084},"config store",{"type":332,"value":1086}," read with ",{"type":327,"tag":370,"props":1088,"children":1090},{"className":1089},[],[1091],{"type":332,"value":1092},"cfg.get(\"key\")",{"type":332,"value":1094},". When should you use which?",{"type":327,"tag":925,"props":1096,"children":1097},{},[1098,1124],{"type":327,"tag":929,"props":1099,"children":1100},{},[1101],{"type":327,"tag":933,"props":1102,"children":1103},{},[1104,1107,1116],{"type":327,"tag":937,"props":1105,"children":1106},{},[],{"type":327,"tag":937,"props":1108,"children":1109},{},[1110],{"type":327,"tag":370,"props":1111,"children":1113},{"className":1112},[],[1114],{"type":332,"value":1115},"require(\"secret:alias\")",{"type":327,"tag":937,"props":1117,"children":1118},{},[1119],{"type":327,"tag":370,"props":1120,"children":1122},{"className":1121},[],[1123],{"type":332,"value":1092},{"type":327,"tag":953,"props":1125,"children":1126},{},[1127,1145,1163,1181,1199],{"type":327,"tag":933,"props":1128,"children":1129},{},[1130,1135,1140],{"type":327,"tag":960,"props":1131,"children":1132},{},[1133],{"type":332,"value":1134},"Scope",{"type":327,"tag":960,"props":1136,"children":1137},{},[1138],{"type":332,"value":1139},"Account-wide, reusable across functions",{"type":327,"tag":960,"props":1141,"children":1142},{},[1143],{"type":332,"value":1144},"Per function",{"type":327,"tag":933,"props":1146,"children":1147},{},[1148,1153,1158],{"type":327,"tag":960,"props":1149,"children":1150},{},[1151],{"type":332,"value":1152},"Readable after saving",{"type":327,"tag":960,"props":1154,"children":1155},{},[1156],{"type":332,"value":1157},"No — write-only",{"type":327,"tag":960,"props":1159,"children":1160},{},[1161],{"type":332,"value":1162},"Yes",{"type":327,"tag":933,"props":1164,"children":1165},{},[1166,1171,1176],{"type":327,"tag":960,"props":1167,"children":1168},{},[1169],{"type":332,"value":1170},"Missing value",{"type":327,"tag":960,"props":1172,"children":1173},{},[1174],{"type":332,"value":1175},"Execution blocked before user code runs",{"type":327,"tag":960,"props":1177,"children":1178},{},[1179],{"type":332,"value":1180},"Returns empty value at runtime",{"type":327,"tag":933,"props":1182,"children":1183},{},[1184,1189,1194],{"type":327,"tag":960,"props":1185,"children":1186},{},[1187],{"type":332,"value":1188},"Redaction",{"type":327,"tag":960,"props":1190,"children":1191},{},[1192],{"type":332,"value":1193},"Exact values redacted from errors and logs",{"type":327,"tag":960,"props":1195,"children":1196},{},[1197],{"type":332,"value":1198},"Not redacted",{"type":327,"tag":933,"props":1200,"children":1201},{},[1202,1207,1212],{"type":327,"tag":960,"props":1203,"children":1204},{},[1205],{"type":332,"value":1206},"Best for",{"type":327,"tag":960,"props":1208,"children":1209},{},[1210],{"type":332,"value":1211},"API tokens, signing secrets, passwords",{"type":327,"tag":960,"props":1213,"children":1214},{},[1215],{"type":332,"value":1216},"Non-sensitive tunables, flags, endpoints",{"type":327,"tag":328,"props":1218,"children":1219},{},[1220],{"type":332,"value":1221},"For anything you'd call a credential, prefer secret connections.",{"type":327,"tag":704,"props":1223,"children":1225},{"id":1224},"security",[1226],{"type":332,"value":1227},"Security",{"type":327,"tag":839,"props":1229,"children":1230},{},[1231,1241,1251,1260,1270,1288],{"type":327,"tag":715,"props":1232,"children":1233},{},[1234,1239],{"type":327,"tag":342,"props":1235,"children":1236},{},[1237],{"type":332,"value":1238},"Encryption at rest",{"type":332,"value":1240}," — secret values are encrypted with AES-256-GCM, like all service connection credentials.",{"type":327,"tag":715,"props":1242,"children":1243},{},[1244,1249],{"type":327,"tag":342,"props":1245,"children":1246},{},[1247],{"type":332,"value":1248},"Write-only",{"type":332,"value":1250}," — API responses and the dashboard never return the stored value.",{"type":327,"tag":715,"props":1252,"children":1253},{},[1254,1258],{"type":327,"tag":342,"props":1255,"children":1256},{},[1257],{"type":332,"value":1188},{"type":332,"value":1259}," — exact secret values are redacted from function runtime errors and console/log output.",{"type":327,"tag":715,"props":1261,"children":1262},{},[1263,1268],{"type":327,"tag":342,"props":1264,"children":1265},{},[1266],{"type":332,"value":1267},"Preflight",{"type":332,"value":1269}," — secrets resolve before user code runs; an unbound alias fails fast instead of executing with a missing credential.",{"type":327,"tag":715,"props":1271,"children":1272},{},[1273,1278,1280,1286],{"type":327,"tag":342,"props":1274,"children":1275},{},[1276],{"type":332,"value":1277},"Deletion protection",{"type":332,"value":1279}," — a secret connection still bound to a function cannot be deleted (the API returns ",{"type":327,"tag":370,"props":1281,"children":1283},{"className":1282},[],[1284],{"type":332,"value":1285},"409 Conflict",{"type":332,"value":1287},") until it is unbound or the import is removed.",{"type":327,"tag":715,"props":1289,"children":1290},{},[1291,1296],{"type":327,"tag":342,"props":1292,"children":1293},{},[1294],{"type":332,"value":1295},"Account isolation",{"type":332,"value":1297}," — secrets can only be bound to functions in the same account.",{"type":327,"tag":328,"props":1299,"children":1300},{},[1301],{"type":332,"value":1302},"Secret values are limited to 64 KiB.",{"type":327,"tag":704,"props":1304,"children":1306},{"id":1305},"next-steps",[1307],{"type":332,"value":1308},"Next steps",{"type":327,"tag":839,"props":1310,"children":1311},{},[1312,1322,1339],{"type":327,"tag":715,"props":1313,"children":1314},{},[1315,1320],{"type":327,"tag":335,"props":1316,"children":1317},{"href":280},[1318],{"type":332,"value":1319},"Functions overview",{"type":332,"value":1321}," — what functions can do and how to write them.",{"type":327,"tag":715,"props":1323,"children":1324},{},[1325,1329,1331,1337],{"type":327,"tag":335,"props":1326,"children":1327},{"href":268},[1328],{"type":332,"value":269},{"type":332,"value":1330}," — curated modules you can ",{"type":327,"tag":370,"props":1332,"children":1334},{"className":1333},[],[1335],{"type":332,"value":1336},"require()",{"type":332,"value":1338}," alongside secrets.",{"type":327,"tag":715,"props":1340,"children":1341},{},[1342,1347],{"type":327,"tag":335,"props":1343,"children":1344},{"href":233},[1345],{"type":332,"value":1346},"Make HTTP requests",{"type":332,"value":1348}," — call external APIs using your stored tokens.",{"type":327,"tag":1350,"props":1351,"children":1352},"style",{},[1353],{"type":332,"value":1354},"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":318,"searchDepth":431,"depth":431,"links":1356},[1357,1358,1359,1360,1362,1363],{"id":706,"depth":421,"text":709},{"id":815,"depth":421,"text":818},{"id":900,"depth":421,"text":903},{"id":1064,"depth":421,"text":1361},"Secrets vs function config (cfg)",{"id":1224,"depth":421,"text":1227},{"id":1305,"depth":421,"text":1308},"markdown","content:docs:service-connections:secrets.md","content","docs/service-connections/secrets.md","docs/service-connections/secrets","md",{"loc":104},1791655671982]