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